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防护产品:宝塔、云盾、安全公司产品等