1、漏洞简介
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得执行服务器端命令的能力
2、满足条件
- 上传的文件能够被web容器解释执行,文件上传后所在的目录是web容器所覆盖到的路径
- 用户能够从web上访问这个文件
- 用户上传的文件若被安全检查,格式化,图片压缩等功能改变了内容,也可能导致攻击不成功
3、文件上传导致的安全问题
- 上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行
- 上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为
- 上传的文件是病毒,木马文件,黑客用于诱骗用户或者管理员下载
- 上传的文件是钓鱼图片或包含了脚本的图片,在某些版本的浏览器中会被当作脚本执行,用于钓鱼和欺诈
4、文件上传检测方法及绕过
- 前端检测:直接使用浏览器F12上的设置禁用
- 文件类型检测:使用Burp抓包,修改文件文件类
- 文件后缀检测
a.00截断绕过
b.大小写绕过:Php,pHp,PHp
c.双重后缀名:shell.jpg.php
d.黑名单绕过:通过上传不受欢迎的php扩展来绕过黑名单,例如:pht,phpt,phtml,php3,php4,php5,php6
e.文件解析规则绕过:上传 .htaccess 规则解析文件
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件 扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
先上传一个.htaccess文件,内容为:AddType application/x-httpd-php .aaa
。如下:
然后再上传文件后缀为.aaa的文件,让其解析为php类型文件。
f.配合文件包含漏洞使用:上传图片马,然后使用文件包含漏洞执行图片里的代码,(在我上一篇博客里有详细介绍)
h.配合解析漏洞使用
- 文件头检测:有些应用会通过判断上传文件的文件头来验证文件类型
JPG:FF D8 FF E0 00 10 4A 46 49 46
PNG:89 50 4E 47 0D 0A 1A 0A
5、如何防御文件上传漏洞
- 文件上传的目录设置为不可执行
- 判断文件类型
- 使用随机数改写文件名和文件路径
- 单独设置文件服务器的域名
6、解析漏洞
- 【IIS 5.x/6.0】
目录解析:在网站下建立文件夹的名称中带有.asp、.asa等可执行脚本文件后缀的文件夹,其目录内的任何扩展名的文件都被IIS当作可执行文件来解析并执行。
http://www.xxx.com/xx.asp/xx.jpg
文件解析:在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg将被当做xx.asp解析并执行。
http://www.xxx.com/xx.asp;.jpg
IIS6.0 默认的可执行文件有asp、asa、cer、cdx四种。
- 【IIS 7.0/IIS 7.5/ Nginx <0.8.3畸形解析漏洞】
在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg/.php
- 【Nginx <8.03 空字节代码执行漏洞】
影响范围:Nginx0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg%00.php
- 【Apache解析漏洞】
Apache对文件解析是从右到左开始判断解析,如果文件的后缀为不可识别,就再往左判断,解析。
如xx.php.owf.rar,由于Apache无法解析rar和owf后缀,但能够解析php后缀,因此Apache会将xx.php.owf.rar当做php格式的文件进行解析并执行。
访问以下网址,服务器将把xx.php.owf.rar文件当做php解析并执行。
http://www.xxx.com/xx.php.owf.rar
- 【CVE-2013-4547 Nginx解析漏洞】
访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg(非编码空格) .php
- 【使用.htaccess将任意文件作为可执行脚本解析】
如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
1 //这将把目录下的所有后缀为jpg的文件当做可执行的php脚本进行解析并执行。
2 <FilesMatch ".(jpg)$"> SetHandler application/x-httpd-php </FilesMatch>
3
4 //上传后缀为.aaa的文件,让其做为php类型文件进行解析
5 AddType application/x-httpd-php .aaa
参考链接:https://www.freebuf.com/column/227315.html