zoukankan      html  css  js  c++  java
  • 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防护产品:宝塔、云盾、安全公司产品等
  • 相关阅读:
    mongoDB的常用语法
    Linux系统清除缓存
    110:类视图讲解
    109:大型CSV文件的处理方式
    108:生成和下载csv文件
    107:JsonResponse用法详解
    106:HttpResponse对象讲解
    104~105:HttpRequest对象讲解和QueryDict的用法讲解
    103:重定向详解
    102:限制请求method装饰器
  • 原文地址:https://www.cnblogs.com/zhengna/p/15630019.html
Copyright © 2011-2022 走看看