massdns
来源:https://github.com/quirins/massdns
安装:首先cmake CMakeFiles.txt
,然后再make
每个参数的解释:
命令 | 含义 |
---|---|
-a | 忽略响应数据包的授权部分中的记录 |
-c | 放弃名称之前解析的次数 默认值:50 |
-e | 在其他部分中包括响应记录 |
-i | 在同一域的多个解析之间等待的时间间隔(以毫秒为单位)(预设值:200) |
-m | 加载共享模块以处理数据包 |
-n | 使用非递归查询。 对DNS缓存侦听很有用 |
-o | 不输出DNS问题 |
-p | 显示进度和剩余时间 |
-finalstats | 完成后将最终统计信息写入STDERR(标准错误信息输出) |
-q | 静音模式 |
-r | 包含DNS解析器的文本文件 |
-root | 允许以超级用户身份运行该程序。 不建议 |
-s | 设置用于解析的哈希图的大小(预设值:100000) |
-t | 要解决的记录类型(默认值:A) |
-w | 写入指定的输出文件而不是标准输出 |
run massdns
# run massdns
cat $INFILE | $MASSDNS -p -s $HASHMAPSIZE -a -c $RETRIES -o -r $RESOLVERS -t $TYPE -i $INTERVAL --finalstats - 2> >(tee $OUTBASE.massdns.log >&2) > $OUTBASE.massdns
--finalstats
是错误信息输出流,后面写入---massdns.log
,并将所有的输出写入---.massdns
unbound
config
含义,对应文件unbound/massdns.conf
,参考文章说明的很详细:
https://www.geek-share.com/detail/2664703406.html
https://sulao.cn/post/696.html
https://blog.phoenixlzx.com/2016/04/27/better-dns-with-unbound/
go get 抓包不全
go get -t github/.../@master
解决设置goproxy出现的问题:unset GOPROXY
followcnames.go
sync.WaitGroup
:https://blog.youkuaiyun.com/u013474436/article/details/88749749
主线程为了等待协程执行完毕,必须在程序中sleep
一会,但是我们无法掌控好这个时间,所以采用sync.WaitGroup
输入
- 原始域名压缩文件
- massdns扫描结果
处理过程
程序编写主要目的是找到域名对应的ip
地址,并存入文件。但是我们解析出的文件包含很多其它记录,并且cname
具有一定的特性。
- DNS解析流程:
在这里作者使用的域名解析器是unbound
-
DNS资源记录
作者也是根据这个结构进行处理数据。主要处理资源记录数据。 -
具体过程
首先将域名文件读入对应通道,并判断massdns解析结果类型,将结果存入对应的字典,分为两种:cnames
和A record
。
根据通道中的域名查询是否存在对应域名的字典,如果是A record
则直接将ip + domain
存入输出通道,否则递归查询cname
对应的A record
。层数限制是20。最终打印输出通道的结果。
grepcidr
定义:grepcidr可用于根据一个或多个过滤IP地址列表无类域间路由(CIDR)规范。 和grep一样,是用于反转匹配和从文件加载模式的选项。 grepcidr是能够有效处理大量IP和网络。grepcidr在网络软件中有无穷的用途,包括:邮件过滤和处理,网络安全,日志分析和许多自定义应用程序。
https://github.com/zzylydx/grepcidr
小结(massdns)
- 使用massdns解析域名,并提取域名对应的ip地址
- 将结果中处在黑名单的地址去掉
- 最终只提取ip地址并写成
172.67.199.188/32
这种样式,具体作用还未可知
zmap
该步骤,有三个输入文件:
- massdns的输出ip
- 该步骤的输出文件夹
- username
输出文件:
- 原始的zmap扫描结果
.zmap
- 去重后的结果:
.sortu
- 联合对应域名结果:
.joined
需要注意,zmap.conf
文件的配置,应在里面配置好扫描端口等内容,学习cut
,join
等工具的使用。
goscanner
该步骤主要分为两大部分:
tcpdump
取监测流量,并将数据写入文件.pcap
goscanner
使用zmap
步骤输出的结果作为输入,主动链接server,并获得对应的数据。
vt-request
使用VirusTotal
将对domains进行分类,该步骤中包括对上一步骤获取到数据的预处理:
- 提取tls1.3握手成功的域名
- 链接错误的域名
然后通过vt-request.py
访问每个域名,里面包含很多细节处理,如保证每个域名的最大链接次数,发生错误的一些错误提示
,这一部分以后可以重点学习使用。有关一些处理细节:backoff
等还了解不是很清楚。
数据处理的文件夹:/home/k8s/zzy/ccr/active-scans-rfc/run_scans/result/goscanner_output/top/
。
最终的域名信息结果:home/k8s/zzy/ccr/active-scans-rfc/run_scans/result/goscanner_output/top/vt_request/
注意:我在复现时,没有获得categorie
信息。目前还不知道原因。
DB(psql)
将脚本运行了一遍发现,作者的目的是将数据导入PostgreSQL数据库中,然后通过数据库的一些操作统计数据获得一些结果。主要步骤:
- 建立
tls13
数据库,并建立对应的schema
。目的将数据归类,例:alexa域下的数据都放在一个schema中。 - 建立对应的数据表,并将文件中的数据
copy
到表中。
记录一些数据库的操作:
参考博客文章:
http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html
https://www.gab.lc/articles/manage_ip_postgresql_with_ip4r/
需要添加ipv4
数据类型的扩展,具体操作在上面的第二篇文章中,需要注意要添加在新建的数据库下,首先需要修改数据库对应用户的权限。
# 服务开启、关闭、重启等操作
sudo /etc/init.d/postgresql start 开启
sudo /etc/init.d/postgresql stop 关闭
sudo /etc/init.d/postgresql restart 重启
# 链接数据库
psql -U k8s -d tls13 -h 127.0.0.1 -p 5432
# 退出命令
Ctrl d
# 复制文件内容给数据库
\copy $SCHEMA.alexa_random_sample FROM '$1' WITH CSV HEADER DELIMITER ','
机器上的数据库相关建立的表
数据库 | tls13 |
---|---|
schema | alexa,may_2019 |
table | alexa_random_sample,ipranges_v4 |
作者没有给出后续怎样对数据库查询,按我的理解应该是联合ipranges
去查询对应ip
范围的数据,这样才可以实现对这些互联网供应商的分类。
并且采取按日期归类的方法,作者的做法是将一次扫描的所有东西放在同一个schema
下,以方便后续操作。
ip_ranges
作者将每个域的ip地址也写入数据库,这样可以通过联合查询进而归类数据。
但是ip范围是怎样获得呢?还未可知。
output
我最终将测试文件全部输入到/home/k8s/zzy/ccr/active-scans-rfc/run_scans/result
,里面的文件名对应每个工具的输出,测试机器的IP:10.21.238.240