分块传输绕过安全狗拦截

本文内容来自蚁景网安课程

认识WAF

什么是WAF

Web Application Firewall(web应用防火墙)。

Web应用防火墙通过执行一系列针对HTTP,HTTPS的策略来专门为Web应用提供保护的一款产品。

软件型WAF

硬件型WAF

云WAF

网站内置WAF

如何确认是否存在WAF

提交恶意代码,看是否出现WAF的警告。

了解分块传输

前置知识

通过HTTP传输文件时,通常会有Content-Length来指定文件长度,比如传输图片,静态页面,客户端也以Content-Length作为接收内容结束的标志,接收完毕后就可以断开连接了。

新的问题

对于动态生成的内容,在生成结束之前并不知道它的具体长度,只能提前分配足够大的空间,但为了减少内存开销和客户端等待时间,可以使用新的机制:不依赖头部长度信息,也能知道实体边界——分块编码(Transfer-Encoding: chunked)

HTTP 1.1引入了分块传输编码的方式。只要在Header头部加入Transfer-Encoding: chunked,就代表使用了分块编码。这时不用指定Content-Length接收方也可以知道什么时候传输结束,只需要约定一个结束信号即可。

普通报文转分块传输

报文中的实体需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的CRLF(\r\n),也不包括分块数据结尾的CRLF。最后一个分块长度值必须为0,对应的分块数据没有内容(两个空行),表示实体结束。

消息体格式如下:

hex的分块长度+<CR>+<LF>

chunked data

结束块的分块长度为0。

示例

发送内容(消息体):123456

消息体格式:

9<CR><LF>
123456789<CR>
0<CR><LF>
<CR><LF>
<CR><LF>

掌握分块传输+SQLmap绕过WAF

BurpSuite设置分块

Extensions->Chunked coding converter 0.4.0->Chunked coding converter->Encoding request body

SQLmap代理模式

--proxy=http://127.0.0.1:8080

将分块后的数据包保存为txt文件

python sqlmap.py -r test.txt --proxy=http://127.0.0.1:8080 --dbs