1.看题目提示分析题目内容
盲猜一波~ : 是关于PHP代码审计的
2.打开链接,分析题目
给你提示了我们访问source.php来看一下
大boss出现,开始详细手撕~
3.手撕PHP代码(代码审计)
本人是小白,所以第一步,先问chatGPT的意见:
这个主要是对class emmm类的分析,然后还有后面的三个&& 条件判断:
结合代码去理解GPT给的解释,就可以很容易形成一个思路:
重点在:
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
输入一个包含flag文件的文件名作为请求头,然后再检查该请求文件经过checkFile检查(是否为白名单的文件,是的话就检查通过;不是的话,检查失败,输出你亲爱的滑稽),检查成功,得到flag。
4.开始解题
有点可疑,去看一下
这有一个点,flag在ffffllllaaaagggg:记住遇到这样的,一般情况下这个文件存储在linux服务器的根目录下,需要去获得其内容。
../../../../../../../../../../ffffllllaaaagggg
(../那么多是为了确保能够返回根目录)
大概意思是source.php文件检查之后,请求文件会被替换成../../../../../../../ffffllllaaaagggg,作为路径遍历攻击。
EXP
在source.ph 文件中,为file进行赋值,赋值内容为whitelist的内容,再被替换成我们的路径遍历攻击,夺旗成功。
因为whiteList中有两个已知的白名单文件:source.php & hint.php
所以有两个解法:
source.php?file=source.php?/../../../../../../../../../ffffllllaaaagggg
source.php?file=hint.php?/../../../../../../../../../ffffllllaaaagggg