1. 题目描述
题目链接:戳我💋
2. 解题过程
打开链接看到一个滑稽的表情
F12 看到有 source.php

在地址栏输入 source.php

代码审计
发现有个hint.php,进去看一看,得到一句话flag not here, and flag in ffffllllaaaagggg
可能flag就在ffffllllaaaagggg里面
粗略的看了一下整体代码,发现是白名单验证,文件包含只能包含source.php和hint.php
看下主要的,首先file不能为空,file必须是字符串,还要通过checkFile()函数的检查,才能够包含。
检查还有三次,第三次经过了url解码,感觉有点问题,可是这个得怎么绕啊!!!百度启动!!!
经过查阅不少资料,得到这是phpmyadmin 4.8.1的一个远程文件包含的漏洞!!!!
既然如此,那就一步一步来分析一下checkFile()函数:
首先设置了一个白名单,只包含source.php和hint.php,第一个if检查是否存在$page并且是否为字符串。
检查$page是否在白名单中,是的话返回true。接下来,两个函数一个mb_substr和mb_strpos,总的意思就是截取变量page中?前面的字符串,然后再进行白名单校验。
考虑了URL编码的缘故,再一次解码之后,进行校验。
分析完代码后就可以开始构造payload了,传递一个参数file=source.php?/../../../../../../ffffllllaaaagggg,目录穿越,当然还要把?进行两次url编码,所以最后的payload为file=source.php%253f/../../../../../../ffffllllaaaagggg,首先,第一次验证肯定过不了,第二次截取完也过不了,第三次,经过url解码之后,我们构造的payload就变成了source.php?/../../../../../../ffffllllaaaagggg,很显然,它是截取?前面的进行校验,我们这的source.php在白名单中,所以返回true,最后通过目录穿越的到ffffllllaaaagggg里面的内容,也就是flag。
payload:
file=source.php%253f/../../../../../../ffffllllaaaagggg
获取 flag

3. 所需工具
无
4. 写在最后
本文完
敬爱与明天🌹