文件上传漏洞成因及绕过方法

July 10, 2018 WEB安全 访问: 31 次

给我一个上传的机会,小心日穿你!

介绍

文件上传漏洞是指在允许用户上传文件但又对文件过滤不严而造成任意文件上传,当攻击者上传上木马之后,就可以用菜刀干任何事情了;

绕过方法

绕过js前端验证

js验证后缀名字是在数据发送到服务器之前验证的,所以我们只需抓到我们将要发送的数据包,然后把数据包中的后缀名修改一下就可以了。

绕过文件内容检测

文件内容检测包括检测文件头、Content-type(文件类型)。 有些时候,服务器会检验你上传的文件的文件头,是否符合允许上传的文件,若不符合,则删除,如果想要绕过这个限制,我们就要先判断该服务器检测时检测文件头部多少位,如果检测的位数少,那么我们就可以伪造一个正常文件的文件头,如果检测的位数比较多,那么我们就要用一个正常的文件,比如说图片,在图片中添加一句话木马,从而进行绕过;
常用文件头:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
还有些时候会检验文件的Content-type类型是否符合,绕过可以改一下数据包中的Content-type类型,或者用大小写进行绕过;
text/plain(纯文本)
text/html(HTML文档)
text/javascript(js代码)
application/xhtml+xml(XHTML文档)
image/gif(GIF图像)
image/jpeg(JPEG图像)
image/png(PNG图像)
video/mpeg(MPEG动画)
application/octet-stream(二进制数据)
application/pdf(PDF文档)
application/(编程语言) 该种语言的代码
application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)
multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
application/x-www-form-urlencoded(POST方法提交的表单)
multipart/form-data(POST提交时伴随文件上传的表单)

不完善的黑名单扩展名

当服务器对文件后缀有限制是,一方面可以用大小写绕过,另一方面可以使用php文件的别称;
php2, php3, php4, php5, phps, pht, phtm, phtml
还有一些其他语言的
ASP: aspx、ascx、ashx、cer、asa
JSP: jspx

绕过中间件检测

iis5.x-6.x解析漏洞

使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
目录解析:(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
文件解析:
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

apache解析漏洞

漏洞原理:

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。

其余配置问题导致漏洞

1.如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
2.如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
3.修复漏洞方法
1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

<Files ~ “.(php.|php3.)”>
        Order Allow,Deny
        Deny from all
</Files>
iis7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞

添加新评论