一、黑名单
黑名单,顾名思义只要出现在名单之中的后缀,都不能上传成功,这就是黑名单的过滤方式。
$deny_ext = array('.asp','.aspx','.php','.jsp');
在upload-labs中以上便是一个常见的黑名单写法,下面是在用if语句来验证获得的文件后缀是否在数组里。
if(!in_array($file_ext, $deny_ext))
这种过滤方式的弊端也很明显。
-
如果过滤方式写的不严谨,内容不齐全。根据他的规则,只要没出现在黑名单中的后缀文件都可以上传成功。我们可以借助一些特殊的方式或者后缀。例如解析漏洞、特殊解析后缀php5(达成一些条件,也能解析成php文件)
-
否则,只能利用一些特殊的绕过方法。例如%00截断,::$DATA
1、特殊解析后缀
由于黑名单过滤不严谨,导致有些特殊后缀上传后也能执行出PHP文件的效果。
apacha服务器的PHP2、php3、php4、phtml、pht文件后缀
在配置文件里加上下面这段话才可以。不知道什么原因,我在本地测试许久都没有解析成功。
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
2、大小写转换
后端未将文件后缀进行统一格式的转换,而window系统对大小写不敏感,可以执行,从而进行绕过。
upload-labs第五关
3、.htaccess解析
它是一个配置文件,针对当前目录,里面存放着Apache服务器配置相关的指令。主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
启用它需要将配置文件 httpd.conf 里的 AllowOverride 设置为All
上传 .htaccess 文件
<FilesMatch "gg.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
命名为.htaccess这个文件是伪静态文件也就是说,将文件中含有gg.jpg文件用PHP代码解析执行
在上传一张gg.jpg包含php代码的文件即可。
有时也可考虑上传以 .ini 文件
4、空格和点绕过
空格和点结尾的后缀文件。可以利用这一特性,将要上传的文件后缀加上点或者空格,从而绕过黑名单。有时根据绕过代码是只有一次过滤,可不止加一个点,进行绕过。
upload第十关 双点加空格
upload第八关 单点
upload第七关 单空格
有时思路需要开阔一点
5、::$DATA绕过
在window的时候如果文件名+::$DATA
会把::$DATA
之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA
之前的文件名,从而实现绕过。