最近看到大佬们都在搞分块传输,据说能吊打所有waf,所以我也跟随大佬们的脚步。

首先先了解下什么是分块传输。

blob


分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由应用服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。
作者:席飞剑
来源:CSDN
原文:https://blog.csdn.net/xifeijian/article/details/42921827


一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用chunked编码。

在进行Chunked编码传输时,在回复消息的Headers有transfer-coding域值为chunked,表示将用chunked编码传输内容。

理论知识就说到这。下面说说在写tamper过程中的坑,目前还有些问题没有解决。


但是接下来的时间要忙些别的,所以把这段时间的结果先写到博客里面,以后有时间在继续把这些坑填上.

下面切换回正题,正常的post数据包如下

blob

而分块传输的post数据包如下

blob

服务器能正常接收到数据并返回了正常的页面内容

分块传输的post数据头部需要添加

Transfer-Encoding:Chunked

而post的数据是这种格式

2
id
2
=3

分块传输格式解析

2      #这个2表示下面数据的个数  可以在这个后面加入分号后面添加注释 比如 2;hello world 可以利用这个特性添加随机字符来干扰waf

id     #数据内容 内容就是id一共就两个 所以上面的个数是2

2      #同理 表示下面的数据的个数

=3   #这个也是同理  和前面的id连起来 post的数据就是 id=3 

0     #分块传输表示结束的方式 一个0和两个换号
       #换行
       #换行

既然知道了发送的数据格式,那下一步就是写个sqlmap的tamper
首先先把post数据的head的内容加上。

blob

加上后sqlmap数据始终发不出去。

blob

似乎遇到这个问题不只我一个,一个老哥是sqlmap加参数解决的这个问题 sqlmap.py -r 1.txt –headers=“Transfer-Encoding: chunked”

但是我的解决方法是 在encoding后面加了个空格 同时能正常发送数据包

blob

sqlmap能正常发送出数据包 且服务器也能正常的接收到数据

blob

但是sqlmap在payload生成后  还url编码下才发送给服务器,所以导致\n换行符或其他特殊字符会被编码,最后服务器无法理解。

目前的解决方法是通过给sqlmap加参数 –skip-urlencode 跳过url编码

blob

但是我不想通过加参数,想直接写到tamper里面,各种疯狂百度谷歌还有问大佬们

blob

但是都没结果,于是我就去翻sqlmap的源码。

找到了urlencode的位置 也找到了最后给调用给payload编码的位置,但是还是不知道怎么写到tamper里面,如果改源码的话,那样就很容易,但是这样毫无意义。

还有个最重要的问题,那就是sqlmap的tamper无法获取payload的前面的参数,比如id=3 无法把payload的内容写到id=的前面

目前我的解决方法是手工把要注入的post包先把格式改下。

blob

然后就用sqlmap跑起来
python sqlmap/sqlmap.py -r 1.txt --tamper=fkcs --skip-urlencode

blob

blob

能正常使用,但是最大的问题在于怎么修改payload前面的参数,这样手工提前修改数据真的是low的不行,所以算个残疾品,等以后有时间再继续完善它。

blob

相关文章:
利用分块传输吊打所以wa
https://www.freebuf.com/articles/web/194351.htmlf

HTTP协议bypass WAF(狗/盾)
https://www.t00ls.net/thread-49138-1-1.html

SQLMAP|阅读手记一{从sqlmap.py开始到参数分析}
http://www.wupco.cn/?p=323

定制Sqlmap
http://lietolive.com/sqlmap/%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91/2018/01/24/%E5%AE%9A%E5%88%B6Sqlmap.html

SQLMAP进阶使用
http://www.vuln.cn/6495

sqlmap源码解析之test和boundary组合生成payload
http://www.beesfun.com/2017/03/30/sqlmap%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90%E4%B9%8Btest%E5%92%8Cboundary%E7%BB%84%E5%90%88%E7%94%9F%E6%88%90payload/

sqlmap 的源码学习笔记一之目录结构
https://blog.csdn.net/qq_29277155/article/details/51646932


新版的sqlmap添加了分块传输的功能
blob