文件上传漏洞是指用户上传了一个可执行脚本文件,并通过此文件获得了执行服器端命令的能力。在大多数情况下,文件上传漏洞一般是指上传 WEB 脚本能够被服务器解析的问题,也就是所谓的 webshell 问题。完成这一攻击需要这样几个条件,一是上传的文件能够被 WEB 容器执行,其次用户能从 WEB 上访问这个文件,最后,如果上传的文件被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击失败。
更改后缀
PHP:
php4、php5、phtml、pht(是否解析需要根据配置文件中设置类型来决定)
ASP:
asa、cer、cdx
ASPX:
ascx、ashx、asac
JSP:
jsp、jspx、jspf
大小写绕过
更改Content-Type
常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
绕过JS检查
上传.htaccess绕过
SetHandler
SetHandler application/x-httpd-php
AddHandler
AddHandler cgi-script .xxx
AddType
AddType application/x-httpd-php .gif
php_value
用来进行文件包含all_url_fopen
、all_url_include
为 On
时,可以使用远程文件包含或利用伪协议。
- auto_prepend_file:在主文件解析之前自动解析包含的文件
- auto_append_file:在主文件解析后自动解析包含的文件
php_flag
可以将php_flag engine 0
engine
设置为 0,在本目录和子目录中关闭php
解析,造成源码泄露.user.ini利用
基本类似.htaccess%00截断
上传文件名为sky.php.jpg,burpsuit抓包,在.jpg前面加入一个00字节即可。文件解析漏洞
Apache
Apache多文件后缀
在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
所以可上传一个test.php.qwzf
文件绕过验证且服务器依然会将其解析为php。罕见后缀
Apache配置文件中会有.+.ph(p[345]?|t|tml)
此类的正则表达式,被当php程序执行的文件名要符合正则表达式。也就是说php3,php4,php5,pht,phtml等文件后缀也是可以被当作php文件进行解析的。后缀包含换行符\x0A(CVE-2017-15715)
默认Apache配置就使用了<FileMatch>
:
$可以匹配换行符,所以在php后缀后面加一个换行符,可以绕过黑名单,并且apache可以顺利解析。<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Nginx
Nginx PHP CGI 解析漏洞
Nginx漏洞总结空字节代码执行漏洞
Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
- 上传一个qwzf.jpg图片文件
- 访问
[http://x.x.x.x/qwzf.jpg](http://x.x.x.x/qwzf.jpg)%00.php
- 就会将qwzf.jpg作为PHP文件进行解析
Nginx文件名逻辑漏洞
Nginx漏洞总结IIS
目录解析(6.0)
形式:[http://www.xxx.com/xx.asp/xx.jpg](http://www.xxx.com/xx.asp/xx.jpg)
原理: 服务器默认会把.asp
,.asa
目录下的文件都解析成asp文件。文件解析(6.0)
形式:[http://www.xxx.com/xx.asp;.jpg](http://www.xxx.com/xx.asp;.jpg)
原理:服务器默认不解析;
号后面的内容,因此xx.asp;.jpg
便被解析成asp文件。解析文件类型(默认解析后缀)
有的网站会设置黑名单上传限制 ,IIS6.0 默认的可执行文件除了asp还包含这三种 :
iis把asa,cdx,cer解析成asp文件的原因:这四种扩展名都是用的同一个asp.dll文件来执行。/xx.asa
/xx.cer
/xx.cdx
IIS 7.0/7.5 CGI解析漏洞
与Nginx解析漏洞类似