文件上传漏洞是我们日常渗透测试时最常用的一个漏洞,因为它可以用最快最直接的方式控制服务器权限。造成的原因是系统未对上传的文件进行严格的验证和过滤,可以让用户越权向服务器上传可执动态脚本文件。由于现在的安全防护越来越严格,盘点一下各个场景的文件上传方式。
客户端校验绕过
一般都是在网页上写一段javascript脚本,校验上传文件的后缀名。如上传后缀名为.php文件时,在选择图片后上传即被拦截,并说明该文件不允许上传,请上传.jpg|.png|.gif类型的文件。
1、直接禁用前端js,使前端js判断禁止文件代码失去作用
2、在js代码处手动添加.php格式,使其可以上传
3、将上传文件后缀改为.jpg或者其他图片格式,上传时用burp suite抓包修改后缀为.php。
文件类型校验绕过
文件上传对type属性进行了白名单限制,判断的是Content-type的内容,如规定上传图片格式的图片,可在burp suite中修改Content-type的格式。常见的图片格式PNG格式:image/png、GIF格式:image/gif、JPG格式:image/jpeg。
文件头检测绕过
文件头检测,上传图片马,修改后缀为可解析脚本语言;或者上传一句话木马在文件中添加正常格式文件头例如:GIF89a。在木马内容基础上再加了一些文件信息,有点像下面的结构
GIF89a<?php phpinfo(); ?>
常见的文件头标志:
JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Adobe Acrobat (pdf),文件头:255044462D312E
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
黑名单绕过
有些系统上传文件不允许上传.asp、.aspx、.php、.jsp等后缀的文件。
1、大小写绕过
windows对大小写不敏感,.PhP文件被当成php文件解析。
2、“. ”“_”号和空格绕过
Windows系统下,文件名后缀最后一个“.”“_”和空格会被自动去除,例如黑名单为.php,那么可以上传.php.,.php_或者.php 来绕过黑名单,Windows在解析时会删除最后一个.和_还有空格
3、重写绕过:
服务端将黑名单的后缀名替换为空,但是仅替换一次,所以可以上传.phphp p后缀,替换后就成了.php
4、特殊可解析后缀绕过:
黑名单规则不严谨,在某些特定环境中某些特殊后缀仍会被当作可解析的文件名。
php后缀:
php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml
jsp后缀:
jsp、jspa、jspx、jsw、jsv、jspf、jtml、jSp、jSpx、jSpa、jSw、jSv、jSpf、jHtml
asp/aspx:
asp、aspx、asa、asax、ascx、ashx、asmx、cer、aSp、aSpx、aSa、aSax、aScx、aShx、aSmx、cEr
5、. htaccess绕过:
在apache中,该文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即可以通过设置使将该目录下的所有文件作为php文件来解析.htaccess可以写入apache配置信息,改变当前目录以及子目录的apache配置信息,然后再上传一个 shell.png 就可以被当作php解析。
6、::DATA绕过
在Windows的时候如果文件名+"::DATA"会把::DATA之后的数据当成文件流处理,不会检测后缀名,且保持::DATA之前的文件名
7、%00截断
%00是chr(0),不是空格,是NULL,空字符,当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生。
www.xxx.com/qq.php%00.jpg =>www.xxx.com/qq.php
在文件上传中,利用%00截断,在文件扩展名验证时,是取文件的扩展名来做验证,但是最后文件保存在本地时,%00会截断文件名,只保存%00之前的内容。但是这个漏洞要求php版本<5.3.34。
关注公众号了解更多资讯
原文始发于微信公众号(纵横安全圈):盘一盘文件上传绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论