PortSwigger网络缓存欺骗(4)

这是第四期的网络缓存欺骗,为了防止大家的头脑已经转不过来了,今天再来重新梳理下并区分下缓存静态路径与缓存静态资源

  • "静态资源":一种让缓存服务器认为"这个响应可以缓存"的特征。
  • /resources:只是网站上可能存在的一个具体静态资源目录。

所以,如果缓存服务器是根据文件扩展名判断是否缓存,那么你可以用类似:

复制代码
/my-account.css

或者:

复制代码
/my-account.js

来冒充静态资源,不需要 /resources

但如果这个 Lab 的缓存规则明确是:

复制代码
/resources/*

才会缓存,那么你就不能简单把 resources 去掉,因为:

复制代码
/my-account.css

虽然看起来像 CSS,但缓存服务器未必会缓存它。

可以这么理解

假设缓存规则是:

复制代码
/resources/*  → 缓存

那么:

复制代码
/my-account + 某种路径混淆 + /resources

是为了让缓存服务器产生:

"这个请求属于 resources。"

而如果缓存规则是:

复制代码
*.css
*.js
*.jpg

那么:

复制代码
/my-account.css

就足够让缓存服务器产生:

"这是 CSS,缓存它。"

所以:

resources 不是"静态资源"的代名词,它只是一个具体的静态资源路径。

对你当前这个 PortSwigger Lab

如果你做的是你前面提到的:

Web cache deception via origin server normalization

那么不要简单认为"我加 .css 就能替代 resources"。

这个 Lab 要利用的是:

复制代码
缓存服务器的 URL 解析
        ≠
源服务器的 URL 规范化

resources 是根据该实验环境的缓存行为选择的一个缓存诱饵路径

所以判断能不能替换,最简单的方法就是先确认:

复制代码
什么 URL 会被缓存?

如果:

复制代码
/resources/xxx → HIT

而:

复制代码
/xxx.css → MISS

那就说明这个环境依赖 resources

反过来,如果:

复制代码
/xxx.css → HIT

那么 .css 就可能承担 resources 的作用。

因此不是"Web Cache Deception 必须使用 resources",而是"必须让缓存服务器把这个请求当成可缓存的资源";具体用 /resources.css 还是其他形式,取决于目标缓存服务器的规则。

在第三篇的时候我没有重点去了解为什么必须要在url的路径中添加resources,在深度了解后发现在发现漏洞的过程中,我们做的每一步中就包含了试探缓存服务器的规则(基于怎样的规则才能缓存到用户的cookie&session),而最简单易懂的就是直接缓存文件,例如.css .js .jpg 等等,但最难懂的是缓存路径和分隔符的试探,我们则需要通过intruder去遍历payload,不断试探状态码。当然我们接下来要说的归一化处理也是其中很重要的一环,相当于结合缓存服务器和源服务器。

归一化图

复制代码
                   同一个 HTTP 请求
                           │
              ┌────────────┴────────────┐
              ↓                         ↓
        缓存服务器                    源服务器
              │                         │
       认为是 resources             规范化后
       可缓存资源                    实际访问 my-account
              │                         │
              └──────────┬──────────────┘
                         ↓
                  my-account 响应
                         ↓
                     被缓存

整个攻击过程

复制代码
攻击者
  │
  │ 构造恶意 URL
  ↓
/my-account%23%2f%2e%2e%2fresources?wcd
  │
  ↓
┌───────────────────┐
│    缓存服务器      │
│                   │
│  看到 resources    │
│       ↓           │
│   认为可以缓存     │
└────────┬──────────┘
         │
         ↓
┌───────────────────┐
│     源服务器       │
│                   │
│  解析 URL          │
│       ↓           │
│  到达 /my-account   │
│       ↓           │
│ 返回受害者账户信息  │
└────────┬──────────┘
         │
         ↓
    返回给受害者
         │
         ↓
   缓存服务器缓存

归一化原理

要利用这种差异,您还需要找到一个源服务器使用但缓存中未使用的分隔符。通过将可能的分隔符添加到动态路径之后的有效负载中来测试它们:

  • 如果源服务器使用分隔符,它将截断 URL 路径并返回动态信息。
  • 如果缓存不使用分隔符,它将解析路径并缓存响应。

例如,考虑有效载荷/profile;%2f%2e%2e%2fstatic。源服务器使用;以下分隔符:

  • 缓存将路径解释为:/static
  • 源服务器将路径解释为:/profile

源服务器会返回动态配置文件信息,并将其存储在缓存中。因此,您可以利用此有效载荷进行攻击。

实验:利用缓存服务器规范化进行 Web 缓存欺骗实验:利用缓存服务器规范化进行 Web 缓存欺骗

根据归一化原理可知 我们需要让缓存服务器认为是resources静态路径 让源服务器认为是my-account 并且在构造的url中需要使用到分隔符 也就是说我们需要intruder对分隔符进行遍历筛选,找出符合状态码的分隔符使用

复制代码
/my-account§§%2f%2e%2e%2fresources

虽然有四个可以使用 但是我们还是选最熟悉最简单的?并将其统一为url编码的%3f 得出

复制代码
/my-account%3f%2f%2e%2e%2fresources

经过测试只用%23可以使用后获得x-cache:miss

之后便可以注入脚本了

相关推荐
shark-chili1 小时前
关于AI辅助编程的认知
数据库·人工智能·redis·macos·缓存
聚铭网络2 小时前
聚铭网络入选2026年度连云港市网络和数据安全应急支撑服务机构并获授牌
网络安全
oioihoii3 小时前
在 Kubernetes 上管好数据库:金仓 KES-Operator 正式落地
缓存
@我漫长的孤独流浪3 小时前
计算机网络与信息安全
计算机网络·网络安全
wdfk_prog3 小时前
ROS教程06:ROS1 Node 启动与停止流程
运维·缓存·docker·容器·ros
白猫不黑3 小时前
CTF是什么?从零理解一场攻防竞赛
网络·web安全·计算机·网络安全·信息安全·ctf·红蓝对抗
学习3人组4 小时前
XSS跨站脚本攻击攻击案例拆解-网络安全系列
网络安全
XLYcmy5 小时前
Prompt 设计相关问题
网络安全·llm·prompt·agent·cot·漏洞检测·harness
Doris__HE5 小时前
【元脑服务器NF8480G7-NF8480M7技术规格分享】
运维·服务器·数据库·缓存·性能优化
sbjdhjd5 小时前
从“删除后重生”到认证绕过:PHP 常驻内存实验与 Cacti remote_agent 命令执行链路复盘
安全·web安全·网络安全·数据挖掘·php·网络攻击模型·安全架构