how hacking in DNS

简介:
在渗透测试的过程中遇到一台DNS服务器时, 先检查DNS服务版本是否存在CVE漏洞, 然后进行DNS信息的枚举, 本文总结已有的DNS信息枚举方法、工具, 后续会探讨工具的原理、对工具的性能效果等进行对比。

状态: 总结工具使用方法。

目录

  • DNS介绍
  • 工具

DNS介绍

DNS(Domain Name System, 域名系统)服务用来进行域名和IP地址之间的映射, DNS默认使用TCP和UDP的53端口, 每一级域名的长度限制是63个字符, 域名总长度不能超过253个字符。DNS记录包括Nameserver(NS)、Mail Exchanger(MX)、Start of Authority(SOA)、TXT等。

查找子域名的方法

  • 搜索引擎查找
  • 爆破子域名的A记录
  • 区域传送漏洞

工具

  • Dig
  • Nslookup
  • Fierce
  • Dnstracer
  • Dnsrecon
  • Dnsmap
  • Dnsenum

dig

dig是一款灵活、易用、功能强大、支持指定DNS服务器及批量查询的域名查询工具。dig向DNS服务器提交查询并整理展示查询结果。dig默认使用/etc/resolv.conf文件查询指定域名的A、NS记录。

实战

1.不指定参数时, dig将查询指定域名的A记录

1
$ dig baidu.com

2.指定参数简化输出

  • +nocmd: 从结果中移除+cmd部分的输出
  • +noall: 从结果中移除额外的头部、flags、查询时间、消息大小等信息
  • +answer: 返回查询结果的信息
    1
    $ dig +nocmd baidu.com <record> +noall +answer

3.区域传送攻击

1
2
$ dig axfr @<nameserver> target
$ dig +nocmd axfr @nsztm1.digi.ninja zonetransfer.me +noall +answer

nslookup

一款古老但强大的域名查询工具。具有交互、非交互两种模式,默认查询A记录。

实战

1.不指定参数时, nslookup将查询指定域名的A记录(IP地址)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 无参数
$ nslookup beisen.com
Server: 10.129.1.130
Address: 10.129.1.130#53

Name: beisen.com
Address: 47.96.7.24


$ nslookup
> server <dnsserver>
Default server: <dnsserver>
Address: <dnsserver>#53
> <target IP>

2.指定查询类型

1
2
3
4
5
$ nslookup -query=A baidu.com
$ nslookup -query=NS baidu.com
$ nslookup -query=MX baidu.com
$ nslookup -query=SOA baidu.com
$ nslookup -query=TXT baidu.com

3.查询所有的dns记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ nslookup -query=ANY baidu.com
Server: 192.168.99.1
Address: 192.168.99.1#53

Non-authoritative answer:
baidu.com
origin = dns.baidu.com
mail addr = sa.baidu.com
serial = 2012140912
refresh = 300
retry = 300
expire = 2592000
minimum = 7200
baidu.com mail exchanger = 20 mx1.baidu.com.
baidu.com mail exchanger = 20 jpmx.baidu.com.
baidu.com mail exchanger = 10 mx.maillb.baidu.com.
baidu.com mail exchanger = 15 mx.n.shifen.com.
baidu.com mail exchanger = 20 mx50.baidu.com.
Name: baidu.com
Address: 123.125.114.144
baidu.com text = "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM"
baidu.com text = "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com a mx ptr -all"
baidu.com nameserver = ns7.baidu.com.
baidu.com nameserver = dns.baidu.com.
baidu.com nameserver = ns2.baidu.com.
baidu.com nameserver = ns4.baidu.com.
baidu.com nameserver = ns3.baidu.com.
Name: baidu.com
Address: 220.181.38.148

Authoritative answers can be found from:

Fierce

Fierce是一款具有区域传送漏洞检测、字典爆破子域名、反查IP段、查指定域名对应IP附近IP对应的域名信息等功能的的多线程工具。Fierce可尝试建立HTTP连接以确定子域名是否存在,该功能较耗资源。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# fierce (C) Copywrite 2006,2007 - By RSnake at http://ha.ckers.org/fierce/
# 使用命令: fierce [-dns example.com] [OPTIONS]
Options:
-connect [header.txt] 对非RFC1918地址进行HTTP连接(耗时长、流量大),默认返回服务器的响应头部。可通过文件指定HTTP请求头的Host信息,如:fierce -dns example.com -connect headers.txt
-delay <number> 指定两次查询之间的时间间隔
-dns <domain> 指定查询的域名
-dnsfile <dnsfile.txt> 用文件指定反向查询的DNS服务器列表
-dnsserver <dnsserver> 指定用来初始化SOA查询的DNS服务器。(仅用于出初始化,后续查询将使用目标的DNS服务器)
-file <domain.txt> 将结果输出至文件
-fulloutput 与-connect结合,输出服务器返回的所有信息
-help 打印帮助信息
-nopattern 不适用搜索模式查找主机。(此参数暂时没有用明白)
-range <1.1.1.1/24> 对内部IP范围做IP反查(此参数尚未用明白)。必须与dnsserver参数配合,指定内部DNS服务器,如: fierce -range 111.222.333.0-255 -dnsserver ns1.example.com
-search <Search list> 指定其他的域,在其他的域内进行查找(此参数没有用明白),如: fierce -dns examplecompany.com -search corpcompany,blahcompany
-tcptimeout <number> 指定查询的超时时间
-threads [number] 指定扫描的线程数,默认单线程
-traverse [number] 指定扫描的上下IP范围,默认扫描上下5各个。
-version 打印fierce版本
-wide 扫描入口IP地址的C段。产生大流量、会收集到更多信息.
-wordlist <sub.txt> 使用指定的字典进行子域名爆破

实践

1.爆破子域名使用该命令爆破子域名时, Fierce将按顺序进行以下检测:

  • 查询ziroom.com的DNS服务器
  • 检测DNS服务器上是否存在区域传送漏洞
  • 检查指定的域名是否存在泛解析
  • 用自带字典爆破子域名
    1
    $ fierce -dns ziroom.com

疑问 判断泛解析的方法有哪些?

2.指定字典爆破子域名

1
$ fierce -dns ziroom.com -wordlist subziroom.txt

3.查指定域名对应的IP段附近的域名信息

1
$ fierce -dns ziroom.com -traverse

4.查指定域名所在C段IP对应的域名信息

1
$ fierce -dns ziroom.com -wide

5.多线程、自定义超时时间

1
2
# 通过threads、tcptimeout、delay可调整扫描参数, 提高效率
$ fierce -dns ziroom.com -threads 10 -tcptimeout 1 -delay 1

Dnsenum

一款由perl编写的查询各种DNS记录、检测区域传送漏洞、子域名爆破等且支持多线程、自定义DNS服务器、结果可导入其他工具的DNS信息收集工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
dnsenum.pl [Options] <domain>
注意: 爆破开关参数-f是可选的,需要指定字典文件

一般选项:
--dnsserver <server> 使用指定的DNS服务器进行A、NS、MX记录查询
--enum 快捷选项,类似于:--threads 5 -s 15 -w.
-h, --help 显示帮助信息
--noreverse 不进行反向查询
--nocolor 输出结果不显示颜色
--private 将私有IP展示并保存到domain_ips.txt文件中
--subfile <file> 将有效的子域名写入到指定的文件中
-t, --timeout <value> 设定TCP、UDP的连接超时值(默认10秒,此选项在网络状况不好或者超好的情况下可以使用)
--threads <value> 指定执行不同查询使用的线程数
-v, --verbose 输出详细结果(输出所有的)

谷歌爬取选项(因为我现在连接不了google,所以先忽略):
-p, --pages <value> 指定爬取谷歌搜索结果的前多少页, 默认为前5页。如果要设置该参数, 必须设置-s参数
-s, --scrap <value> 从谷歌爬取的子域名数量最多多少个, 默认为最多15个

爆破选项:
-f, --file <file> 指定子域名字典文件进行爆破
-u, --update<a|g|r|z> 用有效的子域名更新-f指定的子域名文件
-a (all) 使用所有的结果(有效的、google抓取的、反向查询的、空间传送的)更子域名字典文件
-g 使用Google抓取的结果更新指定的文件
-r 使用反向查询的结果更新指定的文件
-z 使用空间传送的结果更新指定的文件
-r, --recursion 对所有爆破到的有NS记录的子域进行递归查询

whois网络范围选项:
-d, --delay <value> 设置两个whois查询之间的间隔,默认为3秒(此选项的目的在于调整发包速率,保证工具运行在最稳定的状态)
-w, --whois 在C段上执行whois查询 **警告**: 此选项生成大量的数据并需要大量的事件来执行反向查询

反向查询选项:
-e, --exclude<regexp> 从反向查找的结果中排除正则中指定的PTR记录,此选项在针对无效主机名时有用

输出选项:
-o --output <file> 输出为XML格式的文件,可以被导入到MagicTree工具中

实践

1.默认查询: 将分别查询A、NS、MX记录, 检测区域传送攻击

1
$ dnsenum beisen.com

2.指定DNS服务器

1
$ dnsenum -dnsserver 10.10.10.123 10.10.10.123

3.爆破子域名

1
$ dnsenum 10.10.10.123 -file /opt/subbrute/names.txt

Dnsrecon

Carlos Perez在2006年编写了该工具, 用于查询DNS记录(A, NS, SOA and MX)、所有NS服务器的区域传送漏洞检测、爆破子域名(A记录)、检查泛解析等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ dnsrecom --help
NAME
dnsrecon - DNS Enumueration and Scanning Tool

SYNOPSIS
dnsrecon <options>

OPTION
-h, --help 打印帮助信息并退出
-d, --domain <domain> target-待枚举的域名
-r, --range <range> 需要反查爆破的IP列表, 格式: (first-last) or in (range/bitmask).
-n, --name_server <name> 指定使用的DNS服务器域名或IP, 如果不指定, 将使用target的SOA记录地址
-D, --dictionary <file> 指定爆破子域名使用的字典(建议使用绝对路径)
-f 过滤爆破结果Filter out of Brute Force Domain lookup records that resolve to the wildcard defined IP Address when saving records.
-t, --type <types> 指定进行枚举的类型:
std 枚举通用DNS记录, 包括: SOA, NS, A, AAAA, MX and SRV if AXRF on the NS Servers fail.
rvl 反查给定的CIDR IP段
brt 使用给定的字典枚举子域名
srv 枚举SRV记录
axfr 检查所有NS服务器上的区域传送漏洞
goo 在google上查找子域名和hosts
bing 在bing上查找子域名和hosts
crt 对子域名进行crt.sh搜索

实战

1.直接查询

1
$ dnsrecon -d baidu.com

2.指定NS服务器

1
$ dnsrecon -d baidu.com -n 8.8.8.8

3.指定NS服务器并执行子域名爆破

1
$ dnsrecon -d baidu.com -n 8.8.8.8 -D /opt/subbrute/names.txt

参考连接

DNS Enumeration Techniques in Linux
4 Ways to DNS Enumeration
dnsenum Package Description
DNS Enumeration with Metasploit
How to gather dns information ?
IP, DNS & Domain Enumeration Cheatsheet
A penetration tester’s guide to subdomain enumeration
A quick look at ENUM mapping telephone numbers to DNS
DNS Toolbox: How to Perform a Full DNS Enumeration and Domain Research
Subdomains Enumeration Cheat Sheet
DNS Reconnaissance – DNSRecon

owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%