使用ZDNS爆破子域名

ZDNS

ZDNS是ZMAP Project工具集中的一员,能够实现高速DNS查询。

一个简单的列子:

echo "www.sec.kim" | zdns A

将会输出:

{
	"name": "www.sec.kim",
	"class": "IN",
	"status": "NOERROR",
	"timestamp": "2019-07-17T23:58:20+08:00",
	"data": {
		"answers": [{
			"ttl": 610,
			"type": "A",
			"class": "IN",
			"name": "www.sec.kim",
			"answer": "47.99.132.220"
		}],
		"additionals": [],
		"authorities": [],
		"protocol": "udp",
		"flags": {
			"response": true,
			"opcode": 0,
			"authoritative": false,
			"truncated": false,
			"recursion_desired": true,
			"recursion_available": true,
			"authenticated": false,
			"checking_disabled": false,
			"error_code": 0
		}
	}
}

安装方法

假设Golang环境已经安装完成,并且配置好了环境变量:

> echo $GOPATH
/root/go

> go version
go version go1.12.7 linux/amd64

# 环境变量设置:https://golang.org/wiki/SettingGOPATH

使用go get下载zdns:

> go get github.com/zmap/zdns/zdns

# 如果长时间未响应,说明需要翻墙,这里以SS为例:
# export http_proxy="http://127.0.0.1:1080"
# export https_proxy="http://127.0.0.1:1080"

切换到zdns目录后使用make命令安装:

> cd $GOPATH/src/github.com/zmap/zdns/zdns
> make

# 如果出现错误,如"unrecognized import path xxx"
# 说明有依赖库未安装,使用go get xxx安装后,即可继续使用make安装zdns

添加至环境变量:

> echo "export PATH=$PATH:$GOPATH/src/github.com/zmap/zdns/zdns" >> ~/.bashrc
> source ~/.bashrc

使用zdns:

> zdns
FATA[0000] No lookup module specified. Valid modules: DS, CDS, AAAA, SPF, CAA, SOA, DNSKEY, TLSA, NSLOOKUP, AXFR, SRV, PTR, ALOOKUP, DMARC, A, CNAME, MXLOOKUP, ANY, CDNSKEY, NS, MX, TXT

批量解析域名

假设我们用来爆破子域名,并且准备了一个子域名字典,如何批量判断子域名是否已经解析?

使用cat打开字典,awk拼接字典和域名:

> cat test.txt |awk '{print $1".jd.com"}'
zzzo.jd.com
zzzp.jd.com
zzzq.jd.com
zzzr.jd.com

使用zdns解析,grep筛选:

> cat test.txt|awk '{print $1".jd.com"}'|zdns A|grep '"NOERROR"'
{"name":"a.jd.com","class":"IN","status":"NOERROR","timestamp":"2019-07-18T00:55:02+08:00","data":{"answers":[{"ttl":5,"type":"CNAME","class":"IN","name":"a.jd.com","answer":"a.jd.com.gslb.qianxun.com."},{"ttl":5,"type":"A","class":"IN","name":"a.jd.com.gslb.qianxun.com","answer":"106.39.167.232"}],"additionals":[],"authorities":[],"protocol":"udp","flags":{"response":true,"opcode":0,"authoritative":false,"truncated":false,"recursion_desired":true,"recursion_available":true,"authenticated":false,"checking_disabled":false,"error_code":0}}}

当然zdns还支持-output-file参数,将结果导出为文件,之后再使用其他方式深度处理解析结果。

grep还有很多玩法,如果解析结果内容差异不大,grep就可以满足很多需求。

性能

最后说说性能,由于Golang先天的并发优势,所以zdns基本上速度没得说。

经过测试,跟自己以前Python aiodns写的异步dns解析脚本速度相当。

Python脚本的可操作性更高,但也只限于Python内,需要什么都得自己写。

而zdns的开箱即用可以让你把精力放在更好的处理这些数据和其他有意义的事情上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注