ccr/active-scans-rfc/(复现过程)

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解析结果类型,将结果存入对应的字典,分为两种:cnamesA 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文件的配置,应在里面配置好扫描端口等内容,学习cutjoin等工具的使用。

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
schemaalexa,may_2019
tablealexa_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值