子域名接管漏洞

一、子域名接管漏洞

子域名接管是注册不存在的域名以获得对另一个域的控制权的过程,常出现在CNAME记录中。
此过程最常见的情况如下

1.域名(例如,sub.example.com)将CNAME记录用于另一个域(例如,sub.example.com CNAME anotherdomain.com)。
2.在某个时间点,anotherdomain.com到期并可供任何人注册。
3.由于未从example.com DNS区域删除CNAME记录,因此注册anotherdomain.com的任何人都可以完全控制sub.example.com,直到存在DNS记录。

二、 漏洞危害

Cookie窃取

浏览器实施了很多安全策略从而保证用户不受恶意网站伤害,其中包括同源策略等内容,浏览器主要安全职责之一就是保护已经存在的Cookie,由于虽然HTTP是无状态协议,但是为了方便用户登录,所以会采用Cookie充当登录令牌,浏览器识别过后验证用户身份,而Cookie可以跨子域共享,例如当网站使用基于Cookie的单点登录系统时,用户可以使用一个子域登录,并且在各种子域中共享相同的会话令牌,设置常规Cookie的语法如下:

HTTP/1.1 200 OK
Set-Cookie: name=value

如果这个Cookie是由example.com所在的web服务器发出的,那么只有这个服务器才可以访问到这个Cookie,但是可以通过以下方式为通配符域发布Cookie:

HTTP/1.1 200 OK
Set-Cookie: name=value; domain=example.com

这样Cookie可以存在于对example.com的HTTP请求中,也可以包含在任何其他子域里面(例如:subdomain.example.com),这样导致使用子域名接管来进行攻击,例如某个特定的域使用Cookie用于通配符域,那么如果有一个子域遭受到攻击者子域接管,如果用户访问了该子域,Cookie会随HTTP请求自动发送,这样会导致HttpOnly cookie被绕过

电子邮件

当可以进行CNAME子域接管的时候。攻击者可以将MX设置为任意Web服务器,这会允许接收电子邮件到某个子域中,攻击者通常会使用欺骗Return-Path header的方法接收电子邮件的回复。在网络钓鱼攻击中经常大范围使用,同时,由于SPF将配置存储在DNS TXT记录中,当子域被接管的时候,攻击者同样可以控制TXT 记录,就可以绕过SPF检查来发送邮件

Rojan Rijal曾发现了Uber基于SendGrid服务的某个可劫持子域名,之后,利用该子域名,他成功拦截了Uber内部的公司电邮通信,获取了Uber官方$10,000美金的奖励。

漏洞详情(内附POC视频):https://www.arneswinnen.net/2017/06/authentication-bypass-on-ubers-sso-via-subdomain-takeover/

网络钓鱼

由于攻击者对相应子域有控制权限,他可以构造钓鱼页面来进行网络钓鱼攻击,例如一个银行的某个子域存在接管风险时,攻击者可以通过伪造表单来诱骗用户输入银行卡号、密码等敏感信息

CORS跨域资源共享

跨域资源共享,Cross-Origin Resource Sharing (CORS), 允许 Web 应用服务器进行跨域的网页访问控制。在Web应用创建的某个域中,按照一组规则来允许某些网站可以访问提取包括认证数据在内的数据信息。以某些子域名是可信域名的前提下,一些Web应用还允许子域名执行跨域的HTTP请求。当你挖掘子域名劫持漏洞时,可以留意一下COSR头信息,在BurpSuite Pro专业版中就有这个检测功能,另外可以看看Web应用是否将子域名列入了白名单,这些设置都可能实现对Web授权用户的数据窃取。

Oauth 授权白名单化

与跨域资源共享,Oauth 授权过程同样具备一个白名单机制,藉此,Web开发者可以指定指定哪个回调URIs是可以接受的。这里的风险在于,当存在劫持漏洞的子域名被列入这个白名单中时,攻击者可以在Oauth授权过程中把用户会话重定向到先前那个存在劫持漏洞的子域名中,以此窃取用户的
Oauth 授权信息。

内容安全策略(Content-Security Policies)

内容安全策略是Web应用信任的另一个主机列表,CSP的目的在于限制哪些主机可以在应用中执行客户端代码。如果希望尽量减少跨站脚本的影响,这种方式非常有用。如果你可以劫持控制的子域名包含在白名单中,你就可以绕过CSP限制,在Web应用中执行恶意的客户端代码。

<pre>curl -sI https://hackerone.com | grep -i "content-security-policy"

content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.co

m; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestor

s 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profi

le-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 's

elf' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;

style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598

点击劫持(ClickJacking)

在browser-security-whitepaper中提到,在X-Frame-Options标头中,IE、Edge和Safari都支持ALLOW-FROM uri机制,表示该页面可以在指定来源的 frame 中展示,也就是说,如果你可劫持控制的子域名在该机制的白名单中,那么就可以在目标网页应用中构建欺骗页面,执行点击劫持(ClickJacking)攻击。

密码管理器的密码信息泄露

某些密码管理器,如LastPass会在一些主网站所属的子域名网站中执行自动密码填充功能,这相当于让网站设置了一个包含明文密码的非httponly类cookie,可以方便子域名劫持之后的深入利用。

这种情况下的子域名,并不属于目标网站所有,但却是用来运行目标网站的网页内容的。也就是说,如目标网站网页内容中某个资源需要从外部导入的第三方资源,举例来说,像js文件一样,那么,攻击者就可以通过JavaScript的Blob对象类型进行导入,从而声明对目标网站相关子域名的控制权限。

这种在网页页面的主机劫持可以导致存储型跨站漏洞,攻击者可以针对目标网站页面,利用这种模式来加载任意的客户端代码。我在此提出这种威胁,就是希望我们不要把想像力只限制在子域名身上,还可以延伸到代码审查和目标网站的主机映射等方面。

三、漏洞发现

可以通过ARL资产灯塔等资产扫描工具
也可以通过github上的一些脚本
比如Oneforall的一个单独模块,Subdomain-Takeover
https://github.com/Echocipher/Subdomain-Takeover

我习惯用ARL资产灯塔,收集资产的时候顺便看看CNAME记录的另一个域是否过期。
image

Subdomain-Takeover是一个命令行的工具
image

参考,侵删
https://www.jianshu.com/p/c7f6c7f04105
https://blog.csdn.net/xuandao_ahfengren/article/details/85922143

posted @   LinkPoc  阅读(779)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示