ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[转载]利用分块传输绕过WAF进行SQL注入

2020-01-17 11:56:45  阅读:398  来源: 互联网

标签:分块 WAF 传输 result SQL Chunked 数据 id


原理

客户端给服务器发送数据的时候,如果我们利用协议去制作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查询的后台

<?php
header('Access-Control-Allow-Origin:*');
$mysql = new mysqli();
$mysql->connect('localhost','db_user','db_pass','db_name');
if (!$mysql){
    echo "error";
    exit(mysqli_connect_error());
}
$mysql->set_charset("utf8");
$num = $_POST['id'];
$sql = "select * from `student` where id='$num'";
$result = $mysql->query($sql);
if (gettype($result) == 'object'){
    $result = $result->fetch_all();
}
$number = $result[0][0];
$username = $result[0][1];
echo "用户名:".$username."<br>";
echo $sql."<br>";

首先我们进行正常的请求的数据包是这样的

 

 

 而如果我们进行分块传输的话

 

 

进行分块传输的时候,请求头要加上Transfer-Encoding: Chunked,然后POST的数据规则如下

2   #下面的数据的长度,可以在后面加个分号然后添加注释(2; hello world)
id  #请求的参数
2   #下面的数据的长度
=1  #请求的值,和前面的id连起来
0   #表明分块请求结束,一个0和两个换行

最后就是大佬写出的插件,安装了一键分块Orz
https://github.com/c0ny1/chunked-coding-converter  

  

转载自:xi4or0uji

标签:分块,WAF,传输,result,SQL,Chunked,数据,id
来源: https://www.cnblogs.com/BOHB-yunying/p/12205068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有