WarmUp
直接crtl+u看源码,提示source.php
source.php
再看看hint.php有什么
hint.php
前不久学过一点文件包含漏洞,但这种类型的还没有做过,百度后发现这是远程文件包含
https://www.cnblogs.com/leixiao-/p/10265150.html
现在就知道了如何利用,分析如下:
checkfile:
''if (! isset($page) || !is_string($page))'',判断$page是否为空、是否为字符串.
当$page在$whitelist(白名单)中时,返回true;考虑到有$page有参数,进入
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
_$page是取出$page问号前的字符串,再判断_$page是否在$whitelist中,是则返回true;还会考虑到参数有url编码的情况,还会进入下一次判断:
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
大致过程:
判断$page是否在$whitelist中->(如果是,返回true,在此结束)如果不是,考虑参数,取?前字符串为$_page,判断_$page是否在$whitelist中->(如果是,返回true,在此结束)如果不是,考虑url编码,url解码后取?前字符串为$_page,判断是否在$whitelist中->如果是,则返回true,否则echo "you can't see it";
因此可以构造不同的payload:
1、?file=hint.php%253f/../../../../../../../../ffffllllaaaagggg
,因为服务器会自动解一次码,(%25 url解码为%),所以$page为hint.php%3f/../../../../../../../../ffffllllaaaagggg
再次解码后为hint.php?/../../../../../../../../ffffllllaaaagggg,取hint.php返回true
2、?
file=hint.php?/../../../../../../../../ffffllllaaaagggg这里就不多介绍了
结语
第一次写文章,感觉学的还是太少,突然想起来前几天好像也有这种题,没做出来。(我是fw。。。)
参考自https://blog.csdn.net/weixin_44677409/article/details/93300823