PortSwigger靶场之 CSRF where token is not tied to user session通关秘籍

要解决 "令牌与用户会话不绑定的 CSRF" 靶场,核心在于核心核心是利用服务器的验证缺陷 ------CSRF 令牌未与用户会话绑定,导致攻击者可以复用其他用户的令牌发起攻击。以下从理论原理和实践步骤两部分详细说明:

一、核心理论知识:令牌与会话未绑定的 CSRF 漏洞

正常的 CSRF 令牌防御机制要求:令牌必须与用户会话(Session)严格绑定,即每个用户的令牌仅对自己的会话有效,其他用户使用该令牌会被拒绝。

而本靶场的漏洞在于:令牌是 "全局共享" 或 "仅与用户账号弱关联",不与具体会话绑定。这意味着:

  • 攻击者可以用自己账号的 CSRF 令牌,构造恶意请求攻击其他用户;
  • 即使受害者与攻击者是不同用户,服务器也会认可攻击者提供的令牌(因为不验证令牌所属的会话)。

二、实践步骤:从漏洞验证到攻击完成

步骤 1:准备两个账号,获取各自的 CSRF 令牌

靶场提供了两个账号,需分别获取它们的 CSRF 令牌用于测试:

  1. 登录第一个账号(wiener:peter)

    • 进入 "我的账户" 页面,打开 Burp 拦截功能;
    • 提交 "更改邮箱" 表单(随便填一个测试邮箱),拦截 POST 请求;
    • 记录请求中的 csrf 令牌值(如 csrf=qDrz6lMDQpzgVaLafGLsIlghGg1jQx96),然后放弃该请求(不发送到服务器,避免实际修改邮箱)。
  2. 登录第二个账号(carlos:montoya)

    • 打开浏览器隐私模式(避免会话冲突),登录该账号;
    • 同样提交 "更改邮箱" 表单,拦截请求并记录其 csrf 令牌(如 csrf=XNIBRbSGKbYDEdGe5J9NBgsw2qJFO0fB)。

步骤 2:验证 "令牌可跨会话复用"

通过 Burp Repeater 测试令牌是否与会话绑定:

  1. 在隐私模式下(carlos 账号的会话),将拦截的 "更改邮箱" 请求发送到 Repeater;
  2. 修改请求中的 csrf 令牌值,将其替换为 wiener 账号的令牌
  3. 确保请求体中的 email 是新邮箱(如 test-cross@example.com),发送请求;
  4. 观察响应:
    • 若服务器返回 302 重定向(跳转到账户主页),且查看 carlos 账号的邮箱已被修改,说明 令牌可跨会话复用 (漏洞确认)。

步骤 3:构造包含 "攻击者令牌" 的恶意 HTML

由于令牌不与会话绑定,直接使用自己账号(如 wiener)的 CSRF 令牌构造恶意表单即可:

  • 注意:令牌是 "一次性的"(使用后失效),测试时发现令牌无效,重新获取 wiener 账号的新令牌替换(csrf=tZ7RL9JwrbA0GKa3IfiXtGvf4XRoEjcw)

步骤 4:上传恶意 HTML 到漏洞服务器并验证

  1. 访问靶场的 "漏洞服务器",将上述 HTML 粘贴到 "Body" 中,点击 "Store";
  2. 用隐私模式打开 carlos 账号(模拟受害者),访问漏洞服务器的 "View Exploit" 页面;
  3. 查看 carlos 账号的邮箱确实被修改,说明恶意 HTML 有效(攻击者的令牌被受害者的会话接受)。

步骤 5:发起最终攻击

  1. 确保恶意 HTML 中的 email 是未被占用的新邮箱(避免与测试邮箱冲突);
  2. 若令牌是一次性的,重新获取 wiener 账号的最新令牌替换到 HTML 中,再次 "Store";
  3. 点击 "Deliver to Victim",靶场会模拟受害者访问恶意页面,其邮箱将被成功修改,实验室提示 "已解决"。

三、关键注意事项

  1. 令牌的时效性:若令牌是一次性的(使用后立即失效),需在发起攻击前重新获取最新令牌;
  2. 跨账号验证:必须通过两个账号的交叉测试,确认令牌可复用(如用 wiener 的令牌修改 carlos 的邮箱);
  3. 邮箱唯一性:最终攻击使用的邮箱需未被任何用户占用

通过以上步骤,利用 "令牌与会话不绑定" 的漏洞,复用攻击者的 CSRF 令牌即可绕开防御,成功完成 CSRF 攻击。

相关推荐
原则猫6 小时前
HOOKS 背后机制
前端
码语智行6 小时前
首页导航跳转功能深度解析-系统内和系统外
前端
阿猫的故乡6 小时前
Vue过渡动画从入门到装X:淡入淡出、滑动、列表动画、第三方库全搞定
前端·javascript·vue.js
IManiy7 小时前
总结之Vibe Coding前端骨架
前端
JS菌7 小时前
AI Agent 沙箱双层防护体系:从权限过滤到内核隔离的完整实现
前端·人工智能·后端
Aphasia3117 小时前
从输入URL到页面展示全流程
前端·面试
我叫黑大帅7 小时前
前端如何竖屏固定视口背景
前端·javascript·面试
abcy0712137 小时前
python pandas csv异步后台清洗前端优先返回成功信息
前端·python·pandas
IT_陈寒8 小时前
Vite这个坑我帮你踩了,动态导入居然这样才生效
前端·人工智能·后端
swipe8 小时前
Mem0 x Agent 实战系列:分层记忆 + 三路召回,搭建真正可用的长期记忆层
前端·javascript·面试