皮卡丘靶场解题记录-URL重定向
皮卡丘靶场解题记录-URL重定向
1、漏洞原理总结:
略,见后文
2、我的测试过程:

把url参数修改为外部url即可
成功
3、核心漏洞代码分析:
1 | if(isset($_GET['url']) && $_GET['url'] != null){ |
靶场代码如上,同样是跟前面的关卡类似的原理,总之,用户可控制的信息都不可信。
这里的url是外部传入的,可以被修改
4、实战延伸:
| 参数名 | 出现的场景 |
|---|---|
redirect / redirect_to / redirect_uri |
登录、第三方授权 |
next / return / return_url |
登录后回跳上一页 |
target / to / goto |
通用跳转 |
callback / callback_url |
OAuth 授权回调 |
jump / jumpUrl |
老系统 |
rurl / ret_url |
各种 |
常见场景:
登录后回跳:
1 | https://www.xxx.com/login?redirect_to=/user/home |
第三方登录/授权回调(危害最大):
1 | https://www.xxx.com/oauth/qq?redirect_uri=https://evil.com/callback |
如果 redirect_uri 可控,攻击者能把用户的授权码/token 转发到自己的服务器 → 直接盗号。
跳转中台:
很多大站有统一跳转接口:
1 | https://www.xxx.com/jump?u=https://evil.com |
但可能没做域名白名单
这些参数藏在业务流程里,得去测登录成功跳哪、分享链接怎么生成、第三方登录回调收不收这些地方,而不是像靶场一样扫一眼 URL 就行。
黑盒姿势:
| 方法 | 做法 |
|---|---|
| 抓登录/回跳包 | 登录、退出、分享时抓包,看 URL 带不带 redirect/next/return 参数 |
| 改参数试探 | 把参数值改成 https://evil.com (或 //evil.com),看会不会跳 |
| 测回调 | 第三方登录时改 redirect_uri,看授权码发去哪 |
| 浏览器 F12 | 看网络请求里的 Location 响应头 |
一般会拦截外域(白名单校验),但常常能绕过,绕过姿势:
| 绕过写法 | 原理 |
|---|---|
//evil.com |
省掉协议,骗过必须 http(s) 开头的校验 |
https://evil.com@xxx.com |
只查了字符串里含 xxx.com |
https://xxx.com.evil.com |
域名相似欺骗(这个不一定算绕过,看校验逻辑) |
| URL 编码 / 双重编码 | 绕过简单黑名单 |
判断标准:最终浏览器 Location 停在哪。用 Burp 看响应头 Location: 最直观。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Michele!
评论