分块传输绕过WAF进行SQL注入

编程入门 行业动态 更新时间:2024-10-19 16:38:24

分块传输绕过<a href=https://www.elefans.com/category/jswz/34/1758982.html style=WAF进行SQL注入"/>

分块传输绕过WAF进行SQL注入

0x00最近看到许多师父在玩分块传输,据说能绕过所有WAF?




抱着学习的心态,复现了一波,扩展了很多知识面。

Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。

0x01 什么是分块传输?


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

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

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

这在http协议中也是个常见的字段,用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用Content-length的实体搜捕并不是总是管用。

分块技术的意思是说,实体被分成许多的块,也就是应用层的数据,TCP在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照MSS的长度切成一分一分的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成。

0x02复现


首先准备靶场,可以用DVWA,也可以用sqli。我只用过前者,没用过后者。

前者不会显示你调用的SQL语句,我觉得不大方便,所以我自己自学了一小点PHP,和请教了一下其他师傅,写了最简单的一个SQL注入靶场。

Github地址:


正常请求POST包:


分块传输POST包:



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

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

Transfer-Encoding:Chunked

而post的数据是这种格式

2
id
2
=3
0

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

id #参数 接收参数就是id一共就两个字母 所以上面的个数是2

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

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

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

#换行

#换行

至此,复现结束。


0x03 插件


经 师傅提醒,github已有大佬写出Burp插件,分块传输。





作者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与原作者无关。

更多推荐

分块传输绕过WAF进行SQL注入

本文发布于:2024-03-08 17:57:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1721710.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:WAF   SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!