记一次实验:利用路径分隔符进行网页缓存欺骗

摘要: 本文基于 PortSwigger Web Security Academy 官方靶场,完整复现 Web 缓存欺骗(Web Cache Deception)漏洞的利用过程。通过系统化探测源服务器与缓存服务器对路径分隔符的认知差异,找到仅被源服务器识别、缓存服务器忽略的特殊字符(如分号 ;),并借助静态扩展名缓存规则,诱导缓存服务器存储受害者的私密页面,最终窃取敏感信息。文章涵盖从侦察、验证、利用到读取的完整攻击链,并附有防御建议与安全责任声明。

1.这个实验是通过存在路径分隔符的漏洞来进行攻击的案例,和上一个实验过程其实是差不都的。首先我们要在bp内置浏览器中打开登录页面,进行正常的登录操作,然后正常登录之后去访问我们的主页,这个时候打开bp,拦截此次请求,并发送到repeater页面

2.在repeater中测试直接拼接my-accountabc,返回的结果肯定是404,证明这个"基础路径"是无效的,为后续对比提供参照。然后我们在intruder页面批量测试分隔符

测试的位置是位于my-account后面abc前面的地方,右键单击,点击第一个选项send to intruder,然后我们就来到了intruder页面,在这里我们点击上面的add键,在abc前面就会出现§§符号,然后我们可以在页面的payload configuration这个里面的add哪里依次输入字符,也可以先把字符每行一个排列然后粘贴到框里,Burp会自动识别换行,把他们看成独立一个

复制代码
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
@
[
\
]
^
_
`
{
|
}
~
%21
%22
%23
%24
%25
%26
%27
%28
%29
%2A
%2B
%2C
%2D
%2E
%2F
%3A
%3B
%3C
%3D
%3E
%3F
%40
%5B
%5C
%5D
%5E
%5F
%60
%7B
%7C
%7D
%7E

"Payload encoding" (有效载荷编码)区域,务必取消勾选 "URL-encode these characters" 。否则,Burp 会把 ; 编码成 %3B# 编码成 %23,这样测试的就是编码后的字符,而不是原始字符了。

点击 "Start Attack", 开始攻击,攻击完成后,按 "Status" 列排序,找出所有返回 200 的字符

3.然后我们发现只有;和?两种字符返回的是200攻击成功,然后我们还要回到我们原来的repeater页面去尝试这两种那种才是有效的分隔符

这个是当?作为分割符的时候返回的还是原来的页面,不是有效的分隔符

当;作为分割符时,**触发 X-Cache: hit 字符,**所以这个是作为有效的分割符,第一次显示的是miss,缓存未命中

然后再发送一次,返回的是hit,缓存命中

4.然后我们就去实验页面,利用漏洞编写脚本,在body的框内输入我们的脚本,这个id是我们的实验的id,然后点击交付,这里用wcd.js是和我们之前的abc.js的缓存分开,避免缓存存我们自己的内容

html 复制代码
<script>
document.location="https://你的实验ID.web-security-academy.net/my-account;wcd.js";
</script>

5.然后我们再去访问这个上面这个地址,就可以直接得到目标的API

6.总结

通过系统化测试,找到源服务器当作分隔符、但缓存服务器不当作分隔符的特殊字符(如 ;),并利用它对静态扩展名的缓存规则,诱使缓存服务器存储受害者的私密页面,最终窃取敏感信息

阶段 你的核心任务 关键操作 背后的考点与思维
1. 侦察阶段 寻找"源服务器与缓存服务器的认知差异" 1. 登录 wiener:peter 获取基准请求。 2. 在 Repeater 中测试 /my-accountabc,建立 404 基准 。 3. 使用 Intruder 批量测试候选分隔符(;, #, ? 等)。 考点 :路径解析差异、HTTP 状态码分析。 思维:用"控制变量法"建立参照系,系统化探测未知边界。
2. 验证阶段 确认找到的差异是否"可利用" 1. 对返回 200 的字符(如 ;?),分别测试带 .js 后缀的路径。 2. 观察响应头,确认 X-Cache 能否从 miss 变为 hit 考点 :缓存响应头(Cache-ControlX-Cache)、缓存命中逻辑。 思维:不只求"有效",更要求"可利用"------区分"源服务器分隔符"与"缓存服务器分隔符"。
3. 利用阶段 让受害者(carlos)替我们触发缓存 1. 在漏洞服务器编写 JavaScript 重定向脚本(使用 ;.js)。 2. 点击"Deliver to victim"模拟交付。 考点 :漏洞服务器用途、CSRF 式攻击链构建。 思维:攻击者不直接访问敏感页面,而是"诱导"受害者触发。
4. 读取阶段 从缓存中提取目标数据 在无痕窗口或新浏览器会话中,直接访问恶意路径(如 /my-account;wcd.js)。 考点 :缓存与权限的分离。 思维:缓存系统只认路径,不认人,这就是攻击面。
5. 提交阶段 完成实验 复制 carlos 的 API 密钥,提交。 思维 :知道如何防御此漏洞(如设置 Cache-Control: private,或规范路径解析)。

7.声明

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

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

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

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

如需转载或引用本文内容,请保留本声明全文,并注明出处。

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

相关推荐
AOwhisky23 分钟前
Linux 网络服务架设学习笔记(第五期)——Web 服务(上篇):Apache HTTP Server——从静态到动态
linux·运维·服务器·笔记·学习·云计算·apache
OCR_133716212751 小时前
强光环境下护照 OCR 识别率骤降?从光学层到算法层的系统性解决方案
安全·智能硬件
总线通信小百科1 小时前
CAN、LIN、汽车以太网同时采集,车载数据记录设备该怎么选?
经验分享
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 1
spring boot·笔记·后端
MaximusCoder2 小时前
等保测评命令——weblogic
运维·安全·安全威胁分析
李昊哲小课2 小时前
SpringBoot4 云端咖啡站 阶段四:安全、文件与性能
spring boot·安全·性能优化·文件·性能
菩提小狗3 小时前
每日安全情报报告 · 2026-08-25
网络安全·漏洞·cve·安全情报·每日安全
InfinitePlus3 小时前
redis数据持久化
数据库·redis·缓存
Linux运维技术栈3 小时前
筑牢业务信息安全防线:雷池WAF+后端日志溯源的全链路防护体系落地实践
linux·安全·雷池