文件上传WAF绕过
上传参数名解析:明确哪些东西能修改?
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件MIME,视情况更改
数据溢出绕过
通过在文件类型或name前面添加脏数据干扰安全狗绕过
符号变异-防匹配(’ " ;)
后面添加脏数据
换单引号
去引号
数据截断-防匹配(%00 ; 换行)
截断失败
换行
重复数据-防匹配(参数多次,如filename=“x.jpg”;filename=“x.jpg”;…filename=“x.php”😉
多个参数以后面的为主
构造白名单(安全狗认为x.php没有接收值)
同样
Fuzz
fuzz字典
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts
安全修复
文件上传安全修复方案
-
后端验证:采用服务端验证模式
-
后缀检测:基于黑名单,白名单过滤
-
MIME检测:基于上传自带类型检测
-
内容检测:文件头,完整性检测
-
自带函数过滤:参考uploadlabs函数
-
自定义函数过滤:function check_file(){}
-
WAF防护产品:宝塔,云盾,安全公司产品等