这道题还是没有做出来。。,来总结一下
1.ctrl+U显示源码
2.看见body里有source.php
打开这个source.php
看见了源码
-
highlight_file(FILE);
- 这行代码用于高亮显示当前文件的源码,适合调试和学习,但在生产环境中通常不需要。
-
class emmm
- 定义了一个名为
emmm
的类。
- 定义了一个名为
-
public static function checkFile(&$page)
- 这是一个静态方法,名为
checkFile
,用于检查传入的$page
参数是否安全。
- 这是一个静态方法,名为
-
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
- 定义一个白名单数组,只允许
source.php
和hint.php
这两个文件被包含。
- 定义一个白名单数组,只允许
-
if (! isset(page) \|\| !is_string(page)) { ... }
- 检查
$page
是否被设置且是字符串。如果不是,则返回提示信息并结束函数。
- 检查
-
if (in_array($page, $whitelist)) { ... }
- 检查
$page
是否在白名单中。如果是,返回true
。
- 检查
-
$_page = mb_substr(...)
- 这段代码处理
$page
,去掉查询字符串(?
之后的部分),并检查处理后的值是否在白名单中。
- 这段代码处理
-
_page = urldecode(page);
- 对
$page
进行 URL 解码,然后再次进行同样的白名单检查。
- 对
-
echo "you can't see it"; return false;
- 如果
$page
不在白名单中,返回提示信息并结束函数。
- 如果
-
if (! empty($_REQUEST['file']) ... )
- 检查请求中是否有
file
参数,且该参数是字符串。如果满足条件,调用checkFile
方法。
- 检查请求中是否有
-
include $_REQUEST['file'];
- 如果检查通过,包含用户请求的文件。
-
else { echo "<br><img src="..." />"; }
- 如果没有通过检查,则显示一张图片。
3.打开hint.php看看
发现flag在文件ffffllllaaaagggg里
4.通过学习,flag文件一般在根目录里,一般用4层返回
source.php?file=hint.php?/../../../../ffffllllaaaagggg
得到flag