
FestIN——强大的S3存储桶发现与内容探测工具FestIn 是一款从域名出发,发现开放S3存储桶的工具。
它执行大量测试并从以下来源收集信息:
市面上有很多用于枚举和发现S3存储桶的S3工具。有些非常优秀,但没有一个具备 FestIn 所拥有的完整功能列表。
FestIn 的主要优势如下:
需要Python 3.8或以上版本!
$ pip install festin
$ festin -h
$ docker run --rm -it cr0hn/festin -h
$ festin -h
usage: __main__.py [-h] [--version] [-f FILE_DOMAINS] [-w] [-c CONCURRENCY] [--no-links] [-T HTTP_TIMEOUT] [-M HTTP_MAX_RECURSION] [-dr DOMAIN_REGEX] [-rr RESULT_FILE] [-rd DISCOVERED_DOMAINS] [-ra RAW_DISCOVERED_DOMAINS]
[--tor] [--debug] [--no-print] [-q] [--index] [--index-server INDEX_SERVER] [-dn] [-ds DNS_RESOLVER]
[domains [domains ...]]
Festin - 强大的S3存储桶发现与内容探测工具
位置参数:
domains
可选参数:
-h, --help 显示此帮助信息并退出
--version 显示版本
-f FILE_DOMAINS, --file-domains FILE_DOMAINS
包含域名的文件
-w, --watch 监控由'-f'选项指定的域名文件中的新域名
-c CONCURRENCY, --concurrency CONCURRENCY
最大并发数
HTTP探测:
--no-links 不提取网站链接
-T HTTP_TIMEOUT, --http-timeout HTTP_TIMEOUT
设置HTTP连接超时时间
-M HTTP_MAX_RECURSION, --http-max-recursion HTTP_MAX_RECURSION
跟踪链接时的最大递归深度
-dr DOMAIN_REGEX, --domain-regex DOMAIN_REGEX
仅跟踪与此正则表达式匹配的域名
结果:
-rr RESULT_FILE, --result-file RESULT_FILE
结果文件
-rd DISCOVERED_DOMAINS, --discovered-domains DISCOVERED_DOMAINS
用于存储经过过滤后新发现的域名的文件名
-ra RAW_DISCOVERED_DOMAINS, --raw-discovered-domains RAW_DISCOVERED_DOMAINS
用于存储所有未经过滤的域名的文件名
连接性:
--tor 使用Tor作为代理
显示选项:
--debug 启用调试模式
--no-print 不在屏幕上打印结果
-q, --quiet 使用静默模式
Redis搜索:
--index 下载文档并索引到Redis
--index-server INDEX_SERVER
Redis搜索服务器,默认值:redis://localhost:6379
DNS选项:
-dn, --no-dnsdiscover 不跟踪DNS CNAME
-ds DNS_RESOLVER, --dns-resolver DNS_RESOLVER
逗号分隔的自定义域名服务器
默认情况下,FestIn 接受一个起始域名作为命令行参数:
> festin mydomain.com
但您也可以设置一个包含域名列表的外部文件:
> cat domains.txt
domain1.com
domain2.com
domain3.com
> festin -f domains.txt
FestIn 对一个域名执行大量测试。每个测试都是并发进行的。默认并发数为 5。如果您想增加并发测试数量,可以设置 -c 选项。
> festin -c 10 mydomain.com
请注意并发测试的数量,否则可能会在某些网站引发 "警报"。
FestIn 内置了一个小型爬虫,用于发现指向S3存储桶的链接。爬虫接受以下选项:
-T 或 --http-timeout):配置HTTP连接超时时间。如果要分析的域名的网站速度较慢,建议增加此值。默认超时时间为 5秒。-H 或 --http-max-recursion):此值设置了爬取递归的深度限制。否则,FestIn 会扫描整个互联网。默认值为 3。这意味着只会跟踪:domain1.com -> [链接] -> domain2.com -> [链接] -> domain3.com -> [链接] -> 达到最大递归深度。停止。-dr 或 --domain-regex):设置此选项可将爬虫限制在与该正则表达式匹配的域名上。示例:
> echo "cdn" > blacklist.txt
> echo "photos" >> blacklist.txt
> festin -T 20 -M 8 -B blacklist.txt -dr .mydomain. mydomain.com
注意:-dr(或 --domain-regex)只接受有效的 POSIX 正则表达式。
*mydomain.com* -> 不是有效的 POSIX 正则表达式
.mydomain\.com. -> 是有效的 POSIX 正则表达式
当 FestIn 运行时,它会发现大量有用的信息。不仅关于S3存储桶,还包括我们可以执行的其他探测。例如:
在使用 FestIn 之后,我们可以将发现的信息(域名、链接、资源、其他存储桶…)作为其他工具(如 nmap)的输入。
因此,FestIn 提供了3种不同的模式来存储发现的信息,并且可以结合使用:
FestIn 结果文件(-rr 或 --result-file):此文件包含每行一个JSON,表示找到的存储桶。每个JSON包括:源域名、存储桶名称以及存储桶中的对象列表。-rd 或 --discovered-domains):此文件包含每行一个域名。这些域名由爬虫、DNS或S3探测发现,但仅存储与用户及内部过滤器匹配的域名。-ra 或 --raw-discovered-domains):此文件包含 FestIn 发现的所有域名(每行一个),不经过任何过滤。此选项适用于后续处理和分析。示例:
> festin -rr festin.results -rd discovered-domains.txt -ra raw-domains.txt mydomain.txt
并与Nmap配合:
> festin -rd domains.txt && nmap -Pn -A -iL domains.txt -oN nmap-domains.txt
FestIn 内置了 --tor 选项。使用此参数时需要有一个本地Tor代理运行在 127.0.0.1 的 9050 端口。
> tor &
> festin --tor mydomain.com
FestIn 执行的某些测试涉及DNS。它支持以下选项:
-dn 或 --no-dnsdiscover)-ds 或 --dns-resolver):设置自定义DNS服务器。如果计划执行大量测试,建议使用与浏览器不同的DNS服务器。示例:
> festin -ds 8.8.8.8 mydomain.com
FestIn 不仅能发现开放的S3存储桶。它还可以下载所有内容并将其存入全文搜索引擎。这意味着您可以对存储桶的内容执行全文查询!
FestIn 使用开源项目 Redis Search 作为全文引擎。
此功能有两个选项:
--index):要启用对搜索引擎的索引,必须设置此标志。--index-server):仅当您的服务器运行在不同的IP/端口(不同于 localhost:6379)时才需要设置此选项。示例:
> docker run --rm -p 6700:6379 redislabs/redisearch:latest -d
> festin --index --index-server redis://127.0.0.1:6700 mydomain.com
注意:`--index-server` 选项必须以 **redis://** 开头。
有时我们不想停止 FestIn,而是希望在有新域名需要检查或任何外部工具发现新域名时反复启动它。
FestIn 支持监控模式。这意味着 FestIn 将启动并监听新域名。向 FestIn “发送”新域名的方式是通过域名文件。它会监视此文件的变化。
此功能对于将 FestIn 与其他工具(如 dnsrecon)结合非常有用。
示例:
> festin --watch -f domains.txt
在另一个终端中,我们可以写入:
> echo "my-second-domain.com" >> domains.txt
> echo "another-domain.com" >> domains.txt
添加到 domains.txt 的每个新域名都会唤醒 FestIn。
使用DnsRecon
本示例选择的域名是 target.com。
> dnsrecon -d target.com -t crt -c target.com.csv
通过此命令,我们将发现与target.com相关的其他域名。这将有助于最大化我们的成功机会。
> tail -n +2 target.com.csv | sort -u | cut -d "," -f 2 >> target.com.domains
通过此命令,我们生成一个每行一个域名的文件。这是 FestIn 需要的输入。
> festin -f target.com.domains -c 5 -rr target.com.result.json --tor -ds 212.166.64.1 >target.com.stdout 2>target.com.stderr
在此示例中,生成的结果文件包括:
为了简化多个域名的处理,我们提供了一个简单的脚本 examples/loop.sh 来自动化此过程。
将FestIn与DnsRecon结果一起使用
针对 target.com 以默认选项运行,并将结果保存到target.com.result文件:
> festin target.com -rr target.com.result.json
> festin target.com -c 5 -rr target.com.result.json --tor -ds 212.166.64.1
问:AWS封禁了我的IP 答:
当您对AWS S3执行大量测试时,AWS会将您的IP列入黑名单。之后每次您尝试使用 FestIn 或浏览器访问任何S3存储桶都会被阻止。