记一次实验:利用缓存服务器规范化技术进行网页缓存欺骗

目录

  • [1. 实验背景](#1. 实验背景)
  • [2. 构造请求](#2. 构造请求)
  • [3. 构建漏洞](#3. 构建漏洞)
  • [4. 细节提示](#4. 细节提示)
  • [5. 实战辨别解码方式](#5. 实战辨别解码方式)
  • [6. 说明](#6. 说明)

摘要: 本文基于 PortSwigger Web Security Academy 官方授权实验靶场,演示 Web 缓存欺骗漏洞的完整复现过程。实验将"主动解码"的角色从源服务器切换到缓存服务器,通过构造 /my-account%23%2f%2e%2e%2fresources?wcd 这类编码路径,利用 # 作为源服务器分隔符、?wcd 作为缓存破坏器,使缓存服务器把 /my-account 的响应当作 /resources 静态资源缓存下来。文章还系统梳理了 URL 编码对照表、攻击链拆解,以及实战中辨别"源服务器解码"与"缓存服务器解码"的三步探测方法,帮助读者理解漏洞成因并掌握防御思路。

  1. 这个实验和我们上一个实验其实还是比较相似的,就是它把"主动解码"的角色从源服务器换成了缓存服务器。

前面的重复的登录以及拦截以及判断分隔符操作跳过,直接进行到构造请求查看相应的操作上,前提:我们得到 #? 是作为有效的分割符,但是我们还要去自己测试一下反应,看到底是不是都有效。

  1. 然后我们就去构造这个请求,在同样的操作之下,只有 # 返回的结果存在 X-Cache 缓存相应头,说明这个才是有效的,然后攻击路径是:
复制代码
攻击路径:/my-account%23%2f%2e%2e%2fresources
字符 URL编码 说明
/ %2f 路径分隔符
. %2e 点(用于路径遍历)
? %3f 查询参数起始符
# %23 锚点标识符
; %3b 分隔符(在某些系统中)
空格 %20 空格
% %25 百分号本身
  1. 然后回到实验页面去构建漏洞:
html 复制代码
<script>
document.location="https://你的实验ID.web-security-academy.net/my-account%23%2f%2e%2e%2fresources?wcd";
</script>

然后去访问这个地址就可以得到最后目的 API。

4.细节提示

?wcd 是"缓存破坏器",它的作用不是"让攻击生效",而是"让攻击稳定生效"。

攻击路径:/my-account%23%2f%2e%2e%2fresources?wcd

│ │ │

│ │ └─ 缓存破坏器(?wcd)

│ │ 作用:让受害者访问"新"路径,避免缓存污染

│ └─ 编码后的路径遍历部分

│ 作用:让缓存服务器"绕道"到/resources目录

└─ #的编码(%23)

作用:告诉源服务器"忽略#后面的所有内容"

  • %23 是给源服务器看的"分隔符"。

  • ?wcd 是给缓存服务器看的"刷新标记"。

攻击链拆解

攻击路径:/my-account%23%2f%2e%2e%2fresources?wcd

源服务器看到的是:/my-account(因为 # 是分隔符)

缓存服务器看到的是:/resources(因为缓存会解码 %2f%2e%2e%2f 为 /../)

结果:缓存服务器把 /my-account 的响应,当成 /resources 的静态资源存下来了。

5.在实战中如何辨别是缓存服务器解码还是源服务器解码

第一步:建立基准(确认分隔符)

  1. 登录应用,获取一个包含你个人信息的页面(比如 /my-account),把它作为基准响应。

  2. 用Intruder测试常见的分隔符(如 ;#?),找出源服务器把哪个字符当作分隔符(即该字符后跟任意内容仍能返回200)。

  3. 这一步是必要的,因为后续的探测路径需要用到这个分隔符来"隔离"源服务器的视线。

第二步:测试"源服务器规范化"(即源服务器解码模式)

  1. 构造一个路径,让源服务器有机会解码并解析路径遍历符,例如 /aaa/..%2fmy-account

  2. 观察结果:

    • 如果返回200(你的个人主页) → 结论:源服务器会主动解码并规范化路径。

    • 如果返回404 → 说明源服务器不解码..%2f,继续下一步。

第三步:测试"缓存服务器规范化"(即缓存服务器解码模式)

  1. 现在,利用第一步找到的分隔符(假设是#),构造一个路径,将路径遍历编码放到分隔符的"保护"之后,例如 /my-account#%2f%2e%2e%2fresources

  2. 观察响应头,特别是 X-Cache 或类似字段:

    • 发送第一次:看到 X-Cache: miss

    • 立即发送第二次:

      • 如果 X-Cache 变成 hit → 结论:缓存服务器会解码并规范化路径,触发了缓存规则。

      • 如果 X-Cache 仍然是 miss → 说明缓存服务器也不解码,这个实验环境对路径遍历的编码不敏感。

为了完成以上三步,你需要在真实测试中,始终带着两个"探测器":

  1. 分隔符探测器(Intruder):用于找出源服务器的"盲区"在哪里。

  2. 缓存探测器(Repeater发两次请求):用于确认某个路径是否被缓存,以及被缓存的路径是什么。

谁(源或缓存)会对路径进行规范化?触发缓存的"开关"(后缀、前缀、分隔符)是什么?

6.说明

本文涉及的所有操作均在 PortSwigger Web Security Academy 提供的官方授权实验靶场中进行。该平台明确授权安全学习者在其环境中进行漏洞复现与攻击模拟。

本文所展示的技术、思路及代码,严禁用于任何未经授权的系统、网络或应用。请勿将文中方法用于非法获取他人数据、破坏系统或侵犯隐私。

读者若将本文内容用于非法用途,由此产生的一切法律后果与责任由读者自行承担,与本文作者无关。

本文旨在帮助安全爱好者理解 Web 缓存欺骗的攻击原理与防御方法。建议读者在理解漏洞成因后,重点学习如何修复与防御,而非仅关注攻击手法

安全研究,始于责任,终于守护。

相关推荐
一隅论数智9 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
上海广测检测科技有限公司9 小时前
智能平板出口巴西合规详解:Anatel射频、Inmetro电源/电池与LGPD数据合规叠加
经验分享
FLJwu11 小时前
存储与固件量产实战01:运动相机TF卡量产翻车实录!V30≠4K可用,90%OEM踩中的隐形售后坑
经验分享·数码相机·相机
深圳老胡11 小时前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
xiaomu0012312 小时前
床垫选型的技术评估模型:结构、材料、卫生与检测四层口径
经验分享
Because_of_Her112 小时前
并查集-听课笔记
笔记·算法·并查集
汉风设计装饰12 小时前
智慧办公弱电系统设计:门禁、监控与 IoT 传感器的集成方案
经验分享
彧azz12 小时前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
m0_7196408713 小时前
支持开源二次开发的VR遥操机器人2026年选型推荐
经验分享
全栈弄潮儿²⁰²⁴13 小时前
AI Agent 开发实战(30):限流、缓存与成本控制
人工智能·gpt·缓存·agent·限流·agi·成本控制