非法文件上传漏洞总结
- MIME类型绕过
- 文件拓展名绕过
- 文件内容检查绕过
- 空字节截断目录路径检测绕过
- 解析导致的上传漏洞
MIME类型绕过
当浏览器在上传文件到服务器端的时候,服务器对上传的文件Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失效。绕过Content-Type文件类型检测,就是用Burpsuite截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。
通过修改content-type以符合上传条件来完成绕过
文件拓展名绕过
php语言除了可以解析以.php为后缀名的文件外,还可以解析以.php2,.php3,.php4,.php5,.phps,.phpt,.phtml,.inc为后缀的文件
文件内容检测绕过
一般文件内容验证使用getimeagesize()函数检测,会判断文件是否一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。
例如图片木马:将木马代码附加在图片信息末尾,并利用burp将上传的文件名(filename)改为.php的文件
空字节截断目录路径检测绕过
对于空字符截断目录路径检测类,可以使用BurpSuite修改上传保存的文件名,并且通过Hex进行空字符截断。00是一个截断字符的16进制,截断字符后面的都会被截断,也就是被忽略,所以对于uploading/1.php .jpg/xxx.jpg 就变成了uploadimg/1.php,也就是说原有的.jpg文件里的内容将被保存为.php格式的文件,从而实现了上传php文件的目的。
方法如下:
- 将文件名写成1.php .jpg的格式,然后用bp改包,将空格(即0x20)改成0x00
- 将文件名写成1.jpg,然后用bp改包,将上传目录地址由原来的/uploads改为/uploads/1.php (ps此处有空格),然后将空格(0x20)改为0x00,这样上传完后合并了文件名就变成了1.php%001.jpg,由于空字符截断,所以即被解释为1.php
解析导致的上传漏洞
IIS6.0
目录路径解析漏洞:在IIS 6.0目录路径检测解析中,文件名字为 “.asp/xxx.jpg” 或者 “.asa/xxx.jpg”,同样会被IIS当作 ASP 文件来解析并执行。
说明:首先请求 /aaa.asp/xxx.jpg,从头部查找 " . ",获得了 .asp/xxx.jpg,查找 " / ",如果有这内存截断,所以 /aaa.asp/xxx.jpg 会当作 /aaa.asp 来进行解析
解析缺陷:在IIS 6.0目录路径检测解析,文件的名字为 “.php;xxx.jpg”,也同样会被IIS当成 PHP 文件类解析并执行。
说明:首先请求 /aaa.php;xxx.jpg,从头部查找 " . ",获得了 .php;xxx.jpg,查找 " ; ",如果有,则内存截断,所以 /aaa.php;xxx.jpg 会被当作 /aaa.php 来进行解析。
Apache
- htaccess文件上传解析漏洞
.htaccess文件中定义了将上传的文件后缀名为 .jpg 格式的文件以 php 格式来解析文件。.htaccess 是apache服务器中的一个配置文件,不是上传的文件的黑名单之内,所以该类型文件可以上传成功。
- 解析缺陷
Apache会从右至左解析文件后缀名,直至识别该后缀名,例如a.php.123,由于无法识别.123后缀继而向左,识别出.php后缀故以php解析