首页 > 其他分享 >内网渗透-在HTTP协议层面绕过WAF

内网渗透-在HTTP协议层面绕过WAF

时间:2024-06-02 14:58:58浏览次数:16  
标签:空行 HTTP 分块 WAF waf 绕过 数据包 id

进入正题,随着安全意思增强,各企业对自己的网站也更加注重安全性。但很多web应用因为老旧,或贪图方便想以最小代价保证应用安全,就只仅仅给服务器安装waf。

本次从协议层面绕过waf实验用sql注入演示,但不限于实际应用时测试sql注入(命令执行,代码执行,文件上传等测试都通用)。

原理

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

实验环境

本机win10+xampp+某狗web应用防火墙最新版。为方便演示,存在sql注入的脚本中使用$_REQUEST["id"]来接收get,或者post提交的数据。

waf配置为拦截url和post的and  or 注入,如图二所示。

发送get请求或利用hackbar插件发送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. 复制图五中的数据包黏贴到

id=1 and 1=1,后面如图六所示。

4. 接着修改第一个数据包的数据部分,即将

id=1+and+1%3D1

修改为正常内容id=1,再将数据包的Content-Length的值设置为修改后的【id=1】的字符长度即4,最后将Connection字段值设为keep-alive。提交后如图七所示,会返回两个响应包,分别对应两个请求。

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

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

原理:

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

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

2.将上面图八数据包的

id=1 and 1=1

改为

id=1 and 1=2

 即将图八中所标的第4块的1改为2。如图九所示没有返回数据,payload生效。

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

利用协议未覆盖进行绕过[同样会被某狗拦截]

原理:

HTTP头里的Content-Type一般有application/x-www-form-urlencoded,multipart/form-data,text/plain三种,其中multipart/form-data表示数据被编码为一条消息,页上的每个控件对应消息中的一个部分。所以,当waf没有规则匹配该协议传输的数据时可被绕过。

1.将头部Content-Type改为multipart/form-data; boundary=69   然后设置分割符内的Content-Disposition的name为要传参数的名称。数据部分则放在分割结束符上一行。

由于是正常数据提交,所以从图十可知数据是能被apache容器正确解析的,尝试1 and 1=1也会被某狗waf拦截,但如果其他waf没有规则拦截这种方式提交的数据包,那么同样能绕过。

2.一般绕waf往往需要多种方式结合使用,如图十的示例中,只需将数据部分1 and 1=1用一个小数点"."当作连接符即1.and 1=1就可以起到绕过作用。当然,这只是用小数点当连接符所起的作用而已。

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

1.在协议未覆盖的数据包中加入Transfer-Encoding: chunked ,然后将数据部分全部进行分块编码,如图十二所示(数据部分为1 and 1=1)。

注意:第2块,第3块,第7块,和第8块。

第2块中需要满足

长度值空行Content-Disposition: name="id"空行

这种形式,且长度值要将两个空行的长度计算在内(空行长度为2)。

第3块,即数据开始部分需满足

长度值 空行数据

形式,且需将空行计算在内。

第7块即分割边界结束部分,需满足

长度值空行分割结束符空行

形式,且计算空行长度在内。

第8块需满足

0  空行空行

形式。如果不同时满足这四块的形式要求,payload将不会生效。

结语:

以上是在http协议层面绕过waf,因为比较通用,所以理论上可以用于平时渗透时的方方面面,如命令执行,代码注入,sql注入等测试。虽然本文中只有分块编码真正做到了绕过某狗,但其他两种方法在其他waf绕过中可能仍然可用,而且可与其他绕过方法结合使用,甚至像四中一样相互组合使用

标签:空行,HTTP,分块,WAF,waf,绕过,数据包,id
From: https://blog.csdn.net/A526847/article/details/139378666

相关文章

  • 使用阿里 Druid 实现应用级waf
    Druid内置了语义级的waf,为何我们要把waf能力集成到应用中呢?1)流量waf还是存在各种解析差异导致的bypass,类似于该例子2)k8s的逐渐流行,在应用中实现waf能力能减少架构层设计负担缺点:1)需要应用安全工程师不间断配合2)对代码质量较好的开发团队会显得多此一举 本次使用springboo......
  • wafw00f一键检测目标防火墙信息(KALI工具系列十五)
    目录1、KALILINUX简介2、wafw00f工具简介 3、在KALI中使用lbd3.1查看可检测的防火墙对象3.2目标防火墙种类检测3.3 目标防火墙详细信息检测3.4将检查结果输出4、总结1、KALILINUX简介KaliLinux是一个功能强大、多才多艺的Linux发行版,广泛用于网络安全......
  • Nginx 1.26.0 爆 HTTP/3 QUIC 漏洞,建议升级更新到 1.27.0
    据悉,Nginx1.25.0-1.26.0主线版本中涉及四个与NGINXHTTP/3QUIC模块相关的中级数据面CVE漏洞,其中三个为DoS攻击类型风险,一个为随机信息泄漏风险,影响皆为允许未经身份认证的用户通过构造请求实施攻击。目前已经紧急发布NGINX开源版(稳定版)1.26.1和NGINX开源版(主线版......
  • 4.HttpClient,微信小程序,SpringCache
    HttpClient,微信小程序,SpringCacheHttpClient:简介:HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议;导入:在maven项目中的pom.xml文件直接导入<dependency> <group......
  • flutter 监听网络HTTP数据流处理
    flutter网络用于HTTP的交互中,有Http和Dio两种方式,本次侧重介绍dio的简单使用1.flutter安装dio插件https://pub-web.flutter-io.cn/中搜索dio插件使用,详细安装如下:2.使用(1)创建CancelToken对象,可然后采用异步的方式进行数据post(本次交互使用post数据的方式),核心......
  • 雷池waf功能代码剖析
      看到他们发文章​-动态防护功能?了解一下具体是什么功能 就是处理了一下html和js  看一下雷池代码的构成是后台的代码Go语言使用Gin框架启动一个API服务器 ......
  • Web基础与HTTP协议
    一、HTTP协议1.http相关概念互联网:是网络的网络,是所有类型网络的母集因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。万维网:WWW(worldwideweb)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信......
  • telnet HTTP测试步骤、遇到的问题和解决方法(cmd窗口)
    **本篇文章食用的简单说明**本篇文章为使用cmd窗口进行telnetHTTP测试步骤以及遇到的问题和解决方法。其中在解决方法中有文字版和图片版,文字版图片版自己选择一种查看就好(有标注)。目录点击想要查看的部分即可跳转到对应位置。目录**本篇文章食用的简单说明**---------......
  • C# HTTP请求 get post
    C#HTTP请求getpostpublicclassHttpRequestHelper{publicstaticboolCheckValidationResult(objectsender,X509Certificatecertificate,X509Chainchain,SslPolicyErrorserrors){returntrue;}///&l......
  • Fiddler设置抓取https包
    fiddler下载地址:Fiddler4(telerik.com)安装成功: 配置可抓取HTTPS:导入证书后即可抓取:  ......