今天学习了下子域名接管漏洞,通过该漏洞可以接管目标子域名,让其显示我设置的任意页面,造成的危害,主要用于网络钓鱼,包括但不限于伪造钓鱼页面,还可以盗取 Cookie,伪造电子邮件等,具体风险可参考文章:
https://0xpatrik.com/subdomain-takeover/
接下来以实战的方式讲解造成这个漏洞的原因,首先在我的域名管理平台,给我域名 blog.xazlsec.com
设置一个 cname 记录:
接下来可以使用浏览器访问域名:
http://blog.xazlsec.com/
出现这个页面说明该域名解析已经生效,但是未配置网站,需要在 github 上进行操作, 创建网站项目并绑定域名,具体操作如下:
1、创建一个测试项目
2、新建的项目没有文件,可以创建一个文件内容为 Test by Xazlsec
的 index.html
3、打开 Settings
,然后点击 Code and automation
下的 Pages
功能,并选择 Source 为 main:
点击保存之后,可以在 Custom domain处
选择自己的域名填入:
保存成功之后,就可以访问域名来查看 github 上的内容:
那么有人开始疑问,这跟子域名接管有啥关系?假如我不想用这个网站了,直接在 github 上把这个项目删除,但是 cname 记录没有一起删掉,会发生什么?
不知道的话,可以测试一下,当我删除新建的项目之后,打开域名,又出现了最开始没有配置时的页面,无论是谁,都可以在自己的 github 创建项目,在最后填写域名 blog.xazlsec.com
,让其指向你的项目,从而实现子域名接管。
到这里,子域名接管的原理就应该知道了,因为域名曾经为了实现某个功能,设置了 cname 的记录,但是,当该功能下线后,忘记删除对应的 cname 记录,从而导致漏洞的出现。
我测试了大概一百个网站 cname 到 github.io 的网站,其中有 10 个网站访问出现 404,经最终测试,有三个域名可以实现接管,这么算下来有百分之三的概率成功。
以上是一个子域名接管的案例,有一个不错的项目,专门检测这类问题,应用场景不光是 github,还有其他平台:
https://github.com/jakejarvis/subtake
不同服务的利用方式,可以查看下面项目:
https://github.com/EdOverflow/can-i-take-over-xyz
除了这种利用知名服务的方式,假如我们 cname 指向的是自己的某个域名,比如 test.com
,而这个域名,我们用来一年,后来没有需求,就没有续费,这个时候,如果有人抢注了这个域名,那么是不是也可以实现子域名接管的效果?
至于如何在实际的赏金行动中发现存在问题的子域名,其实也不难,需要收集足够多的子域名并且解析出 cname 记录,然后批量检测这些 cname 指向是否存在问题即可。