upload -labs | Pass- 11 ~ 13

Pass-11:双写后缀绕过

关卡提示: 本pass查看的配置文件是黑名单,但是禁止上传.php|.php5|.php4|.php3|.phtml等后缀!同时将上传的文件重新重命名!

核心思路: 代码使用 str_ireplace 将黑名单中的后缀替换为空。这可能导致双写绕过。




Pass-12:%00截断(GET)

关卡提示: 白名单,GET型00截断

PS:需要php的版本号低于5.3.29,且magic_quotes_gpc为关闭状态(需要自己关闭)
核心思路: 在 PHP 版本 < 5.3.4 时,存在一个漏洞:move_uploaded_file 函数在遇到 0x00(空字符)时会截断,后面的数据将被忽略。

绕过方法:
上传一个白名单内的文件,如 shell.jpg。
使用 Burp Suite 抓包。
在保存路径处做手脚。请求URL类似:.../upload.php?save_path=../upload/
我们将 save_path 修改为 ../upload/shell.php%00(注意:%00 是 URL 编码形式的空字符)。

image

最终,完整的保存路径在PHP中会被理解为 ../upload/shell.php%00/shell.jpg -> ../upload/shell.php\0/shell.jpg

move_uploaded_file 遇到\0截断,最终文件被保存为 ../upload/shell.php




Pass-13: 00截断(POST)

关卡提示: 白名单,POST型00截断。

核心思路: 与 Pass-11 相同,但数据在 POST 包中。POST 包中的 %00 不会被自动解码,需要手动修改十六进制。

绕过方法:
上传一个白名单文件 shell.jpg。
使用 Burp Suite 抓取 POST 请求包。
在 Burp Suite 的 Hex 标签中,找到保存路径字段(如 ../upload/shell.jpg)。
将 shell.jpg 中的某个字符(如第一个点)的十六进制值 2e 修改为 00(空字符)。例如,将路径修改为 ../upload/shell.php .jpg,并在 php 和空格之间,将空格的十六进制 20 改为 00

image

image

image

posted @ 2026-08-06 13:16  Dragon_Roar  阅读(10)  评论(0)    收藏  举报