subdomain takeover
子域名劫持/接管
- 本文内容包括
- 漏洞实例
- 实例分析
- 漏洞原理
- 漏洞危害
- 测试工具
- 防御方案
漏洞实例 - 有趣的测试
声明下:已知情的测试,白帽师傅wAnyBug已于2019年3月份报告给其官方SRC 且没有做任何违规的事情!
某日,刚加上白帽师傅@wAnyBug,聊天过程可谓步步惊魂(聊天内容为点击两个url)
猜测:看到是子域名,初步感觉子域名learnt.Micro**.Com被劫持(接管)。
确认:Chrome隐身模式下访问 learnt.Micro**.Com 看到了非 微X 的内容,大致可确认是子域名劫持(接管)。
猜测:此时如果我登录相关服务"out" 并访问该子域名learnt.Micro.Com,很可能cookie不保。
确认:后来发现 微X 的登录设计为SSO(单点登录,Single Sign On),即 微X 服务统一在login..com登录。所以可以肯定,如果我登录相关服务"out"并访问该子域名learnt.Micro**.Com,则cookie可被web后端获取。
实例分析
查询该子域名的dns记录
➜ ~ nslookup learnt.Micro****.Com
Non-authoritative answer:
learnt.Micro****.Com canonical name = ldlearntest.trafficmanager.net.
ldlearntest.trafficmanager.net canonical name = subdomain-takeover-msrc.wanybug.Com.
Name: subdomain-takeover-msrc.wanybug.Com
Address: 47.52.101.203
可以得出:
- learnt.Micro**.Com CNAME ldlearntest.trafficmanager.net
- ldlearntest.trafficmanager.net CNAME subdomain-takeover-msrc.wanybug.Com
由此可以判断出 白帽师傅@wAnyBug 注册了ldlearntest.trafficmanager.net (随后确认确实如此)
注意:trafficmanager.net确实仍是"微X(中国)有限公司"的重要域名,用于Az**云服务,可以提供给用户们注册自己的云服务的子域名。格式为 xxx.trafficmanager.net
通过搜索引擎 搜索site:trafficmanager.net|trafficmanager.cn
可以看到很多云服务器的域名。
如,某酒厂的域名为 www.dawine.com 通过查询:
nslookup www.dawine.com
Non-authoritative answer:
www.dawine.com canonical name = dawinechinaweb.trafficmanager.cn.
dawinechinaweb.trafficmanager.cn canonical name = dawine1.chinacloudapp.cn.
Name: dawine1.chinacloudapp.cn
Address: 139.217.132.95
可发现其服务器使用了某云服务,并将符合自身商业名称的域名dawinerootea.trafficmanager.cn 作为 www.dawine.com 的CNAME。
漏洞原理
不做实际攻击演示,讲解原理如下:
比如A公司域名为 a.com 并使用云服务cloud.com提供服务,申请并得到了云服务主机 imA.cloud.com
A公司运维人员将 shop.a.com 的CNAME 设置为 imA.cloud.com
某天A公司的该服务因为某些原因不再使用了,于是直接停掉了云主机 imA.cloud.com (或该云主机无人管理已过期)
此时shop.a.com 的CNAME依然是 imA.cloud.com
(关键:A公司未重新设置 shop.a.com 的CNAME值)
如果攻击者w使用cloud.com的云服务并尝试申请并成功得到了云服务主机 imA.cloud.com
攻击者w将 imA.cloud.com 的web页面改为文本"hacked!"
此时访问shop.a.com 则出现 文本"hacked!"
漏洞危害
因为可执行任意javascript代码 该漏洞具有XSS的危害性:
举例如下
- 操作浏览器的存储(Storage) - 对存储数据进行增删改查
-
Cookie
- 如果没有HttpOnly
则可查看到Cookie的key和value,跨域成功则可收到cookie中的数据,从而使用其身份(获取该用户特有的信息/执行该用户特有的操作)- 管理员凭证 可发起高权限操作 - 创建新的管理员账号 修改管理员密码...
- 普通用户凭证 可发起普通用户权限操作 - 评论、发帖、转账...
localStorage
sessionStorage
indexedDB
Web SQL Database
-
- 探测内网 - 利用实时通信标准WebRTC 获取存活主机ip列表 甚至端口 进而识别服务、web应用与版本(如发现内网中的confluence、Jenkins等)
- 攻击内网 - 根据探测结果(或对所有内网ip)发起漏洞利用攻击流量(利用web系统漏洞:confluence系统命令执行等;利用常见服务漏洞:redis未授权Getshell)
- XSStoRCE - 使用node.js作为web后端 或 基于node.js的桌面应用框架(如Electron) 都可能通过XSS实现RCE
- XSS蠕虫 - 在社交网站上可创建蠕虫式的XSS攻击 传播速度极快 影响极大
- 键盘记录 - 记录按键
- 漏洞联合 - 使用XSS绕过CSRF保护机制 无交互地利用CSRF漏洞
- 1.利用自身域名的XSS漏洞绕过CSRF防御机制 - 有的anti-CSRF机制为后端判断CSRFtoken的值,使用JavaScript找到CSRFtoken参数值并构造出"合法的"GET/POST请求 全程不存在跨域问题
- 2.利用自身/兄弟/父子域名的XSS漏洞绕过CSRF防御机制 - 有的anti-CSRF机制是后端通过判断Referer的值,如果Referer的值 是自身/兄弟/父子域名下的url 就是"合法"请求
- 漏洞联合 - 通过已有的CSRF漏洞 利用self-XSS漏洞(变废为宝)
- 利用过程 - 事实上self-XSS漏洞无法直接使对方触发,然而通过已有的CSRF漏洞构造"触发该self-XSS漏洞的"请求,对方触发CSRF漏洞即触发XSS漏洞
- 获取网页截图 - (HTML5) html2canvas
- 获取前端代码 - 如 得到管理员后台系统的前端代码(可根据表单字段名构造并发出异步请求 实现新增管理员账号)
- 钓鱼 - 获取各种凭证(编造理由 "WiFi固件更新,请重新输入您的凭据以进行身份验证" "重新登录域账号")
- 钓鱼 - 自动下载文件 诱导执行可执行文件(编造理由 "xx程序必须更新才能使用")
- 修改页面内容 - 如 广告(利用存储型XSS漏洞实现Ad-Jacking) 等
- 虚拟币挖矿 - 利用javascript实现Crypto Mining
- 获取表单输入 - 窃取表单输入框的内容(如口令输入框)
- 重定向 - Redirecting
- DOS攻击 - 利用javascript发起注销请求 使用户cookie失效从而无法登录 严重影响业务
- DDoS攻击 - 对其他站点进行应用层DDoS攻击 如持续发送HTTP请求
- 获取系统和浏览器信息
- 操作系统类型、版本 浏览器类型、版本 (根据User-agent获取)
- 屏幕分辨率 (高度
window.screen.height;
宽度window.screen.width;
) - 语言
- 获取录音数据 - (HTML5) 需要授权 Recording Audio
- 获取摄像数据 - (HTML5) 需要授权 webcam
- 获取地理位置 - (HTML5) 需要授权 访问受害者的Geo-location
- 读取本地文件
- ...
可见危害很大。
另外其他配置可能会扩大危害,如A公司设置了泛解析*.a.com
都指向了 云服务提供商的某个云主机的域名。
测试方法
以下测试方法及工具仅供有授权的安全测试,或自己搭建环境进行研究,切勿用于非法用途。
- 手工
- nslookup
- 工具
- 安装
gem install aquatone
- 资产发现
aquatone-discover --domain xx.com --thread 500
- 劫持扫描
aquatone-takeover --domain xx.com --threads 500
- 安装
防御方案
- 提高资产管理能力 (避免云服务过期或被关闭,被他人"抢注")
- 可以考虑使用名称不可自定义(随机hash值)的云服务商 如
258ea2e57bca0.Acloud.com
(避免云服务过期或被关闭,被他人"抢注") - 如果被"抢注" 重新设置域名的CNAME