云安全 - 子域名takeover漏洞原理分析与防御(以某厂为例)
arr0w1 WEB安全 10065浏览 · 2019-04-07 12:46

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

其他参考 Subdomain Takeover: Basics

0 条评论
某人
表情
可输入 255