一、URL重定向概念
URL重定向是一种安全漏洞,它允许攻击者利用网站的重定向功能将用户重定向到恶意网站,这种漏洞通常发生在网站没有正确验证或者限制重定向目标URL的情况下,攻击者可以构造一个包含恶意URL的链接,当用户点击该链接,他们就会被重定向到攻击者控制的网站,这可能导致用户信息泄露,钓鱼攻击或者其他的恶意行为。
二、漏洞特征
网站可能允许用户通过参数指定重定向目标,例如:
https://www.aaa.com/login.php?url=https://www.aaa.com/admin.php
其中:301和302状态码表示重定向
301跳转是指页面永久性移走,通常叫做301跳转,也叫301重定向(转向)302重定向又称为暂时性转移,也被称为是暂时性重定向。

三、漏洞检测
当发现请求可能允许用户通过参数指定重定向目标时,例如:
https://www.aaa.com/login.php?url=https://www.aaa.com/admin.php
可以通过替换跳转的地址,来对漏洞进行测试
https://www.aaa.com/login.php?url=https://www.***.com
四、漏洞发现
常产生漏洞的功能点
1.登录跳转我认为就是常见的跳转类型,认证完成之后会跳转,所以在登录的时候多观察url参数
2.用户分享、收藏内容过后,会跳转
3.跨站点认证、授权后,会跳转
4.站内点击其他的网址链接时,会跳转
5.在一些用户交互页面也会出现跳转,如请填写对客服评价,评价成功跳转主页,填写问卷,等等业务,注意观察url。
6.业务完成后跳转这可以归结为一类跳转,比如修改密码,修改完成后跳转登陆页面,绑定银行卡,绑定成功返回银行卡充值等页面,或者说给定一个链接办理VIP,但是你需要认证身份才能访问这个业务,这个时候通常会给定一个链接,认证之后跳转到刚刚要办理VIP的页面。
五、漏洞风险:
开放重定向(Open Redirect),这是URL重定向中最危险的安全漏洞。
什么是开放重定向?
如果应用程序接收用户输入的URL参数(例如 ?next= 或 ?url=),并在未进行严格验证的情况下直接将其用于重定向目标,攻击者就可以构造一个恶意链接。
攻击场景:
- 攻击者构造链接:
https://trusted-site.com/login?redirect=https://evil-site.com/phishing - 受害者点击链接,看到受信任域名的登录页。
- 受害者登录成功后,被自动重定向到攻击者的钓鱼网站。
- 由于浏览器地址栏曾显示受信任域名,受害者容易放松警惕,在钓鱼网站上输入凭证。
危害:
- 网络钓鱼:利用受信任域名的信誉欺骗用户。
- OAuth 令牌窃取:在授权回调中劫持访问令牌。
- 恶意软件分发:将用户引导至挂马网站。
六、防御方式:
1.相对路径白名单
仅适用于站内跳转
1.1必须以/开头
1.2严禁以//开头(防止协议相对URL)。
1.3严谨包含\、@或者协议头(http:)
1.4先解码在验证
2.域内白名单
必须跳转到外部可信合作伙伴时。
2.1维护一个严格的允许域名列表 (Allowlist)。
2.2解析用户输入的 URL,提取 Host。
2.3严格匹配域名(防止 evil-trusted.com 这种子域名欺骗)。
3.间接引用映射
目标地址动态生成或者及其复杂时。
3.1不在 URL 中传递真实地址。
3.2传递随机 Token (ID)。
3.3服务端查表还原真实地址,用后即焚。
4.交互流程防御,这种是一种辅助方式。
原则就是:增加攻击成本,打破自动化的钓鱼链接。
增加确认页面:
当检测到目标地址不在白名单内(或是外部链接)时,不直接跳转。
展示提示页:“您即将离开本站,前往 [域名],是否继续?”
作用的话就是:让用户意识到自己的操作正在离开受信任的页面环境,自动阻断钓鱼页面。
总结上述防御方式就是:
默认拒绝所有用户提供的重定向地址,除非它能通过严格的相对路径检查或命中明确的域名白名单。
六、 常用参数:
- success=http://www.***.com
- next=http://www.***.com
- data=http://www.***.com
- url=http://www.***com
- qurl=http://www.***.com
- login=http://www.***.com
- logout=http://www.***.com
- ext=http://www.***.com
- clickurl=http://www.***.com
- goto=http://www.***.com
- redirect_url=http://www.***.com
- redirect=http://www.***.com
- rit_url=http://www.***.com
- forward_url=http://www.***.com
- @http://www.***.com
- forward=http://www.***.com
- pic=http://www.***.com
- callback_url=http://www.***.com
- jump=http://www.***.com
- jump_url=http://www.***.com
- click?u=http://www.***.com
- originUrl=http://www.***.com
- origin=http://www.***.com
- Url=http://www.***.com
- desturl=http://www.***.com
- dest=http://www.***.com
- u=http://www.***.com
- page=http://www.***.com
- u1=http://www.***.com
- action=http://www.***.com
- action_url=http://www.***.com
- Redirect=http://www.***.com
- sp_url=http://www.***.com
- service=http://www.***.com
- recurl=http://www.***.com
- j?url=http://www.***.com
- url=//http://www.***.com
- uri=http://www.***.com
- u=http://www.***.com
- allinurl:http://www.***.com
- q=http://www.***.com
- link=http://www.***.com
- src=http://www.***.com
- tc?src=http://www.***.com
- linkAddress=http://www.***.com
- location=http://www.***.com
- go=http://www.***.com
- burl=http://www.***.com
- request=http://www.***.com
- backurl=http://www.***.com
- RedirectUrl=http://www.***.com
- Redirect=http://www.***.com
- ReturnUrl=http://www.***.com
- useruri=http://www.***.com
- 上面都为学习网络安全的知识所用,并无违反规定。。。

5516

被折叠的 条评论
为什么被折叠?



