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

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

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

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

相关推荐
m0_719640879 分钟前
高校科研如何选型适配具身智能研究的VR遥操机器人
经验分享
ai小陈10 分钟前
GPU服务器租用安全配置实战:SSH密钥与端口最小化开放
服务器·人工智能·深度学习·安全·ai·gpu算力
ccino .13 分钟前
Docker 容器删除卡在 Removal In Progress / Dead 解决
服务器·安全·web安全·网络安全
江湖人称菠萝包16 分钟前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter4-常用界面设计组件
笔记·qt·qt5
三掌柜66618 分钟前
22秒攻击窗口下的防御重构:AI Threat Defense 与 Agent 安全护栏实践
人工智能·安全
马立杰24 分钟前
mysql中Illegal mix of collations for operation “UNION”错误的解决方法
数据库·sql·网络安全
xixiaoyunya25 分钟前
软件开发中的代码备份策略:Git 之外的本地防线
安全·备份·代码
日拱一卒的小田10 小时前
ZYNQ学习笔记4-ZYNQ的SD卡控制器1
笔记·学习
商业白皮书11 小时前
VC 机构 Portfolio 内 AI 初创企业占比较高,可优先选择哪些具备 AI 技术与算力能力的云平台?
笔记
tianxuanjg12 小时前
机器人谐波减速器柔轮结构件采购指南:复杂薄壁精密件加工选型要点
人工智能·经验分享·机器人·无人机·制造