upload-labs 靶场训练篇(windows 版 21 题)1-13 题
upload-labs 为文件上传的训练靶场,目前一共有 21 关,基本涵盖了目前全部的文件上传漏洞。此篇为上篇。
level-1 (前端 JS 验证)
源码:
1 | function checkFile() { |
解答:
在浏览器中直接执行:
1 | checkfile=[] |
使得前端返回 array 为空,即可上传一句话木马,拿到 shell。
level-2 (后端 PHP 验证)
源码:
1 | $is_upload = false; |
解答:
BP 抓包,修改为:image/png
即可绕过
level-3 (解析漏洞)
源码:
1 | $is_upload = false; |
解答:
本题环境出了一些问题,Apache 无法正常解析 phps/phtml 这样的后缀,因此只贴出做法。
使用前提:Apache 的 httpd.conf 中有以下代码:
1 | AddType application/x-httpd-php .php .phtml .phps .php5 .pht |
ban 了几个关键字,绕就完事了。后缀改为上述内容。如果不开解析,将会变成注释或者直接输出在屏幕上。
level-4(.htaccess)
源码:
1 | $is_upload = false; |
解答:
全过滤了还怎么打
唯独放了一个.htaccess
,只能构筑相应文件:
前提条件:(1.mod_rewrite模块开启。2.AllowOverride All
)
此时,传上去的图片都会被解析成 PHP 文件。直接传马连 a.png 即可。
level-5 和 10 (. 空格。空格)
源码 5:
1 | $is_upload = false; |
源码 10:
1 | $is_upload = false; |
解答:
全 ban 完了,用.{空格}. 绕过
1 | filename = "phpinfo.php. . " |
访问 phpinfo.php 即可
level-6 (大小写绕过)
源码:
1 | $is_upload = false; |
解答:
没有防大小写,直接后缀名改成 PHP 一把梭了。、
level-7 (空格绕过)
源码:
1 | $is_upload = false; |
解答:
空格绕过,上传 phpinfo.php
,访问 phpinfo.php.
00 截断的 php 版本要求是小于 5.3.29
level-8 (点绕过)
源码:
1 | $is_upload = false; |
解答:
. 绕过,穿上 phpinfo.php.
,访问 php.
即可。
level-9 (::$DATA 绕过)
源码:
1 | $is_upload = false; |
解答:
可以发现没有去除字符串::$DATA
思路:同第六题一样,利用 windows 的特性,这里黑名单没有过滤::$DATA
,因此上传 xx.php::$DATA
,上传成功后 windows 会自动去除::$DATA
上传文件.php::$DATA
level-11 (双写绕过)
源码:
1 | $is_upload = false; |
解答:
双写绕过
上传:.pphphp
,进过黑名单过滤,会变成.php
level-12 (白名单绕过之 get 型:%00)
源码:
1 | $is_upload = false; |
解答:
此题对环境有特殊要求,目前无法复现,直接使用大佬的笔记内容
4 月 24 日更新:复现完成。修改 php.ini 相应参数,已经 PHP5.2.17
前提:该题需要 magic_quotes_gpc=off、php 版本要小于 5.3.4,5.3.4 及以上已经修复该问题
思路:因为 $img_path 是拼接而成,所以直接使用 %00 截断后面的内容,因此,先上传 xx.jpg,再使用 bp 截断
level-13 (白名单绕过之 post 型:0x00)
源码:
1 | $is_upload = false; |
解答:
依旧是白名单绕过。post 型,hex 中 0x00 绕过。
在 hex 中,找到 1.php
对应的十六进制数值,70、68、70,在 70 后插入一个字节 00
直接访问阶段前的 php 文件即可。