【juice-shop】★★★ CSRF:跨站请求伪造修改用户名
0x01 任务简报
💡 提示 (Hints)1. 查找更新用户名的表单,在 HTML 在线编辑器中构建恶意页面。可能需要旧版浏览器。
2. 看看在个人资料页面更改用户名时会发生什么。
3. 搜索有关 CSRF 攻击的信息,寻找可应用于本挑战的示例。
4. 在 http://htmledit.squarefree.com 中编写 CSRF 攻击代码,验证是否更改了用户名。
注意: 本题需要旧版浏览器(新版浏览器会因 SameSite Cookie 保护而拒绝跨站脚本自动携带 Cookie)。
这题需要旧版浏览器(新版浏览器会拒绝跨站脚本自带的Cookie),我这里暂时没有旧版浏览器,直接发思路吧……
0x02 实战:复现漏洞
🔍 第一步:分析用户名修改请求
打开 Burp Suite,登录账户后,在个人资料页面修改用户名一次,捕获并分析请求包。
观察 POST 请求的结构,记录以下信息:
- 请求 URL:
http://localhost:3000/profile - 请求方法:POST
- 参数:
username=<新用户名>
💉 第二步:构造 CSRF 恶意页面
创建一个 HTML 文件,包含自动提交的表单:
|
|
工作原理:
- 表单指向目标服务器的用户名修改接口
- 隐藏的
<input>字段包含恶意的新用户名 - JavaScript 自动提交表单,无需用户交互
- 浏览器自动携带已登录用户的 Cookie,请求被服务器认为合法
🌐 第三步:在线编辑并测试
方案 A:使用在线 HTML 编辑器
访问 http://htmledit.squarefree.com ,将上述 HTML 代码粘贴并运行。
方案 B:本地文件测试
- 创建
csrf.html文件,保存上述代码 - 使用旧版浏览器打开该文件
- 页面自动提交表单,修改已登录用户的用户名
⚠️ 第四步:浏览器版本要求
为什么需要旧版浏览器?
现代浏览器(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:config→network.cookie.sameSite.laxByDefault = false
- Chrome:
✅ 第五步:完成挑战
成功修改用户名后,挑战完成。