24:WEB漏洞-文件上传之WAF绕过及安全修复
本课重点
- 案例1:上传数据包参数对应修改测试
- 案例2:safedog+云服务器+uploadlabs测试
- 案例3:safedog+云服务器+uploadlabs_fuzz测试
- 案例4:文件上传安全修复方案-函数自定义及WAF
案例1:上传数据包参数对应修改测试
上传参数名解析:明确哪些东西能修改?
- Content-Dispostion:一般可更改
- name:表单参数值,不能更改
- filename:文件名,可以更改
- Content-Type:文件MIME,视情况而定
案例2:safedog+云服务器+uploadlabs测试
常见绕过方法:
- 数据溢出-防匹配(xxx...)
- 符号变异-防匹配(' " ;)
- 数据截断-防匹配(%00 ; 换行)
- 重复数据-防匹配(参数多次)
过safedog之Payload: 大量垃圾数据缓冲溢出(Content-Disposition,filename等) filename=xx.php filename="xx.php filename='xx.php
filename="x".php
filename="x"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 " 主要是学习思路,其他waf绕过可参考思路进行尝试
案例演示
<1>上传一个PHP文件,被safedog拦截,原因是安全狗中配置了相关防护,该防护是通过检测关键字实现的,
<2>方法1:在数据包filename之前,手动加入大量垃圾数据(以分号结尾),造成数据溢出,防止waf匹配关键字,从而绕过waf防护。
<3>方法2:使用符号变异的方法,防止waf匹配关键字,从而绕过waf防护。比如原来是filename="xx.php",我们可以手动改为filename='xx.php'、filename="xx.php、filename='xx.php、filename=xx.php"、filename=xx.php'、filename=xx.php等形式,尝试上传。经过测试,以下三种方式可以绕过safedog文件防护。
- filename="xx.php
- filename='xx.php
- filename=xx.php
通过以上测试,猜测安全狗防护机制是取filename后面最后一个引号之前的数据与黑名单匹配。此时我们就有了更多思路,比如改为filename="x".php,安全狗会取引号中的x与后缀黑名单进行匹配,成功绕过,上传到服务器上的文件名为.php。或者改为filename="x"x.php,此时上传到服务器上的文件名为x.php。
<4>方法3:数据截断-防匹配(%00 ; 换行)
改为filename="x.jpg;.php",成功绕过,此时上传到服务器上的文件名为x.jpg;.php。
改为filename="x.php%00.jpg",成功绕过,此时上传到服务器上的文件名为x.php%00.jpg,图片格式,没啥用。
改为换行绕过,此时上传到服务器上的文件名为x.php。
<5>方法4:重复数据-防匹配(参数多次)
改为filename="x.jpg";filename="x.jpg";....filename="x.php";,成功绕过,此时上传到服务器上的文件名为x.php。
改为filename="Content-Disposition:form-data;name="upload_file";x.php",成功绕过,此时上传到服务器上的文件名为;x.php。
改为filename="Content-Disposition:form-data;name="upload_file"x.php"(去掉了分号),成功绕过,此时上传到服务器上的文件名为x.php。
改为filename="Content-Type: image/jpeg;x.php"(去掉了分号),成功绕过,此时上传到服务器上的文件名为jpeg;x.php。此处发现/之后的内容可以绕过安全狗检测。
改为filename="/jpeg;/x.php",成功绕过,此时上传到服务器上的文件名为x.php。
案例3:safedog+云服务器+uploadlabs_fuzz测试
可以使用模糊字典+Intruder模块,批量测试。
fuzz字典:
- https://github.com/fuzzdb-project/fuzzdb
- https://github.com/TheKingOfDuck/fuzzDicts
- https://github.com/jas502n/fuzz-wooyun-org
- https://github.com/TuuuNya/fuzz_dict
案例4:文件上传安全修复方案-函数自定义及WAF
文件上传安全修复方案:
- 后端验证:采用服务端验证模式
- 后缀检测:基于黑名单、白名单过滤
- MIME检测:基于上传自带类型检测
- 内容检测:文件头,完整性校验
文件上传安全修改工具:
- 自带函数过滤:参考uploadlabs函数
- 自定义函数过滤:function check_file(){}
- WAF防护产品:宝塔、云盾、安全公司产品等