这关源码可以看到,过滤了很多,大小写,空格,点,::DATA,那我们该怎么绕过呢。

这里我们可以使用Apache的解析漏洞、00截断绕过以及特殊字符组合绕过,当然,这里重点介绍组合绕过。解析漏洞和00截断在之前的关卡使用过,后续也还有这类题目,我们多介绍一种思路。
我们观察源码可以发现,它的处理逻辑是先删除文件末尾的点,然后提取最后一个点后面的字符作为需要检测的后缀,然后转为小写,去除::DATA字符串,最后去空。既然它只处理一次,那么我们可以多输入一些特殊字符,下面有输入abc.php. .的解析过程。
处理过程
1. 初始文件名
$file_name = "abc.php. ."2. 删除末尾的点
deldot($file_name)
$file_name = deldot($file_name); // "abc.php. ." → "abc.php. "这个函数只删除文件名末尾的点,所以最后一个点被删除,但中间的点保留。
3. 提取扩展名
$file_ext = strrchr($file_name, '.'); // ". "
strrchr查找最后一个点号的位置,返回.(点+空格)4. 转换为小写
$file_ext = strtolower($file_ext); // ". "仍然是
.(点+空格)5. 去除
::$DATA
$file_ext = str_ireplace('::$DATA', '', $file_ext); // ". "没有
::$DATA,保持不变。6. 首尾去空
$file_ext = trim($file_ext); // "."关键步骤:
trim去除了空格,现在$file_ext = "."
所以,我们还是burp抓包然后修改文件名来绕过。

上传后我们可以直接访问这个文件。

解题点:特殊字符组合绕过。
493

被折叠的 条评论
为什么被折叠?



