DNS全称Domain Name System
,它将 ithelp.ithome.com.tw
这种人们可读取的名称转换为 52.199.252.220
等数字 IP 地址,让我们在使用浏览器进入网站时,不需要记住这些冗长的数字,而是网域这种让人容易记忆的名称。这边只要先知道DNS是一种阶层式的服务且大部分公司都有自己的服务器就可以了。
DNS资讯中包含了很多有用的资讯,例如域名、子网域资讯、IP位址等等,对後续劫持或是渗透等攻击行为提供了必要的线索,而且对目标进行DNS资讯的收集通常都是被动的方式,不会影响目标也比较不会留下痕迹。
DNS需要收集的资讯:
由於DNS是整个网际网路公司业务的基础,有越来越多的公司开始自己搭建DNS服务器来做解析服务并管理公司其他子网域名,所以如果设定不当,可能将整个企业的基础业务以及网路架构对外暴露从而造成严重的资讯泄露,甚至导致企业网路被渗透。
一般用法可以直接ping该服务器的主机位置,例如直接对google的DNS服务器测试
ping 8.8.8.8
或是直接对某个网域名称
ping google.com
可以看到类似以下结果
PING google.com (216.58.200.46) 56(84) bytes of data.
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=1 ttl=54 time=57.9 ms
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=2 ttl=54 time=54.8 ms
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=3 ttl=54 time=65.4 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 54.779/59.372/65.442/4.476 ms
可以看到其实有先经过DNS解析得到IP位址後,对该主机进行封包来回测试,但ping其实不能太全面了解整个DNS解析的过程,因为就像之前提到的,DNS其实是个阶层式的服务,是经过当前网路配置的状况去一层层问到的结果,可能修改DNS服务器後再次测试又会得到不同的IP结果。不过ping最主要的功能是确认网路的可靠度,另外也可能对方主机没有回应ICMP而造成ping失败的可能性。
nslookup
可以查询域名以及对应的IP,可以不输入任何参数进入互动模式,或是给定想查询的域名nslookup google.com
可以看到查询结果
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: google.com
Address: 172.217.160.110
Name: google.com
Address: 2404:6800:4008:802::200e
因为这里参数没有给指定的DNS server,因此会透过本机当前预设的DNS server (192.168.1.1)去查询,而查询结果可以看到IP为17.217.160.110
,也可以以参数方式指定DNS server,这边以google的DNS server 8.8.8.8为例
nslookup google.com 8.8.8.8
查询结果可以看到这次是从8.8.8.8问到的结果
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.251.42.238
Name: google.com
Address: 2404:6800:4008:800::200e
这边因为可能因为有DNS load balancing为了降载,所以可能每次问到的IP都不太一致。另外值得一提的是,nslookup已经很老了,可能已经在被淘汰的边缘,之所以还要介绍他是因为windows上也还有这套工具能使用,如果是使用Linux的话,其实可以考虑另一个工具dig
。
dig
的使用跟nslookup
很像,但也提供了更多资讯,一般使用方式如下
dig google.com
或是透过@
符号来指定DNS server
dig google.com @8.8.8.8
查询结果可以分成几个区块
QUESTION SECTION
显示我们要查询的域名。ANSWER SECTION
是查询到的结果。; <<>> DiG 9.16.15-Debian <<>> google.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14099
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 176 IN A 172.217.160.78
;; Query time: 48 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 19 11:11:15 EDT 2021
;; MSG SIZE rcvd: 55
dig也可以反向用IP来查询域名,这边我们用前面解出来的172.217.160.78
当范例
dig -x 172.217.160.78
反查结果,但反查结果跟预期好像有点不太一样,这个之後有机会再说。
; <<>> DiG 9.16.15-Debian <<>> -x 172.217.160.78
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55942
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;78.160.217.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
78.160.217.172.in-addr.arpa. 69112 IN PTR tsa01s09-in-f14.1e100.net.
;; Query time: 144 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Sep 19 11:16:33 EDT 2021
;; MSG SIZE rcvd: 95
dnsenum
,顾名思义就是dns + enum,除了可以查域名之外,也可以透过字典暴力方式来找出子网域名。这边先简单用,直接输入域名,去找出相关的子域名
dnsenum google.com
查询结果,从结果可以看到有网域对应的IP位址,也列出了NS、MX等资讯,更有一些别名的纪录,都是相当重要的资讯,但後面怎麽运用这些资讯才是重点,其实有这些资讯也不只是只有攻击这个唯一的用途,事实上我们在排查网路服务相关问题时,有时候也是需要收集这些资讯的。
dnsenum VERSION:1.2.6
----- google.com -----
Host's addresses:
__________________
google.com. 20 IN A 142.251.43.14
Name Servers:
______________
ns2.google.com. 86400 IN A 216.239.34.10
ns1.google.com. 86400 IN A 216.239.32.10
ns3.google.com. 86400 IN A 216.239.36.10
ns4.google.com. 86400 IN A 216.239.38.10
Mail (MX) Servers:
___________________
alt1.aspmx.l.google.com. 293 IN A 142.250.141.26
aspmx.l.google.com. 293 IN A 108.177.97.26
alt2.aspmx.l.google.com. 293 IN A 142.250.115.26
alt4.aspmx.l.google.com. 293 IN A 142.250.152.26
alt3.aspmx.l.google.com. 293 IN A 64.233.171.26
Trying Zone Transfers and getting Bind Versions:
_________________________________________________
Trying Zone Transfer for google.com on ns2.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns1.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns3.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns4.google.com ...
AXFR record query failed: corrupt packet
Brute forcing with /usr/share/dnsenum/dns.txt:
_______________________________________________
about.google.com. 86400 IN CNAME www3.l.google.com.
www3.l.google.com. 244 IN A 172.217.160.78
accounts.google.com. 216 IN A 142.251.42.237
admin.google.com. 288 IN A 142.251.42.238
ads.google.com. 185 IN A 172.217.160.78
america.google.com. 3600 IN CNAME www3.l.google.com.
www3.l.google.com. 88 IN A 142.251.43.14
今天介绍了几个关於DNS资讯收集的工具,本来是想多写一些细节,但碍於篇幅,可能就留待之後另开篇章来做描述吧。
接续昨天的结果,范例程序码的其他部分可以不做更动, 或是把一些测试用的区段改成中文以确认编码是否成功...
今天是30天程序语言研究的第二十八天,由於最近写unix语言的东西用到很多,所以做了很多笔记,就想说...
ASI(Automatic Semicolon Insertion) 当 JavaScript 语句...
部落格的 Blueprint 和会员验证时候的做法一样 部落格页面应该列出所有文章,允许已登入的会员...
批次修改档名 在os模组中使用rename()更改档名 path = "./videos&...