文件上传解析漏洞
上传漏洞
Mirror王宇阳
2019年10月28日
Web网站通常存在文件上传(例如:图片、文档、zip压缩文件^等)只要存在上传功能,就有可能会有上传漏洞的危机。和SQL注入漏洞相比较而言,上传漏洞更加危险,因为该漏洞可以直接上传一个WebShell到服务器上。
解析漏洞
利用上传漏洞,通常需要结合Web容器(IIS、Nginx、Apache、Tomcat)的解析漏洞来让上传的漏洞得到实现
IIS解析漏洞
IIS5.x/IIS 6.0文件解析漏洞
-
目录名中含有
.asp
字符串的(目录下)均按照asp文件进行解析;例如:index.asp/
目录中的所有文件都会asp解析当出现
xx.asp
命名的文件名,访问目录下任意一个文件,均会送给asp.dll解析(执行asp脚本) -
文件名中含有
.asp;
字符,即使时jpg格式文件,IIS也会按照asp对文件进行解析当文件名
xx.asp;xx.jpg
,IIS6会将文件送给asp.dll解析(按照asp脚本解析);请求时:IIS从左往右检查
.
号,查询到;
或/
号则(内存)截断;如此执行后,IIS认识的就是xx.asp
-
默认解析:
.asa
.cer
.cdx
IIS6 同时默认解析前面三个文件后缀,都会给asp.dll解析 -
修复方案:
设置权限,限制用户创建、修改文件夹权限
更新微软的补丁或者自定义修改IIS的检测规则,阻止上传非法的文件名后缀
IIS7.0/7.5
-
默认开启 Fast-CGI 状态,在一个服务器文件URL地址后面添加
xx.php
会将xx.jpg/xx.php
解析为PHP文件 -
修复方法:
修改php.ini文件,将
cgi.fi: x_pathinfo
设置为 0IIS7的解析漏洞主要是由于PHP的配置不当导致的
Windows操作系统中,文件名不能以空格或“.”开头,也不能以空格或“.”结尾。当把一个文件命名为以空格或“.”开头或结尾时,会自动地去掉开头和结尾处的空格和“.”。利用此特性,也可能造成“文件解析漏洞”。
Nginx解析漏洞
Nginx <= 0.8.37
影响版本:0.5/0.6/<0.7.65/<0.8.37
-
Fast-CGI开启状态下,存在如同IIS7一样的漏洞:URL地址后面添加
xx.php
会将xx.jpg/xx.php
解析为PHP文件空字节:
xx.jpg%00.php
(部分版本中,Fast-CGI关闭下也会被执行) -
修复方法:
修改php.ini文件,将
cgi.fix_pathinfo
设置为 0 [关闭]再Nginx配置中设置:当类似
xx.jpg/xx.php
的URL访问时候,返回403;if ( $fastcgi_script_name ~ ..*/.*php) { return 403 ; }