【juice-shop】★★★ CSRF:跨站请求伪造修改用户名

通过构造恶意 HTML 页面,利用 CSRF 漏洞从其他来源修改用户名。需要旧版浏览器或禁用 SameSite Cookie 保护。

【juice-shop】★★★ CSRF:跨站请求伪造修改用户名

0x01 任务简报

💡 提示 (Hints)
1. 查找更新用户名的表单,在 HTML 在线编辑器中构建恶意页面。可能需要旧版浏览器。
2. 看看在个人资料页面更改用户名时会发生什么。
3. 搜索有关 CSRF 攻击的信息,寻找可应用于本挑战的示例。
4. 在 http://htmledit.squarefree.com 中编写 CSRF 攻击代码,验证是否更改了用户名。

注意: 本题需要旧版浏览器(新版浏览器会因 SameSite Cookie 保护而拒绝跨站脚本自动携带 Cookie)。

这题需要旧版浏览器(新版浏览器会拒绝跨站脚本自带的Cookie),我这里暂时没有旧版浏览器,直接发思路吧……


0x02 实战:复现漏洞

🔍 第一步:分析用户名修改请求

打开 Burp Suite,登录账户后,在个人资料页面修改用户名一次,捕获并分析请求包。

观察 POST 请求的结构,记录以下信息:

  • 请求 URLhttp://localhost:3000/profile
  • 请求方法:POST
  • 参数username=<新用户名>

💉 第二步:构造 CSRF 恶意页面

创建一个 HTML 文件,包含自动提交的表单:

1
2
3
4
5
<form action="http://localhost:3000/profile" method="POST">
  <input name="username" value="CSRF"/>
  <input type="submit"/>
</form>
<script>document.forms[0].submit();</script>

工作原理:

  1. 表单指向目标服务器的用户名修改接口
  2. 隐藏的 <input> 字段包含恶意的新用户名
  3. JavaScript 自动提交表单,无需用户交互
  4. 浏览器自动携带已登录用户的 Cookie,请求被服务器认为合法

🌐 第三步:在线编辑并测试

方案 A:使用在线 HTML 编辑器

访问 http://htmledit.squarefree.com ,将上述 HTML 代码粘贴并运行。

方案 B:本地文件测试

  1. 创建 csrf.html 文件,保存上述代码
  2. 使用旧版浏览器打开该文件
  3. 页面自动提交表单,修改已登录用户的用户名

⚠️ 第四步:浏览器版本要求

为什么需要旧版浏览器?

现代浏览器(Chrome 80+、Firefox 60+)默认设置 SameSite=Lax Cookie 属性,跨站请求不会自动携带 Cookie,导致 CSRF 攻击失效。

解决方案:

  • 使用 Firefox 52 ESR 或 Chrome 79 及以下版本
  • 或在现代浏览器中禁用 SameSite 保护:
    • Chrome:chrome://flags/#same-site-by-default-cookies → Disabled
    • Firefox:about:confignetwork.cookie.sameSite.laxByDefault = false

✅ 第五步:完成挑战

成功修改用户名后,挑战完成。

使用 Hugo 构建
主题 StackJimmy 设计