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 编码形式的空字符)。

最终,完整的保存路径在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




浙公网安备 33010602011771号