上一章解释了为什么要进行DNS区域传输,是因为我们想要知道DNS所有的主机记录,因为知道所有的主机记录,一些Cname等记录,如果知道这些记录,我们将会知道这家公司有哪些域名解析,跑的有什么服务。那么可以做下一步的信息收集,主动的扫描发现漏洞之后进行攻击,然后进行后续所有的操作,其实DNS信息收集的阶段,有大量的工作是需要去做主机记录的收集,DNS信息收集是最主要的任务目的,上一章说的对目标服务器进行区域传输,但是目标并没有疏忽区域传输的配置,他不允许做区域传输,那么想要得到更多的主机记录,另一种最常用的办法就是做DNS字典爆破,也就是说,这边准备一个字典,里面有常用的主机记录的名称,例如:www wwww dds news 等等主机,把大量的主机名会使用到的字符串形成一个字典,用这个字典向DNS服务器发起一个字典似的暴力破解,在爆破中如果对方服务器有这样一个主机记录名称,对方会发送一个数据请求,如果没有则会返回一个错误的请求,通过这种方法可以将对方的主机记录,子域名记录,都给解析出来
字典可以自己制作,但是如果感觉麻烦的话可以使用kali已经集成的工具,他集成的DNS工具有很多种,但是建议只需要掌握一个就可以了(掌握一个命令就可以了),我们可以吧其他DNS工具使用命令的字典都拿过来集成一个自己专有的字典(每种工具都有自己工具的DNS字典),用这一个命令调用自己专有的字典,一次性就可以将主机记录都给尝试出来,这样也是完全可以的
下面是kali集成的DNS工具命令
命令1:
fierce -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist a.txt命令2:
dnsdict6 -d4 -t 16 -x sina.com命令3:
dnsenum -f dnsbig.txt -dnsserver 8.8.8.8 sina.com -o sina.xml命令4:
dnsmap sina.com -w dns.txt命令5:
dnsrecon -d sina.com --lifetime 10 -t brt -D dnsbig.txt命令6:
dnsrecon -t std -d sina.com 第一种命令:fierce,他需要指定一个DNS服务器,先使用-dnsserver指定一个DNS服务器,这个服务器可以是任意的缓存DNS服务器,例如你当前所在地址的运营商DNS服务器都可以,这里指定的是谷歌的8.8.8.8缓存DNS服务器,然后在使用-dns来指定要查的哪个域,然后再用-wordlist来指定一个DNS字典,敲回车以后就会对当前指定的域DNS服务器进行爆破
但是执行前如果没有a.txt这个字典敲回车后他也会进行操作,实践例子如下:
root@kali:~# fierce -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist a.txt
DNS Servers for sina.com.cn:
ns1.sina.com.cn
ns2.sina.com.cn
ns3.sina.com.cn
ns4.sina.com.cn
Trying zone transfer first...
Unsuccessful in zone transfer (it was worth a shot)
Okay, trying the good old fashioned way... brute force
Can't open a.txt or the default wordlist
Exiting...它先执行查询了sina.com的所有的ns记录,然后进行区域传输查询,也就是上一章提到的axfr全区域传输,这个命令已经集成了axfr命令参数,所以上一章提到的哪个dig和host可以不进行使用,直接使用fierce,他是先进行区域传输,结果传输失败就会尝试调用字典进行爆破,而现在并没有字典,我们可以查询fierce工具目录内有没有这个工具自己的字典,查询命令如下:
dpkg -L fierce 这个命令中dpkg是基于Debian发行系统中使用的包管理程序,通过-L参数列出fierce这个程序相关的在系统上面安装生成的文件目录都给显示出来,实践例子如下:
root@kali:~# dpkg -L fierce
/.
/usr
/usr/bin
/usr/bin/fierce
/usr/share
/usr/share/doc
/usr/share/doc/fierce
/usr/share/doc/fierce/changelog.Debian.gz
/usr/share/doc/fierce/copyright
/usr/share/fierce
/usr/share/fierce/hosts.txt其中这里有一个hosts.txt文件,可以怀疑他就是fierce工具中集成的字典文件,可以cat或者more一下看看这个hosts.txt文件是否是字典文件,实践例子如下:
root@kali:~# cat /usr/share/fierce/hosts.txt
0
01
ws8
ws9
wusage
wv
ww
www
www-
www-01
www-02
www-1
www-2
www-int
www0
www01
www02
...............//较多不易演示通过上方的文件可以看出,这个文件就是fierce工具内集成的DNS字典,我们就使用这个字典来进行爆破,命令如下:
fierce -dnsserver 8.8.8.8 -dns sina.com -wordlist /usr/share/fierce/hosts.txt声明一下,指定字典文件需要指定这个字典文件目录否则工具无法找到字典文件所在,在爆破期间它的主机记录,子域记录都会去尝试,例如新浪的域名www.sina.com它的下面子域记录是abc.sina.com.cn然后abc下面又是一个子域的记录,执行时也是先进行区域传输,传输不成功以后会进行字典爆破,执行结果如下:
root@kali:~# fierce -dnsserver 8.8.8.8 -dns sina.com.cn -wordlist /usr/share/fierce/hosts.txt
DNS Servers for sina.com.cn:
ns1.sina.com.cn
ns4.sina.com.cn
ns2.sina.com.cn
ns3.sina.com.cn
Trying zone transfer first...
Unsuccessful in zone transfer (it was worth a shot)
Okay, trying the good old fashioned way... brute force
Checking for wildcard DNS...
Nope. Good.
Now performing 2280 test(s)...
123.126.45.14 1.sina.com.cn
123.126.45.14 8.sina.com.cn
123.126.45.68 a.sina.com.cn
61.158.251.244 a1.sina.com.cn
61.158.251.244 a2.sina.com.cn
61.158.251.244 ad.sina.com.cn
61.158.251.244 ads.sina.com.cn查询到的较多,不易一一展示,自己动手实践吧
第二种命令:dnsdict6,原名并不叫dnsdict6,叫做thc-ipv6,这里为什么叫做dnsdict6是因为之前它叫做这个名字,kali期间移除了这个工具,现在安装上默认启动名字是atk6-dnsdict6,如果你的kali没有这个工具那么apt安装一下就可以,这里不做安装演示,这个6是表示只用来解析IPv6的域名,他也可以解析IPv4的域名只需要在后面加上-d4即可,通过-t指定的是它的线程数量 它可以并发16个线程,-x是指定使用什么级别的字典进行爆破,这个dnsdict他有好几个字典,如果执行时没有dnsdict6这个命令的信息,那么解决办法如下,先查询usr下的bin目录是否有关于dnsdict6的信息,例如下面这样:
root@kali:~# ls /usr/bin |grep dnsdi
atk6-dnsdict6查询到这个信息以后在进行输入:
ln -s /usr/bin/atk6-dnsdict6 /usr/bin/dnsdict6为什么会出现这样的问题是因为dnsdict6在版本更新中将执行名称改为atk6-dnsdict6了,下面输入的ln命令是将atk6-dnsdict6改为之前老版本时使用的执行命令dnsdict6了,当然如果你觉得麻烦可以直接使用atk6-dnsdict6也是可以的,还有一点要注意:dnsdict6软件包命不叫做dnsdict6,原名软件包叫做thc-ipv6,如果想查询这个包的信息直接用dnsdict6查询是查询不到信息的
我们可以看看这个命令的参数都有哪些,例子如下:
root@kali:~# dnsdict6
dnsdict6 v3.6 (c) 2019 by van Hauser / THC www.github.com/vanhauser-thc/thc-ipv6
Syntax: dnsdict6 [-d4] [-s|-m|-l|-x|-u] [-t THREADS] [-D] domain [dictionary-file]
Enumerates a domain for DNS entries, it uses a dictionary file if supplied
or a built-in list otherwise. This tool is based on dnsmap by gnucitizen.org.
Options:
-4 do also dump IPv4 addresses
-t NO specify the number of threads to use (default: 8, max: 32).
-D dump the selected built-in wordlist, no scanning.
-d display IPv6 information on NS and MX DNS domain information.
-e ignore no NS for domain errors
-S perform SRV service name guessing
-[smlxu] choose the dictionary size by -s(mall=100), -m(edium=1419) (DEFAULT)
-l(arge=2601), -x(treme=5886) or -u(ber=16724)-d:显示NS和MX DNS域信息上的IPv6信息
4:也显示IPv4的地址,加上这个是IPv4 IPv6都会显示
-t:是指定线程数,如果不指定线程数量它在底层默认线程数量是8,如果指定,最大线程是32
-D:是指定要使用的哪个字典,但是并不会扫描,如果要指定字典只需要在域名后面加上字典地址就可以了
-S:是指定要使用SRV服务来进行主机名称猜测,微软的SRV服务有很多域的服务,叫服务资源记录,DNS服务器的数据库支持的一种资源记录类型,它记录了哪台计算机,提供了哪个服务,都是通过SRV记录的,他是一种比较特殊的记录类型,Cname,mx等都是DNS服务器记录,但是SRV记录是标记域资源的一种专有的域名记录
-s:指的是用的小字典爆破
-m:指的是用的普通字典爆破
-l:指的是用的大字典爆破
-x:指的是用的比大字典还要再大的字典爆破
-u:指的是用的超大的字典爆破
如果不指定字典也不指定内置字典,他会默认使用其中的一个字典进行扫描,个人感觉应该是-s小字典,具体自己实践判断
如果害怕用其他字典会忽略目标服务器一部分的记录或者子域的话就用-u参数,当然自己也可以手动自己制作一个字典,只需要指定字典即可下方是命令例子:
dnsdict6 -d4 -t 16 sina.com /BigWordList.txt 这个工具运行效率很高,并且也集成了非常大的字典,并且命中率也很高,是我个人比较喜欢的工具
下面我们来看看这个命令执行结果,实践例子如下:
root@kali:~# dnsdict6 -d4 -t 16 -x sina.com
Starting DNS enumeration work on sina.com. ...
Gathering NS and MX information...
NS of sina.com. is ns4.sina.com.cn. => 121.14.1.22
NS of sina.com. is ns1.sina.com. => 114.134.80.144
NS of sina.com. is ns4.sina.com. => 123.125.29.99
NS of sina.com. is ns1.sina.com.cn. => 36.51.252.8
NS of sina.com. is ns3.sina.com. => 180.149.138.199
NS of sina.com. is ns2.sina.com. => 114.134.80.145
NS of sina.com. is ns2.sina.com.cn. => 180.149.138.199
NS of sina.com. is ns3.sina.com.cn. => 123.125.29.99
No IPv6 address for NS entries found in DNS for domain sina.com.
MX of sina.com. is freemx2.sinamail.sina.com.cn. => 123.126.45.192
MX of sina.com. is freemx3.sinamail.sina.com.cn. => 39.156.6.104
MX of sina.com. is freemx1.sinamail.sina.com.cn. => 39.156.6.104
No IPv6 address for MX entries found in DNS for domain sina.com.
Starting enumerating sina.com. - creating 16 threads for 5887 words...
Estimated time to completion: 2 to 5 minutes
03.sina.com. => 218.28.144.38
02.sina.com. => 218.28.144.38
13.sina.com. => 218.28.144.38内容较多,不易一一展示
第三种命令:dnsenum,它也需要指定一个字典参数是-f,然后指定一个DNS服务器参数是-dnsserver,然后指定需要查询的DNS服务器的域名,当然也可以将执行结果直接保存为一个文件参数是-o 它保存的文件类型只能是xml类型,执行结果如下:
root@kali:~# dnsenum -f a.txt -dnsserver 8.8.8.8 sina.com -o sina.xml
Smartmatch is experimental at /usr/bin/dnsenum line 698.
Smartmatch is experimental at /usr/bin/dnsenum line 698.
dnsenum VERSION:1.2.4
----- sina.com -----
Host's addresses:
__________________
sina.com. 59 IN A 66.102.251.33
Name Servers:
______________
ns4.sina.com. 21599 IN A 123.125.29.99
ns3.sina.com.cn. 21599 IN A 123.125.29.99
ns2.sina.com. 21599 IN A 114.134.80.145
ns1.sina.com. 21599 IN A 114.134.80.144
ns3.sina.com. 21599 IN A 180.149.138.199
ns2.sina.com.cn. 21599 IN A 180.149.138.199
ns1.sina.com.cn. 21599 IN A 36.51.252.8
ns4.sina.com.cn. 21599 IN A 121.14.1.22
Mail (MX) Servers:
___________________
freemx3.sinamail.sina.com.cn. 59 IN A 39.156.6.104
freemx1.sinamail.sina.com.cn. 59 IN A 39.156.6.104
freemx2.sinamail.sina.com.cn. 59 IN A 123.126.45.192
Trying Zone Transfers and getting Bind Versions:
_________________________________________________
Trying Zone Transfer for sina.com on ns4.sina.com ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns3.sina.com.cn ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns2.sina.com ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns1.sina.com ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns3.sina.com ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns2.sina.com.cn ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns1.sina.com.cn ...
AXFR record query failed: REFUSED
Trying Zone Transfer for sina.com on ns4.sina.com.cn ...
AXFR record query failed: REFUSED
Brute forcing with a.txt:
__________________________
Error: make sure that the file a.txt exists and has a size greater than zero.
执行上方命令也是先找字典,如果不指定路径,当然自己也可以用dpgk命令查找一下这个dnsenum这个工具自带的字典文件放在哪的
上方结果显示执行这个命令以后它也是先进行查找NS记录,同时他也查找了MX记录,查完这些之后也进行了区域传输,并且查找了DNS的Bind版本信息,这个工具将我们前几章的命令都集成在这个工具内了,查询的结果就可以通过这一个命令查询到所有的结果了,上方显示的区域传输都是失败的不允许连接,最后在尝试DNS字典进行爆破,当然他也没有找到a.txt DNS字典所在,我们可以查询一下dnsenum工具DNS字典所在,实践结果如下:
root@kali:~# dpkg -L dnsenum
/.
/usr
/usr/bin
/usr/bin/dnsenum
/usr/share
/usr/share/dnsenum
/usr/share/dnsenum/dns.txt
/usr/share/doc
/usr/share/doc/dnsenum
/usr/share/doc/dnsenum/README.md
/usr/share/doc/dnsenum/changelog.Debian.gz
/usr/share/doc/dnsenum/copyright上方能看的出有一个dns.txt文件,看名字差不多就可以判断是否是DNS字典,同样输入cat或者more进行查看
more /usr/share/dnsenum/dns.txt | grep www
www
www2
wwww
.........可以看出,这个就是dnsenum工具的DNS字典,注意:如果安装的软件包不是通过dpkg进行安装的,dpkg有可能会查不到,这时候就要用find来进行查询,当然这个查询就要慢的多了,因为他的查询方式是通过第一级目录结构逐层一级一级的查询,另外查到的路径里面必须有dnsenum的,如果没有dnsenum这个词的话他也不会查,实践查询例子:
root@kali:~# find / -name dnsenum
/usr/share/python-faraday/plugins/repo/dnsenum
/usr/share/doc/dnsenum
/usr/share/dnsenum
/usr/bin/dnsenum通过find查询到了这几个路径,我们可以通过这几个路径查找它的DNS字典,此方法或许会觉得麻烦,但是正如上方说说,如果不是dpgk安装的是通过源码等安装的,只能这样查询
指定字典实例:
root@kali:~# dnsenum -f /usr/share/dnsenum/dns.txt -dnsserver 8.8.8.8 sina.com -o sina.xml
Smartmatch is experimental at /usr/bin/dnsenum line 698.
Smartmatch is experimental at /usr/bin/dnsenum line 698.
dnsenum VERSION:1.2.4
----- sina.com -----
Host's addresses:
__________________
sina.com. 59 IN A 66.102.251.33
Name Servers:
______________
ns4.sina.com. 21269 IN A 123.125.29.99
ns3.sina.com. 21341 IN A 180.149.138.199
ns1.sina.com. 21599 IN A 114.134.80.144
ns2.sina.com. 21158 IN A 114.134.80.145
ns4.sina.com.cn. 21599 IN A 121.14.1.22
ns3.sina.com.cn. 21333 IN A 123.125.29.99
ns1.sina.com.cn. 21342 IN A 36.51.252.8内容较多,不一一演示
第四种命令:这个命令就比较简单了dnsmap先指定要查哪个域名,然后指定字典位置就可以查询,参数如下:
root@kali:~# dnsmap
dnsmap 0.30 - DNS Network Mapper by pagvac (gnucitizen.org)
usage: dnsmap [options]
options:
-w
-r
-c
-d
-i (useful if you're obtaining false positives)
e.g.:
dnsmap target-domain.foo
dnsmap target-domain.foo -w yourwordlist.txt -r /tmp/domainbf_results.txt
dnsmap target-fomain.foo -r /tmp/ -d 3000
dnsmap target-fomain.foo -r ./domainbf_results.txt-w:指定DNS字典位置
-r:指定查询的结果以常规的存储文件输出
-c:指定查询的结果以csv格式的存储文件输出
-d:设置查询延迟 毫秒单位
-i:设置查询时忽略掉的IP(当遇到虚假IP地址时很有用)
同样,执行前先查询一下DNS字典位置,查询结果如下:
root@kali:~# dpkg -L dnsmap
/.
/usr
/usr/bin
/usr/bin/dnsmap
/usr/bin/dnsmap-bulk
/usr/share
/usr/share/dnsmap
/usr/share/dnsmap/wordlist_TLAs.txt
/usr/share/doc
/usr/share/doc/dnsmap
/usr/share/doc/dnsmap/CREDITS.txt
/usr/share/doc/dnsmap/README.txt.gz
/usr/share/doc/dnsmap/TODO.txt
/usr/share/doc/dnsmap/changelog.Debian.gz
/usr/share/doc/dnsmap/changelog.gz
/usr/share/doc/dnsmap/copyright
/usr/share/doc/dnsmap/use_cases.txt这里面有几个txt格式的文件,但是看名称也能看的出wordlist就是DNS字典文件,下面来运行一下字典爆破:
root@kali:~# dnsmap sina.com -w /usr/share/dnsmap/wordlist_TLAs.txt -r dnsmap_sina.txt
dnsmap 0.30 - DNS Network Mapper by pagvac (gnucitizen.org)
[+] searching (sub)domains for sina.com using /usr/share/dnsmap/wordlist_TLAs.txt
[+] using maximum random delay of 10 millisecond(s) between requests
aat.sina.com
IP address #1: 218.28.144.38
aax.sina.com
IP address #1: 218.28.144.38
aaz.sina.com
IP address #1: 218.28.144.38
abk.sina.com
IP address #1: 218.28.144.38
abm.sina.com
IP address #1: 218.28.144.38
acc.sina.com
IP address #1: 218.28.144.38
ace.sina.com
IP address #1: 218.28.144.38
acg.sina.com
IP address #1: 218.28.144.38
aci.sina.com
IP address #1: 218.28.144.38
acj.sina.com
IP address #1: 218.28.144.38
ack.sina.com
IP address #1: 218.28.144.38由于较多,不一一展示
第五种命令:dnsrecon是侦查的意思,侦查的话也是先指定域名参数是-d,它可以指定一个超时时间,这个超时时间不是没个工具命令都有的,如果超过这个时间还没有查到就认为不存在了,参数是--lifetime这里设置的是10毫秒,-t是指定查询的强度这里设置的是brt(爆破的意思),-D是指定的DNS字典,运行时需要指定DNS字典位置,这里就不一一提供查询结果,自行动手查询,运行结果如下:
root@kali:~# dnsrecon -d sina.com --lifetime 10 -t brt -D /usr/share/dnsrecon/namelist.txt
[*] Performing host and subdomain brute force against sina.com
[!] Wildcard resolution is enabled on this domain
[!] It is resolving to 218.28.144.38
[!] All queries will resolve to this address!!
[*] Do you wish to continue? y/n
y
[*] A 13.sina.com 218.28.144.38
[*] A 02.sina.com 218.28.144.38
[*] A 12.sina.com 218.28.144.38
[*] A 14.sina.com 218.28.144.38
[*] A 01.sina.com 218.28.144.38
[*] A 03.sina.com 218.28.144.38
[*] A 11.sina.com 218.28.144.38上方只是提供的一点结果,具体需要你自己实践查看,由于字典文件也是较大,这里不做展示,上方执行时提示所有查询都将解析到218.28.144.38IP地址并提示是否执行,Y是N拒绝
第六种命令:这个dnsrecon和第五种是一样的,不同的是参数不同,第五种设置的有超时时间lifetime 10,还有查询强度也选择的暴力破解t brt和指定的爆破字典 -D wordlist
然而第六种选着的查询强度是std(标准破解方式),然而这种破解方式也是会尝试使用字典进行爆破,标准爆破方式会不如第五种brt方式快,执行结果如下:
root@kali:~# dnsrecon -t std -d sina.com -D /usr/share/dnsrecon/namelist.txt
[*] Performing General Enumeration of Domain:sina.com
[!] Wildcard resolution is enabled on this domain
[!] It is resolving to 218.28.144.38
[!] All queries will resolve to this address!!
[-] DNSSEC is not configured for sina.com
[*] SOA ns1.sina.com.cn 36.51.252.8
[*] NS ns3.sina.com 180.149.138.199
[*] Bind Version for 180.149.138.199
[*] NS ns3.sina.com.cn 123.125.29.99
[*] Bind Version for 123.125.29.99
[*] NS ns2.sina.com 114.134.80.145
[-] Recursion enabled on NS Server 114.134.80.145
[*] Bind Version for 114.134.80.145
[*] NS ns2.sina.com.cn 180.149.138.199
[*] Bind Version for 180.149.138.199
[*] NS ns1.sina.com.cn 36.51.252.8
[*] Bind Version for 36.51.252.8
[*] NS ns4.sina.com.cn 121.14.1.22上方也是一部分查询结果,不一一展示
这六种是常见的DNS 子域 主机等 爆破命令工具,这几种命令工具根据自己的使用习惯选择自己比较顺手的一种即可,无需全部掌握,DNS字典自己也可以进行收集制作,当然也可以使用工具内集成的DNS字典,自己制作的字典会比工具内集成的字典要更大,用命令工具查询时会尽最小可能忽略掉某些子域或主机
转载请注明出处!!!