分块传输绕过WAF
- 2019 年 10 月 6 日
- 筆記
在介绍WAF绕过技术之前,我们必须要要搞明白一个问题,那就是WAF为什么会存在被绕过的风险?这是因为WAF对数据包的解析和Web服务器对数据包的解析两者之间存在差异,所以存在被绕过的可能。下面列出了一些在SQL注入过程中主流的WAF绕过技术:
1、参数污染
2、URL重写
例如:http://localhost/uyg/id/123+or+1=1/tp/456
3、加密payload(例如:MD5、SHA-1、自定义加密)
4、缓冲区溢出
5、编码绕过
6、特殊字符插入(%00)
7、异常HTTP请求包(例如:超级大,不符合HTTP规范但被server容错的数据包)
8、数据包分块传输方式Transfer-Encoding:chunked
这次就给大家分享一下分块传输绕过WAF的经验。
分块传输是什么?
在HTTP0.9中,响应包的结束只是简单的依赖于TCP的连接断开。在HTTP 1.0的响应头增加了一些字段,比如,Content-length用于表示响应包的大小,但却只有在服务器预先知道HTTP头长度的情况下,才能确定Content-length的值。这就意味着如果发送的是动态的内容,那么首先需要缓存数据,在发送前必须要计算出要发送的HTTP头的大小。否则如果依旧按过去的方式,可能TCP连接断开的时候,数据还没有传输完,这时候就不得不中断数据传输,要解决这种情况就不得不让TCP连接一直保持活跃状态。
首先测试一下正常不加waf的情况:发现是字符型注入。
我的payload构造是id=1’ and1=1#

id=1’ and 1=2#

以及一些其他的手工注入语句,这里不再详细说,这里说一下union select 1,database(),version()#

然后再装上waf,可以看到被拦截了。

然后:数据包头中添加Transfer-Encoding:chunked进行分块传输,将注入的内容进行分块,发现是可以进行绕过的。



分块传输还有很多有趣的玩法,欢迎各位朋友一些交流学习。
作者:cong9184
来源:Ms08067安全实验室