开源子域名挖掘工具Aquatone:介绍和使用
功能
和无线渗透工具aircrack-ng类似,Aquatone按功能分为四个部分:aquatone-discover,aquatone-scan、aquatone-gather和aquatone-takeover,具体功能分别如下:
- aquatone-discover:使用被动收集或字典爆破方式发现子域名
- aquatone-scan:完成子域名扫描后,可扫描域名开放端口、HTTP header、HTML body、截图等信息并生成报告
- aquatone-gather:对扫描结果中的IP进行访问请求和网页截图,搜集信息
- aquatone-takeover:检测域名是否存在子域名劫持风险
工具之间能互相利用其他工具扫描生成的结果开展下一步工作。
安装
$ git clone https://github.com/michenriksen/aquatone.git
在工具目录内exe文件夹下即可找到四大功能模块的可执行文件
依赖
Linux下运行,需要Node.js和NPM包管理器(主要为实现网页截屏功能,但该功能需要运行工具的系统本身有图形桌面环境),以及较高版本的Ruby(如Kali-Rolling自带的Ruby)
可以执行以下命令安装工具依赖:
$ gem install aquatone
另外,作者表示老子不对任何在Kali以外的系统上运行出现的问题负责o(╯□╰)o所以大家还是安心在Linux下使用吧......
使用
一、子域名扫描:aquatone-discover
基本命令格式如下:
$ aquatone-discover --domain example.com
工具会自动查询目标的域名服务器并执行DNS lookup。如果这些域名服务器上的lookup失败,工具会转而使用备用的Google公共DNS服务器进行查询(fall-back)。
参数
- --threads:查询线程,默认为5
- --fallback-nameservers:手工设置备用查询域名服务器,后跟IP,多个IP用逗号分隔
$ aquatone-discover --domain example.com --fallback-nameservers 87.98.175.85,5.9.49.12
以下两个参数可以帮助规避IDS之类的防御:
- --sleep:DNS lookup间隔,单位为秒,但是使用此选项后线程数会被强制设为1
- --jitter:sleep的变化阈值,单位为百分比,可以使sleep时间在一定范围内随机化。此参数只在sleep启用的情况下生效
$ aquatone-discover --domain example.com --sleep 5 --jitter 30
API key
aquatone-discover在进行子域名挖掘时会用到一些被动收集器,其中如Riddler、PassiveTotal、VirusTotal这样的服务会要求提供API key方可使用。可以用类似如下指令录入API key:
$ aquatone-discover --set-key shodan o1hyw8pv59vSVjrZU3Qaz6ZQqgM91ihQ
所有的key都保存在以下路径: ~/aquatone/.keys.yml
。
结果
子域名挖掘过程结束后,工具会在 ~/aquatone/<域名>
文件夹下创建hosts.txt
文件,内容为发现的子域名及其对应IP:
example.com,93.184.216.34
www.example.com,93.184.216.34
secret.example.com,93.184.216.36
cdn.example.com,192.0.2.42
...
此外,工具还会同时生成以json格式保存了相同内容的hosts.json
文件,aquatone-scan和aquatone-gather可以直接使用这一文件。
二、端口扫描:aquatone-scan
命令基本格式与上面类似
$ aquatone-scan --domain example.com
--domain
选项会使工具自动寻找子域名挖掘过程中生成的hosts.json
文件。
端口指定
aquatone-scan默认扫描的端口为80、443、8000、8080。可以使用--ports参数手工指定:
$ aquatone-scan --domain example.com --ports 80,443,3000,8080
工具还设置了一些典型的端口组合供快捷使用:
- small: 80, 443
- medium: 80, 443, 8000, 8080, 8443
- large: 80, 81, 443, 591, 2082, 2095, 2096, 3000, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888, 55672
- huge: 80, 81, 300, 443, 591, 593, 832, 981, 1010, 1311, 2082, 2095, 2096, 2480, 3000, 3128, 3333, 4243, 4567, 4711, 4712, 4993, 5000, 5104, 5108, 5280, 5281, 5800, 6543, 7000, 7396, 7474, 8000, 8001, 8008, 8014, 8042, 8069, 8080, 8081, 8083, 8088, 8090, 8091, 8118, 8123, 8172, 8222, 8243, 8280, 8281, 8333, 8337, 8443, 8500, 8834, 8880, 8888, 8983, 9000, 9043, 9060, 9080, 9090, 9091, 9200, 9443, 9800, 9981, 11371, 12443, 16080, 18091, 18092, 20720, 55672
用法如下:
$ aquatone-scan --domain example.com --ports large
参数
和aquatone-discovery大同小异
- --threads:扫描线程,默认为5
以下两个参数可以帮助规避IDS之类的防御: - --sleep:DNS lookup间隔,单位为秒,但是使用此选项后线程数会被强制设为1
- --jitter:sleep的变化阈值,单位为百分比,可以使sleep时间在一定范围内随机化。此参数只在sleep启用的情况下生效
扫描结果
扫描结果会保存在 ~/aquatone/<域名>/urls.txt
文件中,文件内容如下:
http://example.com/
https://example.com/
http://www.example.com/
https://www.example.com/
http://secret.example.com:8001/
https://secret.example.com:8443/
http://cdn.example.com/
https://cdn.example.com/
...
可以使用EyeWitness等工具加载查看
工具同时还会生成 open_ports.txt
文件,记录了IP和其对应开放的端口,用逗号分隔:
93.184.216.34,80,443
93.184.216.34,80
93.184.216.36,80,443,8443
192.0.2.42,80,8080
...
三、信息搜集:aquatone-gather
该工具能利用之前的扫描结果,获取各种网络服务对应的HTTP响应Header和HTML Body,以及直接对相应网页进行网页截图。网页截图使用 Nightmare.js Node.js库实现,如果系统中没有安装,该库会被自动安装。
$ aquatone-gather --domain example.com
类似aquatone-scan,aquatone-gather自动寻找对应域名的hosts.json
和open_ports.txt
文件,对每个域名的每个IP地址都会进行请求和截图,以保证全面覆盖。
参数
和aquatone-discovery大同小异
- --threads:扫描线程,默认为5
以下两个参数可以帮助规避IDS之类的防御: - --sleep:DNS lookup间隔,单位为秒,但是使用此选项后线程数会被强制设为1
- --jitter:sleep的变化阈值,单位为百分比,可以使sleep时间在一定范围内随机化。此参数只在sleep启用的情况下生效
结果
aquatone-gather完成扫描之后,会在 ~/aquatone/<域名>/
文件夹中创建以下文件夹,分别包含搜集到的不同信息文件:
-
headers/
:包含每个网页HTTP Response Header的txt文件 -
html/
:包含每个网页的HTML Body的txt文件 -
screenshots/
: 每个网页的PNG格式截图 -
report/
根据上述信息生成的HTML格式的简易报告
四、子域名劫持:aquatone-takeover
当一家公司将一个子域名分配给第三方服务提供商,但在停用之后忘了移除DNS配置之时,攻击者可以通过注册相同的服务提供商并获取这一子域名所有权,从而形成劫持。aquatone-takeover可以在aquatone-discover扫描获得的域名列表中寻找可能存在子域名劫持风险的域名:
$ aquatone-takeover --domain example.com
aquatone-takeover能够检测25种不同服务提供商可能存在的子域名劫持,包括GitHub Pages, Heroku, Amazon S3, Desk和WPEngine。
结果
工具会在 ~/aquatone/<域名>/
文件夹创建文件 takeovers.json
,其中会有域名可能存在的子域名劫持风险描述:
{
"shop.example.com": {
"service": "Shopify",
"service_website": "https://www.shopify.com/",
"description": "Ecommerce platform",
"resource": {
"type": "CNAME",
"value": "shops.myshopify.com"
}
},
"help.example.com": {
"service": "Desk",
"service_website": "https://www.desk.com/",
"description": "Customer service and helpdesk ticket software",
"resource": {
"type": "CNAME",
"value": "example.desk.com"
}
},
...
}