实验原理
文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:
1. 后缀名检测绕过
2. MIME类型检测与绕过
3. 文件内容检测与绕过
4. 00截断绕过
5. 条件竞争检测与绕过
后缀名检测的绕过方法也有很多,常见的有:
1. 黑名单--大小写绕过
2. 黑名单--名单列表绕过
3. 黑名单--Windows特性(末尾的点【.】)绕过
4. 黑名单--Windows特性(空格【 】)绕过
5. 黑名单--Windows特性(::$DATA)绕过
6. 白名单(需要结合文件包含漏洞或者Web服务器解析漏洞)
7. .htaccess文件攻击--匹配文件内容
8. .htaccess文件攻击--配皮文件名中的关键字
9. .htaccess文件攻击--匹配文件名
10. Apache解析漏洞
.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么将启用.htaccess文件,所有在.htaccess文件里的指令都将被重写,即允许.htaccess文件覆盖掉Apache的配置。
如果一个Web应用允许上传.htaccess文件,且.htaccess文件启用,那就意味着攻击者可以更改Apache的配置,这是十分危险。
.htaccess文件攻击有三种方式:
- 当.htaccess文件内容如下,会将内容符合php语法规则的文件当作php文件解析
- 匹配文件名中的关键字(比如:当文件名[info.php.png] 中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行)
- 匹配文件名,当.htaccess文件内容如下,可以将匹配到的文件名的文件中的代码执行
实验步骤
1、登录操作机,打开浏览器,输入实验地址:http://ip/upfile/2/upload6.html
2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件
3、点击“选择文件”按钮,选中要上传的文件
4、点击“submit”按钮,文件上传失败,此文件不允许上传
5、尝试大小写绕过、Windows特性,依然失败,此文件不允许上传
6、新建.htaccess文件
7、选择.htaccess文件,点击“submit”按钮,上传.htaccess文件,成功上传
8、将脚本文件info.php修改后缀名为可允许上传得info.jpg,再选择文件
9、点击“submit”按钮,再次上传文件,成功上传
10、访问http://ip/upfile/2/upload/info.jpg,上传的脚本文件成功解析
实验总结
掌握文件上传的服务端检测中的后缀名检测原理,类似于php、asp、jsp等脚本文件得后缀不允许上传,通过上传.htaccess文件,利用.htaccess文件攻击,将内容符合PHP语法规则的文件当作PHP脚本来解析,从而实现解析上传的脚本文件。