最近在freebuf上看到有利用分块传输绕过waf的文章,然后就学习了一下什么是分块传输。
首先给出分块传输的维基百科定义:1
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
所以我们可以看到,该定义详细说明了是只在HTTP1.1的版本中才会提供。
具体利用的话,其实也很简单
给一个例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25
This is the data in the first chunk
1C
and this is the second one
3
con
8
sequence
0
其中每段上面的字符就是下面字符长度的16进制大小,解释如下:
1 | 前两个块的数据中包含有显式的\r\n字符。 |