前言
前段时间看到了这个东西,好像很厉害的亚子,来研究一波
原理
客户端给服务器发送数据的时候,如果我们利用协议去制作payload,就可以绕过http协议的waf,实现SQL注入
分块传输编码(Chunked transfer encoding)是HTTP中的一种数据传输机制,在HTTP/1.1中,服务器发送给客户端的数据可以分成多个部分,在HTTP/1.1前,数据的发送是由Content-Length
去决定的,它规定了一个包的长度,服务器也是按照这个去进行处理的。但是,使用分块传输的时候,数据会被分解出一个个小块,这样服务器就不需要预先知道总数据的大概长度,接收到一个个块进行处理就行了。
正常我们发送很小的数据是不需要用到分块技术的,而下载大文件,或者发送一些后台需要很复杂的逻辑才能处理的请求的时候,就需要实时生成消息长度,服务器一般会使用Chunked编码。在进行Chunked
编码进行传输的时候,响应头会有Transfer-Encoding: Chunked
,去表明是使用Chunked编码传输内容的。分块技术的具体过程就是,实体直接被分割成多个块,即是应用层的数据在TCP传输的过程中,不作任何解释,全部理解成二进制流,然后按照MSS的长度切分,然后一起压到TCP协议栈里面,剩下的对这些二进制数据的具体解释,则交由应用层解决
复现过程
写一个简单的SQL查询的后台
1 |
|
首先我们进行正常的请求的数据包是这样的
而如果我们进行分块传输的话
进行分块传输的时候,请求头要加上Transfer-Encoding: Chunked
,然后POST的数据规则如下
1 |
2 #下面的数据的长度,可以在后面加个分号然后添加注释(2; hello world) |
最后就是大佬写出的插件,安装了一键分块Orz
https://github.com/c0ny1/chunked-coding-converter
FROM:Xi4or0uji
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论