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

目录

  • [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 缓存欺骗的攻击原理与防御方法。建议读者在理解漏洞成因后,重点学习如何修复与防御,而非仅关注攻击手法

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

相关推荐
虹科数字化与AR25 分钟前
工业AR设备采购指南:从参数到场景的全面评估框架
经验分享
liulilittle1 小时前
REALITY 代理隧道的有效检测方法: 被动、主动与确定性三层实证研究
linux·服务器·网络·网络协议·安全·网络安全·通信
苏灵凯1 小时前
IT疑难杂症诊疗室:从故障定位到根治的技术实战指南
笔记·ai·域名·agent·deepseek
0xBADCODE1 小时前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf
冰暮流星1 小时前
marketdown之表格
笔记
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 1 章:MySQL 入门
运维·数据库·笔记·后端·学习·mysql·dba
Capricorn19881 小时前
Bug排障实录:Software 3.0 遭遇文献幻觉?知芽 Notebook Skill 底层架构解析
人工智能·笔记·架构·bug·论文笔记
liulilittle1 小时前
加密扩展记录 37B(含头口径):Go TLS 栈形态特征的适用域与配对勘误
网络·网络协议·计算机网络·网络安全·通信·tls·reality
梦071 小时前
实操手册-OpenClaw长任务超时无响应的解决
经验分享·openclaw