安全矩阵

 找回密码
 立即注册
搜索
查看: 4503|回复: 0

从HTTP协议层面探讨Bypass

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-10-17 20:47:48 | 显示全部楼层 |阅读模式
原文链接:从HTTP协议层面探讨Bypass

No.1 什么是waf?
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

No.2 waf为什么可以绕过?
1、性能的原因,为了增加性能,waf就没必要去检测一些无用的数据包。
2、甲方为了waf不会使用,该开的不开,默认配置,一切无所谓,佛性甲方。
3、厂商忽略了某些语言、中间件的特性。
4、厂商的waf就是有问题。

No.3  常规绕waf的方式
大小写、转意、编码、坏字符等,都是对于一个输入内容的改变

No.4 HTTP特性绕过waf
4.1pipeline绕过
HTTP Pipelining是这样一种技术:在等待上一个请求响应的同时,发送下一个请求。(译者注:作者这个解释并不完全正确,HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应。

通过使用HTTP头 Connection: keep-alive 达到1次传输多个http包效果,Content-Length表示数据的长度,所以在使用的时候必须把bp的Content-Length自动更新关闭,然后在一个HTTP包嵌套多个数据包。当waf识别到第一个http请求,因为content-length字段标识了到此结束,waf为了性能,就不再检测这个数据包了,多夹带几个数据包,然后再把payload夹藏到某个数据包,达到一个bypass的过程。(数据包太多影响效率。)

4.2HTTP分块传输
HTTP分块传输可以将数据分块,然后进行传输。从而达到绕过某些WAF的作用。操作方式很简单通过使用HTTP头 Transfer-Encoding: chunked 设置达到分割参数的效果。先看一下图片,再来谈谈分块的格式。

其中数据中的第一个数字(16进制)表示当前分块的长度,下一个值表示数据内容。依次类推,末尾需要一个0以及两个回车,代表结束,整块拼接起来就是a=dbappsecurity。

这种方式,在定义分块长度处,添加;注释,从而达到一个混淆。

burp有一个插件,支持一键编码。

https://github.com/c0ny1/chunked ... /src/main/java/burp

4.3协议未覆盖
以下四种常见的content-type类型,我们可以尝试互相替换尝试绕过WAF过滤机制。注:如图常见的绕过方式为使用 multipart/form-data 标签,并把name设为参数名内容写入注入语句


某些waf认为其是上传的过程,可以和4.2的内容进行组合拳利用,达到你根本肉眼看不出原本的内容。

4.4利用Content-type编码绕过
一些特定的版本是可以,自定义编码方式的,然后在对数据进行编码,即可绕过。

4.5HTTP头部问题
构造以下请求包,HOST为空。并在第二行加上HOST的值,发现是可以正常发送的,waf来说为了效率为题,这样错误的包就直接不检测,从而达到绕过目的

以上各种方法可以互相结合,各种各样的骚操作自行发挥


               
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 10:44 , Processed in 0.012967 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表