这篇记录的是前10关,基本都是黑名单绕过,待续。
第一关
要求上传一个webshell到服务器,图片格式。
用F12审计下代码,发现是前端js限制,删除检测文件名的函数。(也可以用burpsuit抓包改文件名)
这里我用chrome浏览器修改,但是浏览器没有响应,有知道原因的师傅们欢迎和我联系。推荐使用Firefox浏览器。
上传写好的一句话,右键复制上传地址。
用蚁剑连接,上传成功。
第二关
先用F12定位简单看下发现并没有前端限制,尝试上传一句话,打印出文件类型不正确,数据传过去了,说明前端并没有限制,可能后端服务器存在MIME限制。
修改为image/png,放包
右键拿到上传地址http://localhost/upload/testa.php,访问成功。
第三关
尝试上传一个小马,回显不能上传php后缀的文件。
猜测应该是有黑名单,尝试利用大小写绕过,失败。再尝试构造特别的文件拓展名,如php3,尝试上传成功。
连接一句话试试,连接成功。
第四关
上传刚才改后的一句话,不允许上传,这里应该还是黑名单限制,限制范围更广了。
尝试构造特殊的后缀试试php3_
放包上传成功
找到上传目录,用蚁剑连接试试:连接失败。并没有解析特殊名。
这个黑名单范围有点广,就不做太多别的后缀名尝试,上传一个.htaccess文件看能不能重置解析,上传成功。
1 | <FilesMatch ".png"> |
再把一句话木马的后缀改为png上传。(我这里用的是图片马)
蚁剑连接
第五关
这里尝试重置解析发现不允许上传,那么只能尝试构建特使文件名。
再次尝试构建特殊的文件名,这里尝试利用00截断来上传。
无果。尝试将混淆大小写,将马的名字改为.phP上传
连接蚁剑,成功解析。
第六关
之前那样猜太耗费时间了,直接看源码,发现没有对文件名结尾做校验,因此可以尝试抓包在文件末尾添加空格来绕过。
放包上传成功,蚁剑连接
第七关
通过查看代码,并没有对文件名结尾做校验,原理同第六关,这里直接给文件名加.
成功上传
第八关
为了加快速度,将小马改成phpinfo(),这样就可以在浏览器直接验证上传效果。
通过看源码发现,这一次对文件名大小写,后缀都做了限制,我们可以通过windows流特性来绕过。在文件名结尾增加 ::$DATA 来实现绕过
放包上传成功。
右键拿到上传地址,访问成功。
第九关
看源代码,他先过滤文件名结尾的.再过滤结尾的空格因此我们可以构造一个特殊的文件名php.空格.
成功上传,再访问,无报错(这里传的是小马)。
第十关
上传一个马试试,成功。
访问发现后缀名丢失。
上传一个双写后缀名的.pphphp文件
访问