文件上传漏洞类型汇总
首先看看文件上传的过程(微圆框代表可执行漏洞)
类型:
1.无限制:
(1)直接用1.php放一句话木马上传
2.绕过前端:
(1)Javascript绕过:
- 浏览器设置中选择禁用javascript即可
(2)抓包修改:
- burpsuite抓包后修改filename
3.绕过服务端:
(1)黑名单绕过:
- 例如:不允许php,jsp文件上传,则使用1.php3,1.php5等上传
(2)白名单绕过:
- 例如:允许图片只允许jpg,则抓包改后缀改php为jpg
(3)MIME绕过:
- MIME通过通过检查http包的Content-Type字段来判断上传文件是否合法,所以把类型改成允许上传的格式即可
(4)文件头欺骗:
- 例如:只允许jpg上传,且文件头必须符合jpg格式。则使用含有jpg文件头的一句话马上传即可
(5)解析漏洞:
-
apache解析漏洞:
- .apache文件解析规则:文件从右向左判断,后缀名不认识则继续识别,直到寻找到可以识别的文件名,如果都不能识别则暴露源码。
- 则可以这样定义:1.php.qwe.asd绕过文件识别
-
IIS解析漏洞:
- 原理: IIS中建立.asa,.asp文件时,其目录下的所有文件都会被当成asp文件解析
- 方法:在1.asp文件夹中放个1.txt文件,内容为<%=now()%>,则1.txt文件就会被当成脚本解析
-
Nginx解析漏洞
- 方法:在下面这个链接中,此时1.jpg会被当成1.php解析,但是3.php不存在,则可以在1.jpg中放php木马获得webshell
http://....../1.jpg/3.php
4.其他(主要是懒得归类了)
1-大小写绕过
- 如果禁止php文件上传,把文件名改成pHp,PhP等绕过
2-00截断绕过
- 利用解析漏洞,利用00字符截止判断,例如1.php%00.jpg,或者1.php0x00.jpg
3-.htaccess绕过
- .htaccess是apache配置文件,提供自定法则让服务器运行,例如如下1.htaccess文件,上传后再上传1.png即可获得webshell
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
#进行文件名的正则匹配,服务器会对文件名为1.png当做php解析
4-双写绕过
- 如果禁止php文件上传,把文件名改成1.phphpp即可,其中中间的php过滤掉后仍可成功上传
5-点绕过
- 如果服务器开启了黑名单过滤,则可采用1.php.的方式(仔细看有两个点)绕过并解析
6-二次渲染绕过
- 有些网站会使用二次渲染清除恶意代码,使上传的一句话木马失效
- 方法:做图片马,上传后发现被清除,下载源码和上传的进行比较,发现未被渲染的字段之后把一句话马放到未被渲染的字段即可获得webshell
::$DATA绕过
在1.php后加上::$DATA
1.php-->1.php::$DATA