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的危害性:

  • 获取Cookie - 如果没有HttpOnly则可获取Cookie 从而盗用账户身份(读取账户特有的信息/执行账户特有的操作)
    • 管理员 发起高权限操作 - 创建新账号 修改密码...
    • 普通用户 发起普通用户权限操作 - 评论、发帖、支付转账、刷量...
  • 探测内网 - 利用实时通信标准WebRTC 获取存活主机ip列表 甚至端口 进而识别服务、web系统类型与版本(如发现内网confluence系统)
  • 攻击内网 - 根据探测结果(或对所有内网ip)发起漏洞利用攻击流量(利用web系统漏洞:confluence系统命令执行等;利用常见服务漏洞:redis未授权Getshell)
  • XSStoRCE - 使用node.js作为web后端 或 基于node.js的桌面应用框架(如Electron) 都可能通过XSS实现RCE
  • XSS蠕虫 - 在社交网站上可创建蠕虫式的XSS攻击 传播速度极快 影响极大
  • 漏洞联合 - 使用XSS绕过CSRF保护机制 无交互地利用CSRF漏洞
    • 方法1 构造携带CSRFtoken的请求:使用JavaScript找到CSRFtoken并发出"合法"POST请求
    • 方法2 利用后端CSRF验证缺陷:有的anti-CSRF机制只判断Referer的值(Referer是 自身/兄弟/父子域名 则认为是合法请求)
  • 键盘记录 - 记录所有按键
  • 强制下载文件(渗透内网) - 通过社工方法进行欺骗 编造理由 使其下载并打开恶意程序("xx程序必须更新才能使用")
  • 构造钓鱼页面 - 通过社工方法进行欺骗 编造理由 窃取各种凭证("WiFi固件更新,请重新输入您的凭据以进行身份验证" "重新登录域账号")
  • 污染页面内容 - 直接修改页面内容为恶意内容. 如 广告(利用存储型XSS漏洞实现Ad-Jacking) 诋毁 等
  • 获取表单输入 - 窃取表单输入框的内容(如口令输入框)
  • 获取前端代码 - 如管理员后台系统的前端代码中 有对应的字段名 可根据代码构造请求 以构造请求 新增管理员账号
  • 重定向 - Redirecting
  • 虚拟币挖矿 - 利用javascript实现Crypto Mining
  • DOS攻击 - 利用javascript发起注销请求 使用户cookie失效从而无法登录 严重影响业务
  • DDoS攻击 - 对其他站点进行应用层DDoS攻击 如持续发送HTTP请求
  • 获取浏览器信息 - 获取浏览器名称及版本 已安装的插件及版本
  • 获取系统信息 - 系统类型 语言 屏幕分辨率
  • 获取web storage数据 - (HTML5) 通过window.localStorage()window.webStorage()访问该站点的web storage数据
  • 获取网页截图 - (HTML5)
  • 获取录音数据 - (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

其他参考 Subdomain Takeover: Basics

点击收藏 | 1 关注 | 2
  • 动动手指,沙发就是你的了!
登录 后跟帖