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

目录

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

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

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户13 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
上海广测检测科技有限公司14 小时前
消费类智能联网设备安全分级国标征求意见要点解析:三级五维框架与跨境对标逻辑
网络·经验分享
志尊宝14 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
QZ1665609515915 小时前
金融数据流转监测排行:从看见到拦截的距离
网络·安全·网络安全·金融
后季暖15 小时前
电商问数笔记(2)
笔记
富唯智能机器人15 小时前
晶振弹匣上下料,复合机器人如何实现柔性自动化|富唯智能
经验分享
xier_ran16 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
看着博客敲代码16 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
小HANN17 小时前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
星恒随风18 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式