前言
我在PMA 4.8.0~4.8.1中发现了一个文件包含漏洞,它被分配了CVE-2018-12613。它是由脆弱路径检查功能中的验证旁路导致的。此漏洞使经过身份验证的远程攻击者能够在服务器上执行任意PHP代码。
漏洞分析
在index.php
这个过去常常被声明中的条件所保护,但在4.8.0版本中,最后一个检查被改为重用现有的函数,我认为这个函数是用来检查URL路径的。因此,我们可以利用URL功能来达到任意文件包含。功能如下:
函数从后面的所有内容(后面的 所有内容都是查询字符串,它不是URL路径的一部分)中检查它是否在白名单中。白名单是一个列表:
Attack
现在,由于我们可以完全控制,直接来自,我们可以将其设置为:
该功能然后执行其检查:
1、剥去一切后 ?,分配'sql.php'给$_page
2、检查$_page,即'sql.php',在白名单中?是
3、通过检查后,回到index.php:
完整的exp:
tips:
1、%3f 将被解码并成为 ?
2、Core::checkPageValidity剥离所有内容 ? 并sql.php在白名单内找到:检查被绕过!
2、index.php运行include 'sql.php?/../../etc/passwd',PHP的魔术来转换路径 ../etc/passwd,而不检查目录是否sql.php?存在。最后,它包含../etc/passwd成功。
写exp
要写这个漏洞,你可以枚举文件路径,如:
一旦你找到了..你需要预先设置的数量 ,你可以将你的php有效载荷注入到访问日志中,或者运行一个查询SELECT ‘',sql.php并包含你自己的会话文件(例如/var/lib/php5/sess_
),它包含你的SQL查询,以执行任意PHP代码。
参考
https://www.phpmyadmin.net/security/PMASA-2018-4/
https://www.securityfocus.com/bid/104532
https://nvd.nist.gov/vuln/detail/CVE-2018-12613
领取专属 10元无门槛券
私享最新 技术干货