子域名接管

dig命令

dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。
第一部分显示 dig 命令的版本和输入的参数。

1
2
3
; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> @8.8.8.8 https://mdap.yuque.com
; (1 server found)
;; global options: +cmd

第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。

1
2
3
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30105
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。

1
2
3
4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;https://mdap.yuque.com. IN A

第四部分的 "ANSWER SECTION" 是查询到的结果。

1
2
;; ANSWER SECTION:
https://mdap.yuque.com. 299 IN A 120.55.250.153

第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。

1
2
3
4
;; Query time: 143 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Sep 02 17:49:15 CST 2019
;; MSG SIZE rcvd: 67

默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型。

类型 目的
A 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
AAAA 用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。
MX 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。
NS 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
SOA SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。
TXT 可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。

查询 CNAME 类型的记录

1
dig abc.filterinto.com CNAME

从指定的 DNS 服务器上查询

1
dig @8.8.8.8 abc.filterinto.com

反向查询

1
dig -x 8.8.8.8 +short

控制显示结果

1
dig +short abc.filterinto.com

查看 TTL(Time to Live)

TTL 是 DNS 解析中很重要的指标,主要是控制 DNS 记录在 DNS 服务器上的缓存时间:

1
dig abc.filterinto.com

跟踪整个查询过程

1
dig +trace abc.filterinto.com

各个返回参数说明下:

  • status: NOERROR 表示查询没有什么错误,Query time 表示查询完成时间
  • SERVER: 10.202.72.116#53(10.202.72.116),表示本地 DNS 服务器地址和端口号
  • QUESTION SECTION 表示需要查询的内容,这里需要查询域名的 A 记录
  • ANSWER SECTION 表示查询结果,返回 A 记录的 IP 地址。600 表示本次查询缓存时间,在 600 秒本地 DNS 服务器可以直接从缓存返回结果
  • AUTHORITY SECTION 表示从那台 DNS 服务器获取到具体的 A 记录信息。记住本地 DNS 服务器只是查询,而 AUTHORITY SECTION 返回的服务器是权威 DNS 服务器,由它来维护 rss.newyingyong.cn 的域名信息。返回的 DNS 记录类型是 NS,对应的名称是 dns10.hichina.com.,dns9.hichina.com.。
  • ADDITIONAL SECTION 表示 NS 服务器对应的 IP 地址,这些 IP 地址对应的服务器安装了 BIND 软件。

接管CNAME

CNAME 的存在原因:

  • 某个域名(A)可能会下线,但是这些域名可能还是被访问到,为了避免不友好的提示,可以将这个域名 cname 到另外个域名(B),这样访问 B 相当于返回 A。
  • 很多公司项目可能有很多个域名,但是指定的 IP 地址可能每几个,一旦 IP 地址变化,可能要修改每个域名的 DNS 信息。假如这些域名 cname 到某个特定的域名,那么修改域名信息的时候就会非常方便。

github创建takeover仓库,添加index.html文件

1
2
3
<html>
<script>alert('just test for subdomain takeover')</script>
</html>

使用dig -t a/mx/soa/cname rss.newyingyong.cn进行查询是否存在CNAMECNAME的域名是否被’删除‘

子域名查找如果发现存在有未删除CNAME的子域名,可以在github的takeover仓库添加CNAME文件为未删除CNAME的子域名。

访问:https://wh0ale.github.io/takeover/ 验证漏洞。

本来这里想搭建单独的GitHub Pages,但是每一个账号只能搭建域名为 username.github.io 的GitHub Pages

每个GitHub帐号下只能有1个人主页repo,但是可以有不限数量的项目主页repo。

没有自定义域名的情况下,项目主页的访问链接只能是<username>.github.io/<projectname>

所以创建了takeove仓库,Use the master branch for Github Pages.

Your site is published at https://wh0ale.github.io/takeover/

漏洞案例:

site:pentester.land intext:takeover

https://medium.com/@sudhanshur705/how-recon-helped-me-to-to-find-a-facebook-domain-takeover-58163de0e7d5

接管NS

NS 记录(Name Server)

NS 记录和SOA记录是任何一个DNS区域都不可或缺的两条记录,NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析,SOA记录说明负责解析的DNS服务器中哪一个是主服务器。

1
dig ns wolframe.eu @8.8.8.8 +nostats
  • +nocomments – 关闭注释行
  • +noauthority – 关闭来源段
  • +noadditional – 关闭附加段
  • +nostats – 关闭统计段
  • +noanswer – 关闭结果段 (Emmm, 我想你应该不会这样)

DNS规范不要求名称服务器位于同一个域中。想象一下,这example.com是由两个名称服务器提供的:

1
2
ns.gooddomain.com
ns.baddomain.com

如果至少一个NS记录的规范域名的基本域可用于注册,则托管域名易受NS子域接管的攻击。

换句话说,如果baddomain.com不存在,攻击者可以注册并完全控制example.com(甚至其子域)。真正的问题是,这种情况会发生吗?我强烈推荐阅读Matthew Bryant的帖子,他解释了他如何使用这种方法获得子域名接管。我还强烈推荐他的名为TrustTrees的项目。它用于为任何域生成委派图。他能够使用这个工具发现更多类似的问题。

从自动化的角度来看,这个过程非常简单:

  1. 解析扫描域的所有名称服务器
  2. 检查是否有任何名称服务器可用于注册
  3. 根据上一步的结果发出警报

检查DNS回复中的唯一状态不足以指示。问题是多个服务器对给定域具有权威性。如果一个名称服务器不工作,你会得到,NOERROR因为另一台服务器工作正常。DNS解析在后台悄然进行。这就是为什么像TrustTrees这样的工具在这些类型的分析中派上用场的原因。

可用于接管的云服务

  • 亚马逊S3 - 以前简要提到了亚马逊S3。用于访问存储桶的默认基本域并不总是相同,具体取决于所使用的AWS区域。AWS文档中提供了Amazon S3基本域的完整列表。与CloudFront类似,Amazon S3允许指定备用(自定义)域名以访问存储桶的内容。
  • Heroku - Heroku是一个平台即服务提供商,可以使用简单的工作流程部署应用程序。由于需要访问应用程序,Heroku使用herokuapp.com上形成的子域公开应用程序。但是,也可以指定自定义域名以访问已部署的应用程序。
  • Shopify - Shopify提供了一种在云中创建和自定义电子商务商店的方法。访问商店的默认子域是在myshopify.com构建的。作为之前描述的服务,Shopify允许指定备用域名。值得注意的是Shopify验证了正确的CNAME记录配置。但是,此验证不是域名所有权验证。Shopify仅检查备用域的DNS区域中存在的准确CNAME记录。因此,此验证不会阻止子域名的接管。
  • GitHub - GitHub是Git的版本控制存储库。GitHub还允许使用他们的GitHub Pages项目进行免费的网络托管。此Web托管通常用于项目文档,技术博客或支持开源项目的Web页面。除github.io下的默认域名外,GitHub Pages还支持自定义域名。
  • Microsoft Azure - Microsoft Azure是一个更加突出的云提供商,类似于AWS。与上面提到的云服务相比,它不同,因为它不提供虚拟主机架构。简而言之,对于每个云服务,Azure都会创建自己的具有自己IP地址的虚拟机。因此,域名和IP地址之间的映射是明确的(一对一映射)。值得注意的是,由于这不是常规虚拟主机设置,因此不一定必须在资源设置中明确定义配置CNAME记录。Azure提供多种云服务,但本文中讨论的服务具有cloudapp.netazurewebsites.net的默认域。其文档描述了使用A或CNAME记录设置域名和Azure资源之间的链接(指向前面提到的两个域之一)。一个有趣的观察是,对于A记录,Azure使用TXT记录进行域所有权验证。但是,对于CNAME记录而言并非如此,因此即使在Microsoft Azure的情况下也可以进行子域接管。

参考:

https://0xpatrik.com/takeover-proofs/

https://www.jianshu.com/p/c7f6c7f04105

subdomain-takeover-ns

DNS(二)通过dig命令理解DNS

-------------本文结束感谢您的阅读-------------