• HTTP协议层面绕过WAF


    最近也是在一直看过waf相关的资料,本次主要是想写写HTTP协议层面过WAF的一些技巧,来与大家一同探讨

    原理

    给服务器发送payload数据包,使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容。如图所示

    实验环境

    本机win10+phpstudy2018+某狗web应用防火墙最新版

    本次演示的站点是我自己用php写的一个post型sql注入类型的站

    安全狗需要做一下配置

     

     勾选检测POST,就可检测post类型的注入

    发现发送post请求的payload被拦截

    一、利用pipline绕过[该方法经测试会被某狗拦截]

    原理

    http协议是由tcp协议封装而来,当浏览器发起一个http请求时,浏览器先和服务器建立起连接tcp连接,然后发送http数据包(即我们用burpsuite截获的数据),其中包含了一个Connection字段,一般值为close,apache等容器根据这个字段决定是保持该tcp连接或是断开。当发送的内容太大,超过一个http包容量,需要分多次发送时,值会变成keep-alive,即本次发起的http请求所建立的tcp连接不断开,直到所发送内容结束Connection为close为止。

    1. 关闭burp的Repeater的Content-Length自动更新,如图四所示,点击红圈的Repeater在下拉选项中取消update Content-Length选中。这一步至关重要!!!

    2. burp截获post提交

    id=1 and 1=1

    被WAF拦截

    3.重新构造数据包

    将数据包的Content-Length的值设置为id=2+and+1%3D2的长度即为12,最后将Connection字段值设为keep-alive。提交后如图所示,会返回两个响应包,分别对应两个请求。

    注意:从结果看,第一个正常数据包返回了正确内容,第二个包含有效载荷的数据包被某狗waf拦截,说明两数据包都能到达服务器,在面对其他waf时有可能可以绕过。无论如何这仍是一种可学习了解的绕过方法,且可以和接下来的方法进行组合使用绕过。

    二、利用分块编码传输绕过[该方法可绕某狗]

    原理

    在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,post请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用0独占一行表示结束。

    1. 开启上个实验中已关闭的content-length自动更新。给post请求包加入Transfer-Encoding: chunked后,将数据部分id=1 and 1=1进行分块编码(注意长度值必须为十六进制数),每一块里长度值独占一行,数据占一行如图所示。

    将上面的数据包 id=1 and 1=1 改为 id=1 and 1=2

    没有回显,说明payload生效

    注意:分块编码传输需要将关键字and,or,select ,union等关键字拆开编码,不然仍然会被waf拦截。编码过程中长度需包括空格的长度。最后用0表示编码结束,并在0后空两行表示数据包结束,不然点击提交按钮后会看到一直处于waiting状态。

    三、协议覆盖WAF绕过

    首先将数据包转换为文件上传包格式,使用bp工具change body encoding

    绕过

    1.添加参数filename,filename =1.jpg,等于号前需要加个空格

    2.加双引号绕过

    3.边界混淆绕过

    这是原始的边界

    进行混淆后

    或者有

    四、分块编码+协议未覆盖组合绕过

    在协议未覆盖的数据包中加入Transfer-Encoding: chunked ,然后将数据部分全部进行分块编码

    附上我的payload吧

    3
    --8
    22
    
    Content-Disposition: name="id"
    
    5
    
    -1 
    1
    u
    6
    nion s
    6
    elect 
    8
    1,2,data
    6
    base()
    9
    
    --8--
    
    0


    最后用0表示编码结束,并在0后空两行表示数据包结束,不然点击提交按钮后会看到一直处于waiting状态。

    五、Content-type编码绕过

    利用特殊编码对payload进行转义,从而绕过WAF对特殊关键词的过滤

    六、http头格式的绕过

    http头部的问题导致各种奇怪的格式绕过

    如:

    Host字段回车加TAB

    混乱特殊字符绕过

    注意:只能位于chunked字符之前加入字符

    加入双::号

  • 相关阅读:
    centos7 部署canal
    mongodb普通用户登录失败
    centons 7 harbor 安装
    centos7 部署k8s
    Centos7 k8s安装部署 root
    docker目录迁移
    mongodb 创建用户
    4、canal同步mysql数据到es中
    Nginx整数溢出漏洞(CVE20177529) 修复
    mongodb 副本集搭建
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/13936278.html
Copyright © 2020-2023  润新知