2018年6月19日,phpmyadmin在最新版本修复漏洞。phpMyAdmin 是一个以PHP为
基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可
用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改
、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
在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,通过目录穿越,就可造成任意文件包含。最终通过该漏洞实现了上述攻击,这个漏洞也很快被修复并发布新版本。
phpMyAdmin 4.8.0
phpMyAdmin 4.8.1
通过git changelog查看官方如何修复漏洞的。查找补丁源码发现修复手法简单粗暴,直接在checkPageValidity中多加了一个参数 i n c l u d e 。 当 include。当 include。当include=true时,仅执行第一次判断$page的合法性,我们的payload也就没有办法进入到urldecode的步骤了.
一台windows2008
phpstudy 2018
phpmyadmin4.8.1
[https://www.xp.cn/download.html]
[https://blog.csdn.net/qq_41901122/article/details/104700734]
[http://192.168.139.136/phpmyadmin/README]
[C:\phpStudy\PHPTutorial\WWW\phpMyAdmin/README]
show VARIABLES like ‘%char%’;查看系统路径select @@datadir;查看数据存储路径
[ http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/Windows\win.ini]
注意 写入的一句话需要用GET方式,POST方式尝试过无法成功
[ http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\MySQL\data\test\qwe.frm]
访问【http://192.168.139.136/phpmyadmin/index.php?target=db_datadict.php%253f/…/…/…/…/…/…/…/…/…/phpStudy\PHPTutorial\tmp\tmp\sess_v4v23hqph5m5ljnq12860p647319mqqd】
本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!
由于使用不当造成的后果上传者概不负责!
参考链接:https://blog.csdn.net/Eastmount/article/details/103925419/