0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

原文链接: https://mp.weixin.qq.com/s?__biz=MzA4NDQ5NTU0MA==&mid=2647690866&idx=1&sn=4a721e43a083294d91530414cbf72330

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

Shazilrao Rsec 2025-07-11 14:27

本文章仅用网络安全研究学习,请勿使用相关技术进行违法犯罪活动。

声明:本文搬运自互联网,如你是原作者,请联系我们!

标签:文件上传、XSS

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

侦察:查看上传功能

在评测该应用程序时,我注意到它有一个个人资料图片上传功能。我测试了它是否接受其他文件类型,例如 .svg 或 .html——令我惊讶的是,SVG 格式的上传文件被接受并按原样渲染。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

上传包含脚本标签的 .svg 图像——初始 XSS 测试

我在浏览器中打开了上传的文件,然后——是的!!——出现了一个弹出窗口!

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

XSS 弹出窗口确认存储型 XSS 漏洞

这就是事情变得有趣的地方。

会议在哪里?

每当我们发现 XSS 时,接下来的想法应该是:

“我可以窃取会话并证明账户被接管吗?”

于是我立即打开 DevTools 进行检查

document.cookie

——但是没有会话 Cookie,因为应用程序使用的是基于 JWT 的标头身份验证。从防御角度来看,这还不错,但对于攻击者来说,是时候深入挖掘了。

下一站:

localStorage

localStorage

但是……惊喜!直接查看上传的XSS文件时,没有找到任何token 。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

查看 XSS 页面时 localStorage 中缺少 JWT

第一个问题:访问后才设置令牌/profile

在探索过程中,我注意到登录并导航到

/profile

端点后,前端 JavaScript 会动态获取用户数据 — — 然后才将 JWT 存储在 中

localStorage。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

JWT 仅在访问 /profile 后才会出现在 localStorage 中

所以,问题就在这里:

XSS 页面没有 JWT,我们必须强制浏览器先访问,然后等待 JWT 保存完成后,再进行提取。

/profile

制作有效载荷

为了自动化这个链条,我创建了一个 HTML 有效载荷:
1.

/profile

在后台静默加载
1. 等待短暂的延迟
1.

/localStorage

从localStorage中提取 JWT
1. 将其发送到我的 Burp Collaborator 服务器
0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

注入代码以访问

/profile

并窃取令牌

第二次危机:CORS 再次来袭

浏览器尝试通过 发送令牌时抛出了 CORS 错误

fetch()

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

向外部服务器发送令牌时出现 CORS 错误

<img>

不用担心——我用标签而不是 重写了数据泄露逻辑

fetch()

。这样可以绕过 CORS,因为浏览器不会阻止图片加载——即使是跨域的。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

修改有效载荷用于

<img>

无 CORS 渗透

当我再次测试它时…控制台中没有出现任何错误

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

清理控制台 — 没有 CORS 错误

游戏结束:令牌被盗,会话被劫持

我的 Collaborator 服务器成功接收了 JWT。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

JWT 令牌已成功在我的服务器上捕获

为了确认账户接管,我在浏览器控制台中使用了以下命令:

localStorage.setItem('token', '粘贴被盗令牌至此处');

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

在 localStorage 中设置令牌

然后我刷新了页面……我以受害者的身份登录了。

0046.从图片上传到账户接管——真实渗透测试中上传、存储和 CORS 漏洞的串联

成功劫持受害者会话

最后的想法

这个漏洞不仅仅与 XSS 有关 — — 它还与多层链接有关:
1. 文件上传配置错误——让 SVG/XSS 通过
1. Token 存储在

localStorage

Cookie 中
1. JWT 仅在访问后设置

/profile
  1. 泄露期间的 CORS 限制
  2. 使用创造性技巧(如
<img>

标签)绕过 CORS

如果你发现了 XSS,不要止步于此

alert(1)

— —深入研究

  • 如果没有 cookie,请检查
localStorage

sessionStorage


– 如果您无法直接访问令牌,请检查哪个页面触发了它。
– 使用浏览器逻辑来对抗自身——强制导航、等待、提取、发送。
– 当 CORS 阻止您的获取时 — — 使用

<img>

、,

<script>

甚至

<form>

ovo~