URL 跳转
URL 跳转漏洞利用的是用户对可信域名的信任与实际访问目标之间的断层:浏览器地址栏显示的是正规网站域名,但最终被重定向到攻击者控制的钓鱼页面。 漏洞本身并不直接窃取数据,危害完全依赖于用户"看到官方域名就放松警惕"这一心理盲点。
成立前提
应用接受 URL 参数作为跳转目标(redirect=、url=、backurl=、next=),且服务端未对跳转目标做域名白名单校验。常见于登录后跳转、OAuth 回调、分享跳转等功能点。
利用链路
直接跳转钓鱼:攻击者构造官方域名开头的链接,用户识别到域名合法后点击,被 302 跳转到仿冒页面:
https://legit-bank.com/login?redirect=https://evil.com/phishing
配合社会工程:将含跳转漏洞的链接附在钓鱼邮件/短信中,收件人看到发送方使用的是熟悉品牌的域名,降低戒备心点击后登录钓鱼页面。
OAuth redirect_uri 滥用:OAuth 2.0 的授权回调参数本质上是一个受控跳转,redirect_uri 未严格校验时可将授权码/token 发送到攻击者域(参见 CSRF 章节中的 OAuth 劫持链路)。
登录后跳转截获 token:某些实现在登录成功后将 session token 附加在 redirect URL 的 query string 中,跳转到攻击者服务器时 token 被服务器日志记录。
历史样本
国内主流平台普遍存在:百度、新浪、腾讯、网易等平台均曾报告 URL 跳转漏洞,主要集中在分享跳转接口(/s?url=)、登录回调(/login?next=)、OAuth 回调等功能。部分平台的跳转接口被黑产批量用于 QQ、Apple ID、银行账号钓鱼。
@ 符号绕过:FTP/HTTP URL 规范中,@ 之前的内容为认证信息,@ 之后才是真实主机:
https://legit.com@evil.com/
部分过滤实现检查 URL 是否以可信域开头,@ 绕过可通过此检查。
Flash navigateToURL 绕过:平台在 Flash 广告中使用 navigateToURL 实现跳转,安全检测仅做字符串前缀匹配,攻击者构造 legit.com.evil.com 通过检测后跳转到攻击者域。
双 URL 编码绕过:过滤层对 URL 解码一次后检查,将 evil.com 双重编码为 %65%76%69%6c%2e%63%6f%6d,过滤时看到的是编码内容而非实际域名。
登录态依赖跳转:某些跳转接口只在用户已登录时生效,匿名访问会被拦截或返回错误页。攻击者将链接嵌入钓鱼邮件,配合浏览器"记住密码"自动填充——用户打开链接时浏览器已完成登录,跳转静默触发,用户感知不到任何异常提示。
QQ 邮箱登录态钓鱼链:QQ 邮箱跳转接口要求用户处于登录状态才能触发,黑产将跳转链接嵌入仿冒通知邮件,收件人在登录状态下点击后直接落地 QQ 密码钓鱼页,整个链路均在 QQ 官方域名下完成,安全软件绿标不报警。
支付/知名平台域名作钓鱼载体:苏宁易付宝登录页、财付通等支付平台的跳转接口曾被黑产批量用于仿冒公司邮件钓鱼。攻击者在邮件中附上形如"公司邮箱升级通知"的内容,跳转链接域名显示为知名支付平台,绕过企业邮件网关的域名信誉检查,实际落地为账号密码收集页。
二维码生成时的白名单前缀匹配绕过:部分平台在将 URL 生成二维码前,用 /^https:\/\/legit\.com/ 正则做前缀匹配检测。攻击者构造 https://legit.com.evil.com/ 通过检测,扫码后跳往攻击者域名;用户扫描的是平台官方页面上展示的二维码,信任度高于直接发链接。
政府与媒体域名跳转被实际利用:政府网站(商务部、地方政府)和主流媒体(央视频道站)的跳转漏洞曾被发现并确认已处于在野利用状态。此类域名在企业安全产品和用户认知中均处于高信任等级,被用作钓鱼载体时检出率低、点击率高。
Base64 编码目标 URL 绕过:部分跳转接口将目标地址以 Base64 编码后作为参数传入,服务端未对解码后的值做域名校验。攻击者将任意目标地址编码为 Base64 字符串,外观上通过了只检查可见字符的过滤层。招聘、金融类平台的移动端下载跳转和应用市场链接均曾出现此模式。
# fragment 配合伪参数绕过白名单:服务端对跳转参数做白名单校验时,若使用 # 作为分隔符或将白名单关键词作为 query string 附加在 # 之后,部分实现会将 # 之后的内容截断后再校验,导致白名单检查通过但浏览器实际解析的目标域仍为攻击者域。此类绕过属于修复不完整后的残留——厂商针对前一个跳转点修复后忽略了 # 引入的新路径。
HTML 邮件 meta refresh 触发跳转:邮件系统渲染 HTML 邮件时若未过滤 <meta http-equiv="refresh" content="0;url=..."> 标签,收件人打开邮件即自动跳转到攻击者指定页面,无需用户点击任何链接。与服务端跳转不同,此类跳转完全在客户端由浏览器渲染引擎执行,无法通过服务端白名单阻止,需在邮件渲染层做 HTML 净化。
跨平台 OAuth 中转链拼接:当平台 A 的跳转接口只允许跳转到自身白名单内的合作平台 B,而平台 B 自身存在任意跳转时,攻击者将两段跳转串联——先从平台 A 合法跳转到平台 B,再从平台 B 跳往任意目标。财付通与第三方开放平台、支付宝与合作建站服务均曾出现此类链式跳转,单一平台修复白名单并不能阻断跨平台组合。
APP 自定义协议跳转劫持:移动端平台将自定义 URI Scheme(如 mqqwpa://、itms-apps://)作为跳转目标时,若服务端跳转接口对协议类型未做限制,攻击者可将自定义协议 URL 作为 redirect 参数传入,使用户在点击后被强制唤起目标 APP 或跳入攻击者控制的应用内页面。招聘、金融类平台的移动端下载跳转接口曾被用于将用户引导至仿冒应用商店页面。
OAuth 授权缺少 state 参数绑定:部分平台实现 OAuth 快捷登录时,redirect_uri 虽在白名单之内,但授权请求中未生成或未校验 state 参数。攻击者预先构造含自身可控回调地址的授权链接,诱使已登录用户点击后,授权码随跳转发送到攻击者端,完成账号绑定劫持。此模式不依赖 redirect_uri 本身的任意跳转,漏洞根源在于 CSRF 防护缺失与 state 未绑定会话。
短信/邮件验证流程中的步骤跳过:找回密码或手机验证的流程分多个步骤,步骤编号或状态通过 URL 参数或表单字段传递,服务端仅依赖前端参数判断当前所处步骤,未在服务端维护会话状态。攻击者在收到验证码页面时直接修改参数跳至密码重置步骤,绕过验证码校验完成任意账户密码重置。此类缺陷虽不属于传统跳转漏洞,但与登录回调 URL 共享同一根因:服务端信任前端传入的流程状态。
URL 参数触发服务端请求伪造(SSRF):部分平台在图片预览、内容抓取、客服工单预览等功能中,将用户提交的 URL 交由服务端发起 HTTP 请求。攻击者提交内网 IP 段作为参数,服务端以自身身份访问内网资源并将响应返回给攻击者,将外部可达的跳转接口变成内网探测入口。与纯客户端跳转不同,此类漏洞危害扩展至服务端内网,防御需在服务端请求层实施 IP 白名单与协议过滤。
分站链式跳转绕过主域白名单:平台跳转接口将目标域限制在自身旗下域名范围内,但旗下分站自身也存在任意跳转漏洞。攻击者将两段跳转串联:先通过主跳转接口合法落地到分站,再经由分站跳往任意外部目标,白名单仅在第一跳生效,多跳路径的末端完全失控。
DOM 注入劫持 OAuth 登录链接:跳转漏洞与页面 DOM 注入组合,攻击者在落地页修改 OAuth 登录按钮的 href 或表单 action,将授权回调地址替换为自身可控端点;用户以为在正常登录,授权码实际发往攻击者服务器。此模式不依赖 redirect_uri 参数本身的任意跳转,漏洞链的入口是 URL 跳转,出口是 OAuth 授权码泄露。
跳转接口已在野被黑产批量用于账号钓鱼:部分平台的跳转参数未做任何域名校验,黑产已将带官方域名的跳转链接批量分发至 IM 私信,目标账号通过可信来源点击后直接落地钓鱼页。此类漏洞的危害不停留在理论层面,修复优先级应与已在野利用同等对待。
点击劫持与跳转漏洞组合用于广告欺诈:跳转漏洞的变现路径不限于账号钓鱼,与点击劫持配合可将用户从可信内容页引向广告落地页或恶意站点,在不窃取账号的情况下实现流量劫持变现。此类组合说明跳转漏洞在商业黑产中的利用形态多样,风险评估不应仅以"是否能钓鱼"为标准。
IM 客户端域名信任机制成为放大器:IM 客户端对发送方平台域名下的链接标注"安全"绿标,当跳转漏洞存在于该平台域名时,实际指向恶意站点的链接在聊天窗口中依然显示为安全状态。用户的点击决策依赖绿标而非链接目标,客户端的信任判断机制在此场景中反向放大了跳转漏洞的欺骗效果。
OAuth 签名验证被辅助接口绕过:平台对 OAuth callback 参数加了签名校验,但存在另一个可将任意 URL 提交并获取有效签名的接口。攻击者先用辅助接口为任意回调地址签名,再将带有效签名的恶意回调传入授权流程,签名验证形同虚设。防护措施与签名生成逻辑分属两个接口时,单独加固授权接口无法阻断绕过路径。
多跳跳转中校验链存在断点:平台对跳转参数做了编码处理并在第一跳实施域名校验,但整个跳转流程经过两个接口,第二跳接口未复用同一校验逻辑。攻击者组合两个接口完成绕过,说明多接口协作的跳转流程中,校验必须在最终执行跳转的节点落地,而非只在入口节点。
移动端接口因测试覆盖不足遗漏跳转校验:移动端跳转接口仅做了 URL 格式合法性验证,未限制目标域名,可跳转到任意外部站点。PC 端同功能接口有白名单校验,移动端接口因独立开发或测试覆盖不足而漏测,形成同功能不同端口校验不一致的常见缺陷模式。
营销邮件通道被用于嵌入跳转链接:跳转漏洞链接出现在平台官方营销邮件中,说明攻击者已将跳转接口用于邮件通道的链接替换。来自官方发件域的邮件在用户和邮件网关的信任等级均高于陌生邮件,跳转接口一旦被嵌入此类通道,钓鱼链接的触达率和点击率显著高于直接发送恶意链接。
站内跳转被滥用于平台内欺诈:平台将跳转目标限制在自身生态内部链接,通过参数编码可在内部站点间任意跳转,用于推广链接伪装绕过平台对外部跳转的检测。此类滥用不涉及跳出平台,平台的外部跳转拦截机制完全失效,说明跳转白名单的粒度需精确到具体功能路径,而非仅区分内外部域名。
OAuth 授权后 token 随二次跳转外泄:平台 OAuth 登录流程将 access_token 附加在回调 URL 的 query string 中,回调域虽在白名单之内,但该域自身存在任意跳转。授权完成后 token 随第二跳传入攻击者服务器,服务端日志即完成记录。用户全程看到的均为可信平台的域名,无任何异常提示。
第三方广告商跳转管理后台暴露:平台将广告跳转 URL 的维护权委托给第三方广告商,广告商的跳转管理接口未设置访问控制,任意用户可修改跳转目标为恶意站点。风险来源在供应链一侧,平台自身代码无缺陷,常规针对平台接口的安全检测无法发现此类问题。
登录 URL 后追加自定义跳转参数:登录页 URL 本身是合法的平台地址,攻击者在其后追加额外参数(如 reurl=、redirect_to=),服务端登录成功后读取该参数执行跳转。用户完成了正常的认证流程,反而因"成功登录"的心理放松警惕,对随后发生的跳转不产生怀疑。
returnurl/backurl 参数仅做格式检查无域名限制:大量平台的返回 URL 参数(returnurl=、backurl=)只校验 URL 格式合法性,不限制目标域名,用户认证完成后直接跳往任意外部地址。此为最普遍的实现缺陷,一行正则前缀匹配与完整域名白名单之间的差距制造了大量同类漏洞。
错误密码提示后跳转至钓鱼页:登录接口对错误密码返回错误提示,对正确密码跳转到攻击者指定地址。攻击者将钓鱼链接作为跳转目标,用户首次输错密码时在正规域内看到了错误提示,因此确认自己在正规网站上,二次输入正确密码后被跳转至仿冒页,此时信任已建立、防范完全消失。
网络运营商域名作为跳转载体:运营商(电信、移动等)站点的跳转接口未做目标域限制,由于运营商域名在安全浏览器中具有极高信任等级,带有运营商域名的钓鱼链接不触发浏览器警告,检出率接近于零。此类跳转漏洞报告时已有攻击者准备将其用于钓鱼,信任等级越高的载体域,修复优先级应越高。
被入侵的托管页面植入跳转代码:平台自身跳转接口正常,但托管于合作方的子频道页面被植入恶意跳转代码,用户访问平台官方链接后自动跳转至攻击者站点。此类攻击不经过服务端跳转接口,利用的是平台域名下的内容信任,属于供应链污染,常规接口扫描无法覆盖。
透明覆盖层实现无参数跳转:用超大透明图片或不可见 iframe 覆盖页面的可交互区域,用户点击任意位置实际触发的是覆盖层上的隐藏链接,跳转完全在客户端完成,不经过服务端任何跳转接口。此类手法规避了服务端白名单的全部防护,也无跳转参数可供检测,检测需在页面层识别非预期覆盖元素。
永久性 301 跳转被缓存持久化:站点配置了 301 永久性跳转时,浏览器将目标 URL 缓存到本地,后续访问直接使用缓存结果而不再请求服务端。攻击者利用此特性使跳转效果持续存在于已访问用户的浏览器中,且 301 跳转不携带 Referer,绕过基于来源检查的防护机制,服务端修复后客户端缓存仍需手动清除。
白名单关键词包含检测被 query 参数绕过:服务端对跳转目标 URL 做字符串包含检测,只要整个 URL 中出现白名单域名即视为合法,未限制该关键词必须出现在主机名段。攻击者将白名单域名追加为目标 URL 的查询参数(如 evil.com/path?q=legit.com),字符串包含检测通过,但浏览器实际导航至攻击者域。此类白名单实现与正则前缀匹配同属"实现粒度不足"的根因,却容易被视为独立的绕过手法而漏测。
用户生成内容字段批量嵌入平台外跳转链接:电商、社区类平台允许卖家或用户在店铺描述、个人主页等富文本字段中插入链接。平台对外部跳转链接的过滤规则存在绕过,经过特定编码或参数变形后的跳转链接可通过内容过滤并在页面渲染后正常执行跳转。此类利用不需要直接操控跳转接口,而是借助平台内容分发渠道,规模化植入后受影响页面数量极大,常规接口扫描无法覆盖。
平台自定义页面生成功能被用作跳转载体:部分平台提供用户自定义内容页面生成功能(如营销落地页、邀请函等),生成页面托管于平台官方域名下。若生成页面中的跳转链接未做目标域校验,攻击者可通过该功能在平台域名下生成含任意跳转的页面,再将该页面链接对外传播。用户点击的是平台自身域名下的页面,信任度与直接访问平台相同,实际落地却是攻击者站点。
广告商提供的跳转域本身无目标限制:平台将部分跳转逻辑委托给第三方广告服务商,广告位链接指向广告商自有跳转域。广告商跳转服务对目标 URL 无域名限制,攻击者直接构造该广告商跳转域的链接即可将用户引导至任意站点,且链接在来源页面上显示为平台内的广告位链接。此类风险来源于供应链一侧,平台自身代码无缺陷,对平台接口的安全审计无法发现。
子页面 bgurl 参数将外部内容内嵌于可信域:页面通过 bgurl 或类似参数在 iframe 内加载外部 URL 作为背景或嵌入内容,外层页面托管于平台可信域。用户浏览器地址栏显示的是平台域名,但实际渲染的内容来自攻击者控制的外部源,等效于将任意内容托管在可信域名下,为钓鱼页面提供可信来源背书。与服务端 302 跳转不同,此类攻击用户不会感知到跳转动作。
跳转漏洞在野稳定利用但厂商修复滞后:跳转漏洞首次被发现时,平台跳转接口已被钓鱼团伙长期稳定利用,存在大量受害者记录。平台在漏洞报告提交后仍长时间未完成修复,内部漏洞优先级判定机制低估了已在野利用状态的严重性。此类案例说明,漏洞的实际危害评估必须将"是否已被利用"作为独立维度,而非仅依赖技术复现评分。
IM 传播链中官方域名跳转链接绕过安全提示:IM 客户端对直接发送的陌生域名链接会触发安全警告或拦截,但对知名平台官方域名下的链接不做提示。攻击者将钓鱼目标包装为官方平台跳转参数的值,在 IM 聊天中传播时完全以正常链接形态呈现,不触发任何客户端警告,已被实际用于账号钓鱼的大规模传播。客户端的安全提示机制在此场景中形同虚设,根本原因是信任判断仅基于链接的第一级域名。
登录成功后跳转目标附带 OAuth token 外泄至第三方:OAuth 快捷登录流程完成后,平台将 access_token 或授权码拼接在回调 URL 的 query string 中一并发送。若回调目标为第三方域,token 在 HTTP 请求中明文传至第三方服务器,第三方的访问日志即完成记录。即使 redirect_uri 本身已在白名单之内,只要目标域非第一方,token 就已经超出平台控制范围;此模式不依赖 redirect_uri 的任意跳转,根因在于 token 不应出现在 URL 中。
支付平台注销接口作为跳转中转:用户点击看似正常的链接后,实际触发的是透明覆盖层;覆盖层链接指向第三方域,该域再转发至知名支付平台的注销/登出跳转接口,注销接口携带跳转参数落地至最终目标页。攻击者通过将支付平台域名嵌入跳转链中,使整条链路在用户和安全工具眼中均呈现为知名品牌地址。此类利用不针对账号凭证,主要用于广告联盟的虚假点击归因与流量变现。
钓鱼落地页模拟会话超时触发二次登录:用户在合法平台正常登录后,跳转至攻击者控制的页面,该页面复刻登录界面并提示"会话已过期,请重新登录"。用户刚在真实平台完成认证,心理上默认"当前就在该平台内",对二次登录提示不产生怀疑,二次输入的凭证直接发往攻击者服务器。此模式将跳转漏洞与社会工程串联:第一跳建立信任,第二跳完成凭证收集。
招聘平台跳转漏洞用于定向鱼叉攻击:攻击者将跳转漏洞链接嵌入仿冒招聘通知邮件,邮件标题和内容与目标公司的招聘流程高度匹配,收件人为该公司的在职员工。由于域名来自可信招聘平台,邮件网关不触发警告,员工结合邮件内容判断链接合理性后点击,落地钓鱼页收集企业内网账号。此案例说明跳转漏洞的危害评估需结合传播场景,定向投递时可信度远高于群发链接。
跳转参数编码混淆阻止用户识别目标:攻击者将跳转目标 URL 进行编码后填入参数,外观上用户即使查看地址栏也无法识别真实目标域名,仅能看到一串编码字符串。此类混淆与服务端过滤无关,纯粹针对用户的视觉识别能力,降低了在点击前发现异常的可能性。当与官方平台域名组合时,用户通常只关注到链接开头的品牌域名,不会继续解析后续参数。
官方 iframe 自适应高度将钓鱼内容嵌入可信域:平台在页面中渲染第三方或用户提交的 URL 作为 iframe 内容,且 iframe 高度随内容自动扩展至满屏。攻击者托管的仿冒页面在 iframe 内撑开至全页,用户视觉上无法区分 iframe 内容与原生页面,浏览器地址栏始终显示可信平台域名。此模式不产生跳转动作,用户感知不到任何页面切换,防御需在内容嵌入层而非跳转参数层实施限制。
跳转漏洞绕过 IM 链接安全警告被用于账号钓鱼实战:IM 客户端对未知域名链接触发安全提示,但对已知平台视频、新闻类站点的链接不做拦截。攻击者将视频平台跳转参数指向钓鱼页,在即时通讯中大量传播,链接预览显示的是正规媒体域名,点击后直接落地账号盗取页面,已有大量用户账号被此链路盗取。视频和媒体类平台的跳转接口因用户点击率高,成为黑产优先选用的传播载体。
IM 平台自身跳转接口以特殊字符绕过域名检测:IM 平台(如社交空间类站点)自身的跳转接口存在目标域限制,但攻击者在跳转 URL 中植入 #、? 等特殊字符欺骗平台对目标域的检测逻辑,实际跳转目标仍为攻击者控制的外部站点。此类漏洞的危害尤为突出:平台本身即为用户最高信任来源,跳转链接在 IM 聊天中不触发任何外链警告,传播路径完全处于用户信任圈内。
被盗账号作为跳转链接的可信传播节点:跳转钓鱼链接借助已被盗取的真实账号在论坛、贴吧、社区等平台主动传播,收件人看到的发送者是认识的用户或社区成员,而非陌生人。此类传播利用的是"来源账号可信"而非"域名可信",规避了用户对陌生链接的警惕,也使黑产能够低成本扩大钓鱼链接的到达范围,一个被盗账号即可触达其全部社交关系。
广告跳转服务参数与目标地址非唯一绑定:邮件平台将广告位链接托管于合作广告商的跳转服务域名下,跳转服务对参数与目标地址未做唯一性绑定——相同参数可对应不同目标,或参数校验宽松到不同输入可抵达相同目标。攻击者构造该广告跳转域名下的链接,在邮件收件箱界面直接呈现为来自知名平台的合法广告链接,用户收到的是真实平台发出的邮件,其中的广告链接却指向攻击者站点。
搜索引擎收录页被植入的跳转代码劫持流量:合法网站的搜索引擎收录页被第三方植入恶意跳转脚本,用户从搜索结果点击进入后立即被重定向至赌博、钓鱼等恶意站点。此类攻击发生在已被收录的合法域名下,搜索引擎结果页展示的是正规域名,用户在点击搜索结果后的跳转行为完全透明;问题根源在于网站内容被篡改,属于入侵后置入,与跳转接口参数校验缺失是不同的攻击链路,却产生了相同的用户体验——从可信入口落地恶意页面。
CSS 固定定位覆盖层注入劫持页面全区域点击:攻击者在页面中注入 CSS position:fixed 的不可见元素,设置极高 z-index 后覆盖全部可交互区域,其上绑定指向外部站点的跳转链接。用户与页面的任何交互——点击按钮、选择商品、关闭弹窗——实际触发的均是覆盖层上的隐藏链接。此类技术不使用任何 URL 跳转参数,服务端白名单校验完全无效,检测依赖对页面 DOM 中非预期覆盖元素的识别,常规接口扫描无法发现。
同平台多接口跳转组合绕过单点修复:平台同时存在多个具有跳转功能的接口,单独审查每个接口时各自的绕过手法不同。针对第一个接口的修复完成后,攻击者转向第二个接口,或将两个接口串联使用。此类模式说明跳转漏洞的修复需覆盖平台全部跳转入口,单点修复在多接口场景下留下残余攻击面,黑产会在已修复接口发现后立即转移到未修复接口继续利用。
跳转漏洞被用于挂马而非凭证钓鱼:社交平台(如社交空间类站点)的跳转接口在域名检测上存在特殊字符绕过,攻击者不以钓鱼页为最终落地目标,而是将跳转链接指向挂马站点,用户点击后触发驱动式下载完成恶意软件植入。此类利用与凭证钓鱼在技术手法上完全相同,但攻击目标从账号窃取变为端点感染;仅以"是否导致账号泄露"评估跳转漏洞严重性时,会系统性低估其在恶意软件传播场景下的危害。
XSS 与开放跳转在同一接口共存:招聘、门户类平台某些接口同时存在 XSS 和开放跳转两类漏洞,攻击者可在单次访问中分路利用:XSS 路径通过脚本注入获取当前 session cookie,跳转路径则将用户导向仿冒登录页收集明文凭证。两条攻击链共享同一可信域名和同一入口链接,用户看到的永远是官方地址;单独修复其中一类漏洞不能消除另一类的利用面,需要在同一接口上同时完成输入净化和目标域限制。
被信任合作平台本身存在跳转成为 OAuth token 实际外泄节点:平台 A 的 OAuth 回调白名单包含合作平台 B 的域名,但平台 B 自身存在任意跳转漏洞。攻击者在授权请求中将回调地址设为平台 B 的跳转接口,再在跳转参数中填入自身可控域名;平台 A 的白名单校验通过(目标在 B 的域名下),授权码落地平台 B 后立即被转发至攻击者端。此类路径与"回调域自身存在跳转"的区别在于:平台 B 是被主平台明确信任的合作方,单独审查主平台的白名单策略无法发现该风险,需要将受信任第三方的跳转安全状态纳入整体评估。
国内安全客户端绿标对运营商域名的特定信任机制:部分国内安全软件对运营商(电信、移动等)旗下域名的链接展示绿色安全标识,该标识明确传递"已验证安全"的信号。当运营商站点的跳转接口存在无域名限制漏洞时,攻击者构造的钓鱼链接在安全软件中以绿标形式呈现,用户在完全信任该信号的情况下点击。此类漏洞的危害不仅来自运营商域名本身的品牌信任,还叠加了安全工具给出的主动背书,导致实际检出率和用户警觉性双双降至极低水平。
电商平台联盟推广欺诈:商品页透明覆盖拦截点击并经支付平台注销接口完成归因:攻击者在电商店铺商品页嵌入超大透明图片覆盖全部交互区域,用户任意点击均触发覆盖层上的隐藏链接;该链接先跳往第三方域,再转发至支付平台的注销/登出跳转接口,通过支付平台的域名信誉完成推广联盟的点击归因,最终落地电商平台目标页,计入攻击者的推广佣金。整条链路中用户感知到的是正常购物行为,平台收到的是来自支付平台域名的跳转归因;此类利用不以账号窃取为目标,危害体现在商业欺诈层面,常规安全扫描因链路经过可信中间域而难以识别。
跳转参数名变体导致扫描盲区:同一跳转功能在不同平台、不同接口以截然不同的参数名暴露:origURL、go、u、reurl、redirect_to、backUrl、returnUrl 等数十种变体均曾出现在真实漏洞中。批量扫描器通常只覆盖少数高频参数名,导致同一平台在"主跳转接口"修复后,使用非标准参数名的辅助跳转接口长期存在且未被纳入测试范围。此类漏洞的修复方案应从"白名单参数名"切换为"所有参数值若经解码后为完整 URL 则统一校验目标域"。
DOM 注入劫持第三方登录按钮导致 token 随跳转外泄:攻击者利用页面存在的 DOM 注入点,在第三方登录按钮渲染之前修改 OAuth 登录链接,将跳转目标替换为自身可控端点;用户以正常流程点击"使用第三方账号登录",授权完成后 access_token 随跳转参数发往攻击者服务器。此模式的入口是 DOM 注入而非跳转参数校验缺陷,但漏洞链的出口同样是 token 外泄;单独修复跳转接口的目标域白名单无法阻断该路径,防御需在 DOM 净化层先行。
医疗、专业垂直社区跳转接口对目标域完全无校验:健康、法律、招聘等专业垂直平台的站内跳转或外链接口对传入的 URL 参数不做任何域名限制,参数后直接填写任意地址即可跳转。此类平台的用户群体通常出于专业需求访问,对"平台推荐的外部链接"信任程度高于通用社交平台;加之此类平台往往不在主要安全测试目标列表内,跳转接口缺陷长期未被覆盖,成为钓鱼攻击的低成本入口。
社区公开帖子与广告位嵌入跳转链接实现大规模不定向传播:攻击者在论坛、社区的公开帖子或店铺商品描述中植入经过编码或缩短的跳转链接,帖子被正常收录后通过搜索引擎和平台内部推荐触达海量未知用户。与 IM 私信定向投递不同,此类传播路径的受众不特定、覆盖范围以数量级计;用户在浏览内容时看到的是社区成员发布的普通链接,点击行为不经过任何确认环节。链接被移除前,每一次平台内部推荐都在延续传播效果。
广告跳转服务将彩票/游戏等高可信平台域名嵌入钓鱼链路:黑产构造含国家彩票、知名游戏平台等高信任度域名的跳转链接,再通过 IM 消息或社区帖子传播,并附上"恭喜中奖"等诱导性文案。受害者在信任域名与中奖诱导的双重驱动下点击,落地钓鱼页后输入手机号和身份证等信息完成诈骗收集。此类利用将跳转漏洞与精心设计的社会工程文案绑定,发出的链接本身来自可信平台官方域名,任何基于域名信誉的过滤机制均无效。
第三方登录组件自有域名限制被宿主页 DOM 注入绕过:QQ、微博等第三方登录组件在设计上已将跳转目标限制在合作平台域名范围内,看似形成了自身的白名单防护。但当宿主平台页面本身存在 DOM 注入点时,攻击者可在组件渲染前修改登录按钮的跳转链接,将授权回调替换为任意地址。漏洞入口在宿主页面的 DOM 可控性,而非第三方组件接口的校验缺陷,单独审计第三方组件无法发现此类路径。
旅游票务平台多处跳转接口分散于不同业务功能:旅行预订、票务查询类平台通常在机票搜索、酒店比价、广告落地等多个独立业务模块中分别实现跳转功能,各模块由不同团队开发且缺乏统一的跳转安全规范。安全测试仅覆盖主登录回调时,其余业务模块的跳转接口长期处于测试盲区;攻击者在主接口被修复后可立即切换到业务侧接口继续利用,说明跳转漏洞的修复需在全站接口层面统一落地,而非聚焦单一入口。
广告位链接使用合作广告商中间跳转域,参数与目标地址非唯一绑定:邮件平台或资讯站将广告位链接托管于广告商自有跳转域名下,跳转服务对参数与最终目标的绑定关系校验宽松,相同的参数签名可对应不同目标地址。攻击者构造该广告商域下的链接并替换目标,链接在收件人的邮件列表界面以平台官方来源展示,点击后经广告商中间域再跳往攻击者站点。由于广告商域本身在平台内具有合法来源身份,基于发件域信誉的安全过滤无法识别此类链路。
IM 平台公开关系链放大跳转链接传播半径:跳转钓鱼链接借助被盗或主动注册的账号在社区帖子、兴趣小组、公开广场等开放区域发布,内容经平台内部推荐算法分发后触达与攻击者无直接社交关系的陌生用户。帖子一旦被收录进搜索引擎,传播效果在链接被删除前持续叠加。与 IM 私信定向投递相比,此类传播不依赖社交关系信任,而是利用平台内容分发机制实现低成本大覆盖,单个发布点的影响半径以数量级计。
同一集团旗下多产品线共用跳转模块导致漏洞批量复现:大型互联网集团将跳转逻辑封装为公共模块,在主站、游戏商城、分类站等多条产品线中复用。安全研究者报告主站跳转漏洞后,集团仅对被点名的接口进行修复,其他产品线的同源代码未被纳入修复范围,漏洞继续以相同手法在姊妹站上被重复发现。此类缺陷的根因不在单一接口,而在共享代码库的安全基线;单接口修复在组织层面属于局部响应,完整修复需追溯公共模块的所有部署实例。
短链接服务作为跳转目标的二次遮蔽层:攻击者将含跳转漏洞的官方域名链接经短链接服务再次压缩,对外传播时用户看到的是短链接服务域名而非任何业务域名。用户点击后先被短链服务跳往官方平台的跳转接口,再由跳转接口落地钓鱼页,整条链路对用户不可见;即便用户意识到应检查 URL,在短链跳转阶段也无法预先看到官方平台域名,安全工具对短链接的信誉判断又与最终目标无关。此类遮蔽与参数编码混淆的区别在于:遮蔽发生在链接层,而非参数层,针对参数编码的检测逻辑完全无效。
跳转链路注入浏览器历史栈制造可信回溯路径:链式跳转中的某一中间节点指向知名可信站点(如支付平台的注销接口或账单页),该节点作为历史记录留存在浏览器中。用户感到可疑后点击"返回"键,回退到的是可信平台页面而非原始入口,进一步强化了"整条链路都在可信环境内"的错误认知。此类操控不改变最终落地页,危害在于消除用户事后验证时的怀疑,使后续仿冒操作(如索要凭证)的阻力降至最低。
同一平台被多个独立研究者在不同功能点重复发现跳转漏洞:社交、招聘、电商类平台往往在登录回调、游戏入口、广告落地、分享功能等多处独立实现跳转逻辑,各接口参数名、校验逻辑各异。同一平台被不同安全研究者在不同时期、不同功能模块多次独立报告跳转漏洞,说明平台内部缺乏统一的跳转安全基线,单次修复只能消除当次报告的接口,不能阻止同类漏洞在其他功能模块持续存在。攻击者在主接口被修复后转向次级接口,可利用窗口在各模块修复完成前长期存在。
绕过方式
| 绕过类别 | 手法 |
|---|---|
@ 分隔 | https://legit.com@evil.com/ |
| 子域名伪装 | https://legit.com.evil.com/ |
| 双重 URL 编码 | evil.com 的各字符编码为 %xx |
| 协议替换 | javascript:location='https://evil.com'(JS 上下文) |
| HTTPS→HTTP | 从 HTTPS 页面加载 HTTP 资源时不携带 Referer,可绕过来源检查 |
| 参数污染 | ?url=legit.com&url=evil.com,取数组最后一个值 |
防御控制点
- 域名白名单:跳转目标必须属于预定义的可信域名列表,使用完整域名匹配(非前缀/子串匹配)
- 相对路径:登录后跳转只允许相对路径(以
/开头),拒绝协议开头的绝对 URL - 中间确认页:跳转到外部域时显示"即将离开本站"的确认页,让用户感知跳转目标
- URL 规范化后校验:对 URL 解码、去除
@等特殊结构后再做域名匹配,防止编码绕过