302 跳转劫持
302 跳转导致 Token 泄露
一、基本情况
- 漏洞简述:登录劫持,利用登录任意跳转携带 Token 的特性,诱导用户点击恶意登录链接,登录成功后攻击者可获取该用户的 Token 值
- 漏洞危害:高
二、问题描述
漏洞详情描述及截图
1. 登录任意跳转携带 Token
- 漏洞机制:
用户点击登录链接后,通过 302 跳转至统一认证登录页面。完成登录后,账户 Token 被绑定并共享至其他关联域名站点,实现单点登录(SSO)。在跳转过程中,redirectUrl
参数未严格校验,导致攻击者可通过构造恶意回调地址窃取 Token。 - 复现步骤:
- 选择任意站点,构造以下登录链接:
- 正常情况下,用户在
global.test.com
完成统一认证后,获取 Token 并携带 Token 跳转至redirectUrl
指定的地址。
构造恶意 Payload,利用
@
符号绕过限制:
在
redirectUrl
后添加@www.test.com
,使浏览器登录成功后携带 Token 访问攻击者控制的域名(如www.test.com
)。这是浏览器发出的登陆包,返回成功会给用户一个token。
浏览器带上此token去访问绕过后的站点,
查看自己网站的访问日志,收到该用户的token,
1、模拟攻击,让受害者在a点登陆,攻击者通过群发登陆地址等,受害者登陆成功,攻击者获得token,成功登陆受害者账户,
2、
- 风险点:
redirectUrl
参数未进行严格的域名白名单校验,攻击者可利用开放重定向将 Token 发送至任意外部站点。- (此处建议附上截图,例如:登录请求包、响应中的 Token、攻击者网站日志中的 Token 记录等。)
2. 模拟攻击场景
- 攻击流程:
- 攻击者构造恶意登录链接(如上述 Payload),通过群发邮件、社交平台等方式分发给受害者。
- 受害者在诱导下点击链接并登录,完成统一认证后,Token 被泄露至攻击者控制的站点。
- 攻击者获取 Token,使用该 Token 冒充受害者登录其账户,接管相关权限。
三、修复建议
- 禁止非源跳转:
- 在服务器端增加
redirectUrl
的校验逻辑,设置域名白名单,仅允许跳转至本网站或可信关联域名的链接。 - 示例整改方案:
- 检查
redirectUrl
的域名是否属于白名单(如*.test.com
)。 - 对非白名单域名直接拒绝跳转,返回错误提示。
- 这样可有效防止 Token 被恶意重定向至外部站点。
评论