zoukankan      html  css  js  c++  java
  • 每日一洞 | 分块传输学习

    分块传输学习

    1. 前言

    最近面试看文章之余碰到了分块传输的知识点,其实早在2019年就知道了这个名词但是一直没有深入的看过,在这里天上前面的坑。

    2. 什么是分块传输?

    首先分块传输只支持http1.1,http1.1引入了分块传输的编码方式只要在代码头部分加入Transfer-Encoding: chunked,就代表这个报文采用了分块编码。此时不用指定Content-Length接收方也可以知道什么时候传输结束了,只需要约定一个信号即可,比如,接收方只要接收到一个长度为0内容为0的分块,则代表传输完毕。

    那么怎么样将一个普通的报文改编成分块传输形式的呢?

    报文中的实体需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的 CRLF(rn),也不包括分块数据结尾的 CRLF。最后一个分块长度值必须为 0,对应的分块数据没有内容(两个空行),表示实体结束。

    下面是一个post的数据

    POST /api.php HTTP/1.1
    
    Host:127.0.0.1
    
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
    
    Accept: */*
    
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-
    
    US;q=0.3,en;q=0.2
    
    Connection: close
    
    Referer: 127.0.0.1
    
    Cookie: phpsessionid
    
    Content-Type: application/x-www-form-urlencoded
    
    Content-Length: 25
    
    id=123456```
    
    
    比如一个post的数据包其内容为id = 123456;一般get方式是不会有Content-Length的因为url传输时限制了它的长度,但是post没有,所以我们就需要有这个字段来让后端判断数据的长度,如果没有字段这个地方就接受不到。
    
    这里我们就可以使用分块传输的方式,改为分块传输后的内容如下。
    
    

    POST /api.php HTTP/1.1

    Host: 127.0.0.1

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

    Accept: /

    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

    Connection: close

    Referer: 127.0.0.1

    Cookie: phpsessionid

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 39

    Transfer-Encoding: chunked

    3

    id=

    1

    1

    1

    2

    2

    34

    2

    56

    0

    
    最后有两行空格(代表着结束),这就是分块传输的格式3代表下面将会有3个字符(id=),但是后来一些waf对其的检测格式更加的严格了所以我们采用了下面的方式其中';'代表着注释,格式如下
    '''
    POST /api.php HTTP/1.1
    
    Host: 127.0.0.1
    
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
    
    Accept: */*
    
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    
    Connection: close
    
    Referer: 127.0.0.1
    
    Cookie: phpsessionid
    
    Content-Type: application/x-www-form-urlencoded
    
    Content-Length: 74
    
    Transfer-Encoding: chunked
    
    3;Twz1NRI1ihKTtxwqWuWTDEV4
    
    id=
    
    3;Hmd8LkqmPRVlz
    
    123
    
    3;2tEkv
    
    456
    
    0
    
    
    
    '''
    
    ##3. 这就是分块传输在渗透测试的利用方法
    
    看了网上的很多方法主要时在注入的时候对于分块传输的利用
    
    总结有下面的方式:
    
    1. 直接对sqlmap进行改动多了一个--chunk的参数然后对其进行注入当然这个方法相当于给你一个新的sqlmap。(来自于jaky表哥:https://pan.baidu.com/s/1xzkjewrOZp-gzuAvdsFEfw  密码:z0lq)
    2. burp的插件去对内容进行一个加密,三表哥的插件地址如下
    >https://github.com/c0ny1/chunked-coding-converter
    
    值得一提的是作者给的还是需要去编译给安装好mvn然后在目录中执行mvn package,当前目录会生成target文件里面包含了jar文件,导入burp就好。
  • 相关阅读:
    java字符串常用操作(查找、截取、分割)
    java StringBuffer的length()和capacity()方法比较
    java四种权限修饰符
    HDU-Tick and Tick
    HDU
    Piggy-Bank (完全背包)
    HDU
    1008 Elevator (20 分)(模拟)
    最少拦截系统 (动态规划)
    外星人的语言(进制转换)
  • 原文地址:https://www.cnblogs.com/J0ng/p/13411670.html
Copyright © 2011-2022 走看看