
## `FestIN`——强大的S3存储桶发现与内容探测工具
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [什么是FestIn](#什么是festin)
- [为什么选择FestIn](#为什么选择festin)
- [安装](#安装)
- [使用Python](#使用python)
- [使用Docker](#使用docker)
- [完整选项](#完整选项)
- [用法](#用法)
- [配置搜索域名](#配置搜索域名)
- [并发](#并发)
- [HTTP爬取配置](#http爬取配置)
- [管理结果](#管理结果)
- [代理使用](#代理使用)
- [DNS选项](#dns选项)
- [全文搜索支持](#全文搜索支持)
- [作为服务运行(监控模式)](#作为服务运行监控模式)
- [示例:结合FestIn与DnsRecon](#示例结合festin与dnsrecon)
- [步骤1 - 使用所需选项对目标域名运行dnsrecon并保存输出](#步骤1---使用所需选项对目标域名运行dnsrecon并保存输出)
- [步骤2 - 准备上一步生成的文件以供FestIn使用](#步骤2---准备上一步生成的文件以供festin使用)
- [步骤3 - 使用所需选项运行FestIn并保存输出](#步骤3---使用所需选项运行festin并保存输出)
- [针对target.com运行,使用tor代理,并发数为5,DNS为212.166.64.1解析CNAME,结果保存到target.com.result文件:](#针对targetcom运行使用tor代理并发数为5dns为212166641解析cname结果保存到targetcomresult文件)
- [常见问题解答](#常见问题解答)
- [谁在使用FestIn](#谁在使用festin)
- [MrLooquer](#mrlooquer)
- [许可证](#许可证)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
## 什么是FestIn
`FestIn` 是一款从域名出发,发现开放S3存储桶的工具。
它执行大量测试并从以下来源收集信息:
- DNS
- 网页(爬虫)
- S3存储桶本身(如S3重定向)
## 为什么选择FestIn
市面上有很多用于枚举和发现S3存储桶的S3工具。有些非常优秀,但没有一个具备 `FestIn` 所拥有的完整功能列表。
`FestIn` 的主要优势如下:
- **多种技术**用于发现存储桶:爬取、DNS爬取以及S3响应分析。
- 支持**代理**来隧道化请求。
- **无需** AWS **凭证**。
- 可与**任何兼容S3的提供商**配合使用,不仅限于AWS。
- 允许配置**自定义DNS服务器**。
- 集成高性能**HTTP爬虫**。
- **递归**搜索,并接收三个引擎的反馈:DNS爬虫发现的域名会发送给S3和HTTP爬虫分析器,同样S3和爬虫发现的也会互相反馈。
- 支持**监控模式**,实时监听新域名。
- 将所有发现的域名保存到单独文件中,以便进一步分析。
- 允许**下载存储桶对象**,并自动将其放入**全文搜索引擎**(Redis Search),对对象内容建立索引,支持强大的后续搜索。
- 可以将搜索**限定**在特定域名。
## 安装
### 使用Python
需要Python 3.8或以上版本!
```bash
$ pip install festin
$ festin -h
```
### 使用Docker
```bash
$ docker run --rm -it cr0hn/festin -h
```
## 完整选项
```bash
$ 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` 接受一个起始域名作为命令行参数:
```bash
> festin mydomain.com
```
但您也可以设置一个包含域名列表的外部文件:
```bash
> cat domains.txt
domain1.com
domain2.com
domain3.com
> festin -f domains.txt
```
### 并发
`FestIn` 对一个域名执行大量测试。每个测试都是并发进行的。默认并发数为 *5*。如果您想增加并发测试数量,可以设置 `-c` 选项。
```bash
> festin -c 10 mydomain.com
```
请注意并发测试的数量,否则可能会在某些网站引发 "警报"。
### HTTP爬取配置
`FestIn` 内置了一个小型爬虫,用于发现指向S3存储桶的链接。爬虫接受以下选项:
- 超时时间(`-T` 或 `--http-timeout`):配置HTTP连接超时时间。如果要分析的域名的网站速度较慢,建议增加此值。默认超时时间为 **5秒**。
- 最大递归深度(`-H` 或 `--http-max-recursion`):此值设置了爬取递归的深度限制。否则,`FestIn` 会扫描整个互联网。默认值为 3。这意味着只会跟踪:domain1.com -> [链接] -> domain2.com -> [链接] -> domain3.com -> [链接] -> 达到最大递归深度。停止。
- 限制域名(`-dr` 或 `--domain-regex`):设置此选项可将爬虫限制在与该正则表达式匹配的域名上。
- 黑名单(-B):配置一个黑名单词汇文件。任何与黑名单中某个词匹配的域名都会被跳过。
- 白名单(-W):配置一个白名单词汇文件。任何与白名单中某个词**不**匹配的域名都会被跳过。
示例:
```bash
> 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` 发现的所有域名(每行一个),不经过任何过滤。此选项适用于后续处理和分析。
示例:
```bash
> festin -rr festin.results -rd discovered-domains.txt -ra raw-domains.txt mydomain.txt
```
并与Nmap配合:
```bash
> festin -rd domains.txt && nmap -Pn -A -iL domains.txt -oN nmap-domains.txt
```
### 代理使用
`FestIn` 内置了 `--tor` 选项。使用此参数时需要有一个本地Tor代理运行在 *127.0.0.1* 的 *9050* 端口。
```bash
> tor &
> festin --tor mydomain.com
```
### DNS选项
`FestIn` 执行的某些测试涉及DNS。它支持以下选项:
- 禁用DNS发现(`-dn` 或 `--no-dnsdiscover`)
- 自定义DNS服务器(`-ds` 或 `--dns-resolver`):设置自定义DNS服务器。如果计划执行大量测试,建议使用与浏览器不同的DNS服务器。
示例:
```bash
> festin -ds 8.8.8.8 mydomain.com
```
### 全文搜索支持
`FestIn` 不仅能发现开放的S3存储桶。它还可以下载所有内容并将其存入全文搜索引擎。**这意味着您可以对存储桶的内容执行全文查询!**
`FestIn` 使用开源项目 [Redis Search](https://oss.redislabs.com/redisearch/) 作为全文引擎。
此功能有两个选项:
- 启用索引(`--index`):要启用对搜索引擎的索引,必须设置此标志。
- Redis搜索配置(`--index-server`):仅当您的服务器运行在不同的IP/端口(不同于 *localhost:6379*)时才需要设置此选项。
示例:
```bash
> 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*)结合非常有用。
示例:
```bash
> festin --watch -f domains.txt
```
在另一个终端中,我们可以写入:
```bash
> echo "my-second-domain.com" >> domains.txt
> echo "another-domain.com" >> domains.txt
```
添加到 *domains.txt* 的每个新域名都会唤醒 `FestIn`。
## 示例:结合FestIn与DnsRecon
**使用DnsRecon**
本示例选择的域名是 *target.com*。
### 步骤1 - 使用所需选项对目标域名运行dnsrecon并保存输出
```bash
> dnsrecon -d target.com -t crt -c target.com.csv
```
通过此命令,我们将发现与target.com相关的其他域名。这将有助于最大化我们的成功机会。
### 步骤2 - 准备上一步生成的文件以供FestIn使用
```bash
> tail -n +2 target.com.csv | sort -u | cut -d "," -f 2 >> target.com.domains
```
通过此命令,我们生成一个每行一个域名的文件。这是 `FestIn` 需要的输入。
### 步骤3 - 使用所需选项运行FestIn并保存输出
```bash
> 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
```
在此示例中,生成的结果文件包括:
- target.com.result.json - 主结果文件,每行一个找到的存储桶。每行是一个JSON对象。
- target.com.stdout - festin命令执行的标准输出
- target.com.stderr - festin命令执行的标准错误
为了简化多个域名的处理,我们提供了一个简单的脚本 [examples/loop.sh](https://raw.githubusercontent.com/cr0hn/festin/master/examples/loop.sh) 来自动化此过程。
**将FestIn与DnsRecon结果一起使用**
针对 *target.com* 以默认选项运行,并将结果保存到target.com.result文件:
```bash
> festin target.com -rr target.com.result.json
```
###### 针对target.com运行,使用tor代理,并发数为5,DNS为212.166.64.1解析CNAME,结果保存到target.com.result文件:
```bash
> festin target.com -c 5 -rr target.com.result.json --tor -ds 212.166.64.1
```
## 常见问题解答
问:AWS封禁了我的IP
答:
当您对AWS S3执行大量测试时,AWS会将您的IP列入黑名单。之后每次您尝试使用 `FestIn` 或浏览器访问**任何**S3存储桶**都会被阻止**。
我们建议在使用 `FestIn` 时设置一个代理。
## 谁在使用FestIn
## MrLooquer

他们实时分析并评估贵公司的风险暴露。[网站](https://www.mrlooquer.com)
## 许可证
本项目基于 [BSD许可证](https://github.com/cr0hn/festin/blob/master/LICENSE>) 发布