[BUUCTF] [HCTF 2018] WarmUp
php 代码审计
打开地址后一个滑稽

老手艺f12

访问source.php
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file']) ']值为非空
&& is_string($_REQUEST['file']) //且为字符串
&& emmm::checkFile($_REQUEST['file']) //且能通过checkFile函数校验
) {
include $_REQUEST['file']; //包含$_REQUEST['file']文件
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
一段php代码
找到 $whitelist = [“source”=>“source.php”,“hint”=>“hint.php”]; 白名单里有的,访问一下

提示说在文件ffffllllaaaagggg中,这里肯定访问不到这个地址,需要构造,先看代码,看到最后一段if部分,这里将代码意思标注在代码块中。
三个条件:值非空、字符串、能够通过checkFile函数校验
满足即包含这个文件,这里就是ffffllllaaaagggg,包含之后就显示flag了,否则打印滑稽表情。
再跟进checkFile()函数,
大体意思就是:
1.第一个if语句对变量进行检验,要求$page为字符串,否则返回false
2.第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
3.第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true
4.第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
根据以上
http://7a0b1690-2914-4501-95bd-2970d73ff8b6.node4.buuoj.cn:81/?file=hint.php
首先是如上地址,会拿到flag is not here的提示,hint.php 也再白名单中,我们可以直接在此基础上进行构造
截取?之前的部分,因此我们添加一个? 然后包含的文件值ffffllllaaaagggg,第四个if是解码,直接在url中构造解码之后还是不变,所以不要多管。

直接这样构造并没有回显,因为具体ffffllllaaaagggg的位置不知道,通过…/依次寻找

payload: ?file =hint.php?../…/…/…/…/ffffllllaaaagggg
|