OSCP | 第七章 主动信息收集 - DNS
DNS 枚举
域名系统(DNS)是互联网上最关键的系统之一,是一个分布式数据库,负责将用户友好的域名转换为IP地址。
与DNS服务器交互
每个域都可以使用不同类型的DNS记录。一些最常见的DNS记录类型包括:
NS-nemeserver:记录包含托管域DNS记录的权威服务器的名称。
A-也被称为主机记录,“A记录”包含一个主机名(如www.megacorpone.com)的IP地址。
MX-邮件交换记录包含负责处理该域的电子邮件的服务器的名称。一个域可以包含多个MX记录。
PTR-指针记录用于反向查找区域,并用于查找与IP地址关联的记录。
CNAME-规范名称记录用于为其他主机记录创建别名。
TXT-Text 记录可以包含任何任意数据,并可用于各种目的,如域所有权验证。
kali@kali:~$ host www.megacorpone.com
www.megacorpone.com has address 38.100.193.76
kali@kali:~$ host -t mx megacorpone.com
megacorpone.com mail is handled by 10 fb.mail.gandi.net.
megacorpone.com mail is handled by 50 mail.megacorpone.com.
megacorpone.com mail is handled by 60 mail2.megacorpone.com.
megacorpone.com mail is handled by 20 spool.mail.gandi.net.
kali@kali:~$ host -t txt megacorpone.com
megacorpone.com descriptive text "Try Harder"
自动查找
现在我们有了来自 megacorpone.com域的一些初始数据,我们可以继续使用额外的DNS查询来发现属于同一域的更多主机名和IP地址。
kali@kali:~$ host www.megacorpone.com
www.megacorpone.com has address 38.100.193.76
现在,让我们看看 megacorpone.com 是否有一个主机名为“ idnotexist ”的服务器。请注意以下查询输出之间的差异:
kali@kali:~$ host idontexist.megacorpone.com
Host idontexist.megacorpone.com not found: 3(NXDOMAIN)
这样是可以枚举一些DNS服务器的,但是还是不够自动化。我们可以通过字典,用bash脚本进行枚举。
kali@kali:~$ cat list.txt
www
ftp
owa
proxy
router
kali@kali:~$ for ip in $(cat list.txt); do host $ip.megacorpone.com; done
www.megacorpone.com has address 38.100.193.76
Host ftp.megacorpone.com not found: 3(NXDOMAIN)
mail.megacorpone.com has address 38.100.193.84
Host owa.megacorpone.com not found: 3(NXDOMAIN)
Host proxy.megacorpone.com not found: 3(NXDOMAIN)
router.megacorpone.com has address 38.100.193.71
这种字典都是自行创建,局限性还是比较大。我们可以下载这个字典
sudo apt isntall seclists # 这个字典里面有很多不同领域范围的字典
当然我们可以通过一个ip来枚举子域名,我们也可以用单个子域名来爆破ip
kali@kali:~$ for ip in $(seq 50 100); do host 38.100.193.$ip; done | grep -v "not fou
nd"
69.193.100.38.in-addr.arpa domain name pointer beta.megacorpone.com.
70.193.100.38.in-addr.arpa domain name pointer ns1.megacorpone.com.
72.193.100.38.in-addr.arpa domain name pointer admin.megacorpone.com.
73.193.100.38.in-addr.arpa domain name pointer mail2.megacorpone.com.
76.193.100.38.in-addr.arpa domain name pointer www.megacorpone.com.
77.193.100.38.in-addr.arpa domain name pointer sjk.megacorpone.com.
...
DNS区域传输
区域传输基本上是在相关DNS服务器之间的数据库复制,其中区域文件从主DNS服务器复制到从服务器。该区域文件包含为该区域配置的所有DNS名称的列表。区域传输应该只允许到授权的从DNS服务器,但许多管理员错误地配置了他们的DNS服务器,在这种情况下,导致任何一台主机都可以跟这台DNS服务器进行数据库同步。
这相当于交给黑客公司网络布局。服务器的所有名称、地址和功能都可以暴露于窥探之下。
我们利用区域传输配置不当,利用进行通过与 NS服务器 进行区域传输。目的就是为了找出更多可以渗透的子域名。比暴力枚举更省时,更节省资源。
一个成功的区域传输并不会直接导致网络入侵,尽管它确实促进了这个过程。
进行区域传输,是为了列出当前域中的所有主机记录,然后可以推断出目标在网络上提供了什么服务。
下面我们就来说一下区域传输技术:
委托
现在我们有一个域 example.com,我们现在想使用一个子域名 test1.example.com。让test.example.com自己有一个域区。
test1.example.com由 example.com域委派并在它自己的区域中管理。但是,example.com区域需要包含几个资源记录以提供委派信息,该信息参考了对于委派的 test1.example.com子域具有绝对权威的 DNS 服务器。
如果 test2.example.com在 example.com区域内,则就是 example.com不对该子域使用委派方式。
区域复制和区域传输
DNS主从复制,就是将主DNS服务器的解析库复制传送至从DNS服务器,进而从服务器就可以进行正向、反向解析了。
从服务器向主服务器查询更新数据,保证数据一致性,此为区域传送。
DNS区域传送有两种方式
axfr:完全区域传送
ixfr:增量区域传送
当一个新的DNS服务器添加到区域中并配置为从DNS服务器时,它则会执行完全区域传送,在主DNS服务器上获取完整的资源记录副本;(复制)
同时,为了保证数据同步,主域名服务器有更新时也会及时通知辅助域名服务器从而进行更新(增量区域传送)。(更新)
通常来讲,DNS的查询用的是UDP53,区域传输使用的TCP53
先查看一下 sina.com 的 NS (托管域DNS记录的权威服务器的名称)
尝试一下区域传输 但是被拒绝了
@ns2.sina.com:提供数据的服务器
sina.com:第二个sina.com 是想要传输的数据的关键字。
axfr:区域传输的选项
这条命令就是:从ns2.sina.com 传输关于sina.com的DNS记录
有需要的师傅可以在这些网站补一下基础知识:
用host命令语法来展示区域传输
host -l <domain name> <dns server address>
如果是成功的区域传输 会展现出子域名
kali@kali:~$ host -l megacorpone.com ns2.megacorpone.com
Using domain server:
Name: ns2.megacorpone.com
Address: 38.100.193.80#53
Aliases:
megacorpone.com name server ns1.megacorpone.com.
megacorpone.com name server ns2.megacorpone.com.
megacorpone.com name server ns3.megacorpone.com.
admin.megacorpone.com has address 38.100.193.83
beta.megacorpone.com has address 38.100.193.88
fs1.megacorpone.com has address 38.100.193.82
intranet.megacorpone.com has address 38.100.193.87
mail.megacorpone.com has address 38.100.193.84
mail2.megacorpone.com has address 38.100.193.73
ns1.megacorpone.com has address 38.100.193.70
Kali相关的工具
在KaliLinux中有几个工具可以自动进行DNS枚举。两个值得注意的例子是DNSRecon和DNSenum,它们有一些有用的选项,我们将在下面的章节中探讨。
DNSRecon
DNSRecon是一个用Python编写的高级的现代DNS枚举脚本。
使用 -d 参数去指定一个域名,-t参数去指定枚举的类型
成功的话会出现这样的输出
kali@kali:~$ dnsrecon -d megacorpone.com -t axfr
[*] Testing NS Servers for Zone Transfer
[*] Checking for Zone Transfer for megacorpone.com name servers
[*] Resolving SOA Record
[+] SOA ns1.megacorpone.com 38.100.193.70
[*] Resolving NS Records
[*] NS Servers found:
[*] NS ns1.megacorpone.com 38.100.193.70
[*] NS ns2.megacorpone.com 38.100.193.80
[*] NS ns3.megacorpone.com 38.100.193.90
[*] Removing any duplicate NS server IP Addresses...
[*]
[*] Trying NS server 38.100.193.80
[+] 38.100.193.80 Has port 53 TCP Open
[+] Zone Transfer was successful!!
[*] NS ns1.megacorpone.com 38.100.193.70
[*] NS ns2.megacorpone.com 38.100.193.80
[*] NS ns3.megacorpone.com 38.100.193.90
[*] MX @.megacorpone.com spool.mail.gandi.net 217.70.178.1
[*] A admin.megacorpone.com 38.100.193.83
[*] A fs1.megacorpone.com 38.100.193.82
[*] A www2.megacorpone.com 38.100.193.79
[*] A test.megacorpone.com 38.100.193.67
[*] A ns3.megacorpone.com 38.100.193.90
...
[*]
[*] Trying NS server 38.100.193.70
[+] 38.100.193.70 Has port 53 TCP Open
[-] Zone Transfer Failed!
[-] No answer or RRset not for qname
[*]
[*] Trying NS server 38.100.193.90
[+] 38.100.193.90 Has port 53 TCP Open
[-] Zone Transfer Failed!
[-] No answer or RRset not for qname
可以通过字典来枚举 就是用 -D 参数来指定字典
kali@kali:~$ dnsrecon -d megacorpone.com -D ~/list.txt -t brt
[*] Performing host and subdomain brute force against megacorpone.com
[*] A router.megacorpone.com 38.100.193.71
[*] A www.megacorpone.com 38.100.193.76
[*] A mail.megacorpone.com 38.100.193.84
[+] 3 Records Found
DNSenum
DNSEnum是另一个流行的DNS枚举工具
DNSenum <Domain-name>
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)