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

目录

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

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

相关推荐
我爱学习_zwj14 小时前
IP 地址与子网划分
网络协议·网络安全
上海广测检测科技有限公司14 小时前
显示器能效新国标:GB 21520-2023 的适用范围、判定逻辑与限值分档
经验分享
无心水14 小时前
20、大数据架构设计理论与实践 核心考点与学习笔记
大数据·笔记·学习·架构师·系统架构设计师·软考系统架构设计师·架构设计师
你看我名字14 小时前
Redis 高可用、持久化与故障切换:从缓存组件到云上基础设施
数据库·redis·缓存
snysy15 小时前
WordPress伪静态404故障排查笔记
android·笔记·wordpress
Z21-X15 小时前
云原生运维实战笔记:华为云计算与网络类服务全景解析
运维·笔记·学习·云原生·华为云
半壶清水15 小时前
[软考网规考点笔记]-局域网之冗余网关技术
网络·笔记·智能路由器
LK_0715 小时前
【Agent】工具调用的安全边界:从模型输出到程序执行
人工智能·笔记·python·agent
乐橙开放平台15 小时前
跨地域监控难管理?通过 GB28181 把各地海康大华乐橙摄像头注册到云端平台
开发语言·笔记·物联网·自动化·php·音视频·智能家居
动词ing15 小时前
【学习笔记】51单片机 模块化编程
笔记·学习·51单片机