错误的域名服务器配置可能泄露域名相关信息
相关网址:
https://www.ietf.org/rfc/rfc1035.txt
https://resources.infosecinstitute.com/topic/dns-hacking
1 DNS Basics
DNS使用本地缓存或服务器存在的区域文件将域名转换为IP地址
zone file(区域文件)是服务器上包含不同资源记录(Resource Records (RR))条目的文件,这些记录提供了关于域的信息
1.1 解析过程
1 客户端查看本地缓存
Windows: ipconfig /displaydns
2 客户端查看本地hosts文件
3 客户端向本地域名服务器查询
3.1 本地域名服务器存在相应缓存则响应查询结果给客户端
3.2 本地域名服务器不存在相应缓存,则根据配置的查询方式进行迭代查询或递归查询,然后将结果响应给客户端
1.2 查询方式
递归查询(当服务器存在缓存信息时直接响应)
1 客户端向本地域名服务器发送请求
2 本地域名服务器向根域名服务器发送请求
3 根域名服务器向顶级域名服务器发送请求
4 顶级域名服务器向权限域名服务器发送请求
5 权限域名服务器响应结果给顶级域名服务器
6 顶级域名服务器响应结果给根域名服务器
7 根域名服务器响应结果给本地域名服务器
8 本地域名服务器响应结果给客户端
当服务器不存在相关信息时,服务器则作为客户端发送查询请求
迭代查询(本地域名服务器未存在缓存信息,否则直接响应)
1 客户端向本地域名服务器发送请求
2 本地域名服务器向根域名服务器发送请求,根域名服务器响应顶级域名服务器地址
3 本地域名服务器向顶级域名服务器发送请求,顶级域名服务器响应权限域名服务器地址
4 本地域名服务器向权限域名服务器发送请求,权限域名服务器响应结果或响应下一级域名服务器地址继续查询
5 本地域名服务器将获取的查询结果响应给客户端
这里的步骤1实际是递归查询,因为后续都是本地域名服务器代替客户端进行查询
1.3 常见工具
Windows: nslookup
Linux: nslookup dig
nslookup中Non-authoritative answer 说明当前的dns解析是从外部服务器获取的
2 Resource records and the Zone file
2.1 zone file的开头必须是SOA(Start of Authority)记录
SOA包括域的权威名称服务器和名称服务器管理员的电子邮件地址,详情见RFC1035-3.2.13
2.2 resource record分类(class),详情见RFC1035-3.2.3
TYPE | value | meaning | 说明 |
IN | 1 | the Internet | 互联网 |
CS | 2 | the CSNET class (Obsolete - used only for examples in some obsolete RFCs) | CSNET类(过时的-仅用于某些过时的rfc中的示例) |
CH | 3 | the CHAOS class | CHAOS类 |
HS | 4 | Hesiod [Dyer 87] |
|
2.3 resource record类型(type),详情见RFC1035-3.2.2
TYPE | value | meaning | 说明 |
A | 1 | a host address | 域下的主机地址 |
NS | 2 | an authoritative name server | 权威域名服务器(某个域的域名解析服务器) |
MD | 3 | a mail destination (Obsolete - use MX) | 邮件目的地(过时-使用MX) |
MF | 4 | a mail forwarder (Obsolete - use MX) | 邮件转发器(过时-使用MX) |
CNAME | 5 | the canonical name for an alias | 别名 |
SOA | 6 | marks the start of a zone of authority | 标志着一个权威区域的开始,zone file起始部分 |
MB | 7 | a mailbox domain name (EXPERIMENTAL) | 邮箱域名(实验) |
MG | 8 | a mail group member (EXPERIMENTAL) | 邮件组成员(实验) |
MR | 9 | a mail rename domain name (EXPERIMENTAL) | 邮件重命名域名(实验) |
NULL | 10 | a null RR (EXPERIMENTAL) | 空RR(实验) |
WKS | 11 | a well known service description | 众所周知的服务描述 |
PTR | 12 | a domain name pointer | 域名指针,通过ip地址反向查询域名 |
HINFO | 13 | host information | 主机信息 |
MINFO | 14 | mailbox or mail list information | 邮箱或邮件列表信息 |
MX | 15 | mail exchange | 邮件交换 |
TXT | 16 | text strings | 文本 |
2.4 QTYPE
查询的类型
TYPE | value | meaning | 说明 |
AXFR | 252 | A request for a transfer of an entire zone | 请求整个区域转移,用于信息信息 |
MAILB | 253 | A request for mailbox-related records (MB, MG or MR) | 请求邮箱相关的记录 |
MAILA | 254 | Arequest for mail agent RRs (Obsolete - see MX) | 请求邮件代理资源记录 |
* | 255 | A request for all records | 请求所有的记录 |
2.5 QCLASS
查询的类
TYPE | value | meaning | 说明 |
* | 255 | any class | 查询所有类别 |
2.6 使用(仅个人推测,有误请及时指出)
当注册域名后,需要在域名注册商网站内维护域名的各类信息,通过填写不同RR分类的信息来告知注册商相关信息
A 当前域名对应的IP地址
MX 向当前域发送邮件时,对应的邮件服务器
NS 当前域的权威域名服务器
后续访问该域内主机时,顶级域名服务器则将该权威域名服务器地址响应给客户端,客户通过该权威域名服务器查询对应的域名IP
...
最初的信息都是通过注册商进行维护的,后续可以搭建我们自己的权威域名服务器
3 DNS Lookup and Reverse DNS Lookup
3.1 使用dig进行正向查询
查询www.baidu.com
1 根域名服务器查询
# dig
2 顶级域名服务器查询(com)
# dig @e.root-servers.net. com
3 权威域名服务器查询
# dig @l.gtld-servers.net. baidu.com.
4 使用权威域名服务器进行域名查询
# dig @ns2.baidu.com. www.baidu.com
可以看出www.baidu.com是一个别名
5 使用a.shifen.com.权威域名服务器进行查询
# dig @ns2.a.shifen.com. www.a.shifen.com
6 验证查询结果
# ping www.baidu.com
3.2 使用dig进行逆向查询
反向查询本质是查询域名服务器中PTR类型的记录,因此查询并不是百分百成功
查询格式: dig [倒序ip].in-addr.arap PTR
# ping moncharsh.com
# dig 5.251.92.216.in-addr.arpa PTR
4 Understanding Wildcard Entries
4.1 WildCard
通配符条目用于为不存在的子域名提供响应
例:配置*.example.com指向example.com,此时所有不存在的example.com的子域名(如:aaa.example.com ccc.example.com)都会定向到example.com
该方式对渗透测试人员来说并不友好
4.2 Bypassing Wildcard entries
随机生成子域名,然后通过ping查看是否解析为相同ip地址,如果多数域名被解析为同一ip地址,可以判断使用了通配符条目
后续查询子域名时,如果与通配符条目ip地址不同,则说明该子域名存在
5 DNS Zone transfer
5.1 Zone transfer
一般情况,每个域存在多个权威域名服务器,构造主从关系
为了保证从服务器数据的准确性,从服务器必须查询主服务器,并在特定时间后获取最新记录。
而主服务器将向从从服务器提供它所拥有的所有信息,这就是所谓的"区域传输",即同步域内的权威域名服务器同步数据
5.2 Risk
正确配置的命名服务器只允许为来自同一域的其他名称服务器的区域传输请求提供服务。
但是,如果服务器没有正确配置,它将在不检查查询客户端的情况下处理向其发出的所有区域传输请求,这将泄漏域内所有的记录
区域传输请求使用请求类型 AXFR
5.3 fierce
fierce工具是DNS分析的最佳工具之一
# fierce --domain google.com
NS: ns3.google.com. ns2.google.com. ns1.google.com. ns4.google.com.
SOA: ns1.google.com. (216.239.32.10)
Zone: failure
Wildcard: failure
Found: 1.google.com. (172.217.160.78)
Found: about.google.com. (172.217.160.78)
Found: academico.google.com. (172.217.160.68)
Found: accounts.google.com. (216.58.200.237)
Found: admin.google.com. (172.217.24.14)
Found: ads.google.com. (216.58.200.46)
Found: alerts.google.com. (172.217.160.78)
Found: ap.google.com. (216.58.200.36)
Found: apps.google.com. (172.217.160.78)
Found: asia.google.com. (216.58.200.36)
...
请不要忽略区域传输配置的重要性!!!因为很容易暴漏其他薄弱的环节。
6 DNS Bruteforcing
如果权威域名服务器不允许区域传输,则可以通过暴力解析的方式进行域名查询
情况1
当确定域名服务器配置了通配符条目,则先确定通配符条目对应的ip,随后根据字典暴力解析,凡是与通配符条目ip不匹配的域名皆为存在的域名
情况2
当确定域名服务器未配置通配符条目,则直接根据字典进行暴力解析,所有正确解析的域名且为存在域名
fierce工具支持暴力解析