本文内容来自蚁景网安课程
认识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