常见的文件上传绕过和文件解析漏洞
常见的文件上传绕过漏洞有
1、前段绕过
2、服务端绕过
3、配合解析漏洞突破上传
4、编辑器漏洞
一、前端绕过
. 客户端javascript检测(通常为检测文件拓展名)
这是文件上传突破的第一步,也是最容易绕过的一个 ,只要把需要上传的文件的后缀名改为前端允许通过的就可以;
如 xxx.php -->xxx.jpg;
这时利用抓包软件如:burpswite之类的代理工具抓取通过上传的以图片格式结尾的文件,然后更改其后缀名为对应服务器
可以解析的后缀名。
前端绕过比较简单,一般的网站不会只在前端对文件后缀名进行验证,所以不多加解释。
二、(1)服务端的MIME检测绕过
服务端MIME类型检测也就是检测Content-Type的内容。下面是一段测试模拟代码:
<?php
if ($filetype =='image/jpg'|| $filetype=='image/gif' || $filename == 'image/jpeg' || $filetype == 'image/png'){
$path = 'uploads';
if (!file_exists($path)){
mkdir($path);
}
if (move_uploaded_file($filetmp, $path.'/'.$filename)){
echo "文件上传成功".$path.'/'.$filename;
}else{
echo "文件上传失败";
}
}else{
echo "文件后缀不合法";
}
?>
绕过的办法:
更改为Content-Type:image/gif
(2)服务端目录路径检测
一般是检测保存路径是否合法,但一般都没有防御。检测跟path参数相关的内容。
绕过办法:00截断
通过抓包截断将 xxx.php.jpg 换成 xxx.php_jpg(下划线为0x00)。在上
传文件时系统文件遇到0x00。会认为文件已经结束。从而将xxx.php.jpg的内
容写入到xxx.php
还可以使用抓包软件的 HEX 功能把php后面的 . 对应的2E 手动更改为00
(3)服务端文件名拓展检测
基于黑名单检测:
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般有个专门的blacklist,里面包含常见的危险脚本文件。
绕过办法:
1、文件名大小写绕过(AsP, pHp等等)
2、黑白名单列表绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、
ashx、cer、asa、jsp、jspx)cdx,
3、特殊文件名绕过
修改数据包里的文件名改为 test.php. 或者 test.asp_ (下划线是空格)由于
这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统
会自动去掉 点和空格。Unix/Linux系统没有这个特性。
4、0x00截断绕过
5、.htaccess文件攻击(结合黑名单攻击)
主要介绍第五种绕过办法:
.htaccess文件攻击
.htaccess文件攻击即结合黑名单攻击服务器的 .htaccess文件 。
通过move_uploaded_file函数把自己写的 .htaccess文件覆盖掉服务
器上的这样就可以解析定义名单了。
.htaccess文件用处:
通过.htaccess文件调用php解释器去解析一个文件名中只要包含
“haha”这个字符串的任意文件,无论你文件名是什么样子,只要包
含”haha”这个字符串,都可以被以php的方式来解析。
.htaccess文件内容:
<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMatch>
(4)服务端文件内容拓展检测
如果服务器对上传的文件进行了文件内容检测就只能上传图片了,但是可以利用图片和脚本文件制作一个图片马
如 1.gif 和2.txt 前面的图片尽量要简单,不然容易干扰制作后的文件内容解析,后面的文档是需要执行的脚本文件
利用命令窗口:copy /b 1.gif + 2.txt = new.php
这样就制作出来了一个图片马,再利用上面的方法绕过文件扩展名检测
三、Apache解析漏洞
test.php.aaa.bbb.ccc任意不属于黑名单且不属于Apache解析白名单
之内的后缀名。(当apache和php以module方式结合的时候)
一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往
php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么
Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的
拓展名为止
所以可以对要上传的文件添加无用扩展名如xxx.php -->xxx.php.gashgas
IIS 解析漏洞
• dir.asp/任意文件名
• test.asp;任意文件名
• 任意文件名/任意文件名.php muma.jpg/111.php
IIS6.0 在解析 asp 格式的时候有两个解析漏洞.
一个是如果目录名以"
.asp 、.asa、.cer、.cdx
"字符串结尾,那么这个
目录下所有的文件都会按照 asp 去解析。eg: “test.asp/1.jpg”
另一个是只要文件名中含有"
.asp;、.asa;、.cer;、.cdx;会优先按 asp
来解析 eg:
“1.asp;.jpg”
IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞, 对任意文件
名只要在URL后面追加上字符串"/任意文件名.php
"
,就会按照 php 的方式
去解析
eg:”http://www.target.com/upload/1.jpg/1adf.php”
总结
路径/拓展名检绕过
• 黑名单绕过
• 文件名大小写绕过
• 名单列表绕过
• 特殊文件名绕过
• 0x00截断绕过
•
.htaccess文件攻击
• Apache解析漏洞
• IIS解析漏洞
• Nginx解析漏洞
• 白名单绕过
• 文件名后缀0x00截断绕过
• PHP文件包含漏洞
• IIS解析漏洞
• Nginx解析漏洞