第一关 前端js检查——后缀检查
分析:尝试上传1.php文件,提示只允许上传png|jpg|gif文件。
尝试:上传一个1.php.jpg文件。利用burup suite抓包,并修改 为1.php,上传成功,说明只进行了前端js检查。
浏览器访问upload/1.php,显示如下,成功上传shell
第二关 MIME绕过
根据源码看,进行了MIME类型检查。
使用burp suite抓包,改包:修改content-Type: image/png,如下:
从上图可见上传成功,使用cknife连接shell.php
第三关 黑名单限制 - 文件拓展名绕过
通过以下提示(或者查看)可看出不允许上传.asp,.aspx,.php,.jsp后缀文件
可考虑使用.phtml,.php3等绕过
上传shell.phtml、shell.php3
上传成功,使用cknife连接
第四关 黑名单验证 - .htaccess文件绕过
由提示可知,几乎禁止了全部可执行文件后缀。
此时可考虑使用.htaccess文件进行黑名单绕过
1)创建.htaccess文件,并上传
<FilesMatch "shell.png">
SetHandler application/x-httpd-php
</FilesMatch>
.htaccess文件说明:通过一个.htaccess文件调用php的解析器去解析一个文件中只要包含“shell.png”这个字符串任意文件。
2)上传shell.png
<?php @phpinfo();?>
3)浏览器访问shell.png,解析成功,如下:
第五关 黑名单验证 - 文件后缀大写绕过
这一关禁止上传.htaccess文件,但是没有强制转换为小写,所以可以使用全部大写文件后缀进行绕过。