
reconftw v5.0.0-beta.1
reconFTW 是一款旨在通过对目标域运行最佳工具集以执行扫描和发现漏洞的自动侦察工具。
reconFTW
reconFTW 是一款专为安全研究人员和渗透测试人员设计的强大自动化侦察工具。它通过执行子域名枚举、漏洞扫描、OSINT 等操作,简化了针对目标收集情报的流程。凭借模块化设计、丰富的配置选项以及对 AX Framework 分布式扫描的支持,reconFTW 旨在高效地提供全面的结果。
reconFTW 利用了多种技术,包括被动和主动子域名发现、Web 漏洞检测(例如 XSS、SSRF、SQLi)、OSINT、目录模糊测试、端口扫描和截图。它与前沿工具和 API 集成,以最大化覆盖范围和准确性,确保您在侦察工作中保持领先。
主要特性:
- 全面的子域名枚举(被动、暴力破解、排列组合、证书透明度等)
- 针对 XSS、SSRF、SQLi、LFI、SSTI 等的漏洞扫描
- 针对电子邮件、元数据、API 泄露和第三方错误配置的 OSINT
- 使用 AX Framework 进行分布式扫描,加快执行速度
- 通过详细的配置文件实现可定制的工作流程
- 与 Faraday 集成,用于报告和可视化
- 支持 Docker、Terraform 和 Ansible 部署
免责声明: 未经事先同意使用 reconFTW 攻击目标属于违法行为。遵守所有适用法律是用户的责任。开发者对本工具造成的误用或损害不承担任何责任。请负责任地使用。
📔 目录
- 📔 目录
- ✨ 特性
- 🏗️ 架构
- 💿 安装
- 尝试 v2 beta 版(Go 重写)
- ⚙️ 配置
- 🚀 使用方法
- ☁️ AX Framework 支持(原 Axiom)
- 💻 Faraday 支持
- 🧠 AI 集成
- 🗂️ 数据管理
- 🧪 测试
- 思维导图/工作流程
- 示例视频
- 🤝 如何贡献
- 🔒 安全性
- ❓ 需要帮助?
- 💖 支持本项目
- 🙏 致谢
- 📝 更新日志
- 🛠️ 开发
- 📜 许可证
- ⭐ Star 历史
✨ 特性
reconFTW 拥有丰富的功能,使侦察工作更加彻底和高效。以下是其能力的详细分解,已更新以反映脚本和配置中的最新功能。
OSINT
- 域名信息:通过 WHOIS 查询获取域名注册详情(whois)。
- 电子邮件和密码泄露:搜索泄露的电子邮件和凭据(emailfinder 和 LeakSearch)。
- Microsoft 365/Azure 映射:识别 Microsoft 365 和 Azure 租户(msftrecon)。
- 元数据提取:从索引的 Office 文档中提取元数据(metagoofil)。
- API 泄露:检测公开来源中暴露的 API(porch-pirate、SwaggerSpy 和 postleaksNg)。
- Google Dorking:自动化 Google dork 查询以查找敏感信息(dorks_hunter 和 xnldorker)。
- GitHub 分析:使用可选择的引擎扫描 GitHub 组织中的仓库和机密(enumerepo、trufflehog、gitleaks、titus、noseyparker)。
- GitHub Actions 审计(可选):使用 gato 审计工作流工件和 CI/CD 暴露面。
- 第三方错误配置:识别配置错误的第三方服务(misconfig-mapper)。
- 邮件卫生:审查 SPF/DMARC 配置,以标记欺骗或投递问题。
- 云存储枚举:调查各大提供商的存储桶是否存在暴露(cloud_enum)。
- 可欺骗域名:检查易受欺骗攻击的域名(spoofcheck)。
子域名
- 被动枚举:使用 API 和公开来源进行子域名发现(subfinder 和 github-subdomains)。
- 证书透明度:查询证书透明度日志(crt)。
- NOERROR 发现:识别具有 DNS NOERROR 响应的子域名(dnsx,更多信息请参阅此处)。
- 暴力破解:使用可自定义的字典执行 DNS 暴力破解(puredns 和自定义字典)。
- 排列组合:使用 AI、正则表达式和工具生成子域名排列组合(Gotator 作为唯一的排列引擎,外加 regulator 和 subwiz)。
- Web 抓取:从被动 URL 来源和实时 Web 元数据中提取子域名(urlfinder、waymore、httpx、csprecon)。
- DNS 记录:解析子域名的 DNS 记录(dnsx)。
- Google Analytics:通过 Analytics ID 识别子域名(AnalyticsRelationships)。
- TLS 握手:通过 TLS 端口发现子域名(tlsx)。
- 递归搜索:结合执行递归被动或暴力枚举(dsieve)。
- 子域名接管:检测易受攻击的子域名(nuclei 和 dnstake)。
- DNS 区域传送:检查配置错误的 DNS 区域传送(dig)。
- 云存储桶:识别配置错误的云存储桶和暴露的存储资产(S3Scanner 和 cloud_enum)。
- 云覆盖说明:用 cloud_enum 替换 CloudHunter 后,云存储桶检查不再包含阿里云 OSS 覆盖。
- 云输出迁移:旧的
cloudhunter_*存储桶工件已移除;请改用subdomains/cloud_enum_buckets_trufflehog.txt。 - 反向 IP 查询:通过 IP 范围发现子域名(hakip2host)。
主机
- IP 信息:获取地理位置和 WHOIS 数据(ipinfo)。
- CDN 检测:识别位于 CDN 后面的 IP(cdncheck)。
- WAF 检测:检测 Web 应用防火墙(wafw00f)。
- 端口扫描:使用 nmap 进行主动扫描(可选地由 naabu 先行),并使用 smap 进行被动扫描。
- 服务指纹识别:使用 nerva 对发现的主机:端口对上的暴露服务进行指纹识别。
- 服务漏洞(可选):深度端口扫描配置文件可通过 vulners 使用 CVE 匹配来丰富结果。
- 密码喷洒:尝试对已识别服务进行密码喷洒,并支持引擎选择(brutespray 或 brutus)。
- 地理位置:将 IP 地址映射到地理位置(ipinfo)。
- IPv6 发现:当启用
IPV6_SCAN时,可选择枚举和扫描发现的 IPv6 目标。
Web 分析
- Web 探测:检测标准和非标准端口上的实时 Web 服务器(httpx)。
- 截图:捕获网页截图(nuclei)。
- 虚拟主机模糊测试:通过模糊测试 HTTP 头来识别虚拟主机(VhostFinder)。
- CMS 检测:识别内容管理系统(CMSeeK)。
- URL 提取:被动和主动收集 URL(urlfinder、waymore、katana、github-endpoints 和 JSA)。
- URL 模式分析:使用模式对 URL 进行分类(urless、gf 和 gf-patterns)。
- Favicon 技术侦察:通过 favicon 哈希识别技术(favirecon)。
- JavaScript 分析:从 JS 文件中提取机密和端点(subjs、JSA、xnLinkFinder、getjswords、mantra、jsluice)。
- Source Map 提取:从 JavaScript source map 中检索敏感数据(sourcemapper)。
- GraphQL 检测:使用 nuclei 发现 GraphQL 端点,并可选择执行深度内省(GQLSpection)。
- 参数发现:在端点上暴力破解隐藏参数(arjun)。
- WebSocket 审计:验证
ws://和wss://端点上的升级握手和来源处理。 - gRPC 反射:探测常见的 gRPC 端口以查找暴露的服务反射(grpcurl)。
- LLM 服务指纹识别(可选):使用 julius 探测发现的 Web/API 端点以查找暴露的 LLM 服务。
- 模糊测试:执行目录和参数模糊测试(ffuf)。
- 文件扩展名分类:按文件扩展名组织 URL。
- 字典生成:为模糊测试创建自定义字典。
- 密码字典:从实时内容生成密码字典(cewler)。
- IIS 短文件名扫描:检测 IIS 短文件名漏洞(shortscan)。
漏洞检测
- CVE:检查 CVE 和常见漏洞 nuclei
- Nuclei DAST:在收集的 URL 和 GF 候选上运行
nuclei -dast模板,以获得额外的 DAST 覆盖。 - XSS:测试跨站脚本漏洞(dalfox)。
- SSL/TLS:检查 SSL/TLS 错误配置(testssl)。
- SSRF:测试服务器端请求伪造(interactsh、使用 ffuf 的参数值,以及可选的备用协议载荷)。
- CRLF:检查 CRLF 注入漏洞(crlfuzz)。
- LFI:通过模糊测试测试本地文件包含(ffuf)。
- SSTI:检测服务器端模板注入(TInjA)。
- SQLi:测试 SQL 注入(SQLMap 和 ghauri)。
- 失效链接:识别可能易受接管的失效链接和外部引用(second-order)。
- 命令注入:测试命令注入漏洞(commix)。
- HTTP 请求走私:检查请求走私漏洞(smugglex)。
- Web 缓存:识别 Web 缓存漏洞(Web-Cache-Vulnerability-Scanner 和 toxicache)。
- 4XX 绕过:尝试绕过 4XX 响应(nomore403)。
- 参数模糊测试:对 URL 参数进行漏洞模糊测试(nuclei)。
其他- 多线程:优化性能(Interlace)。
- 自定义解析器:生成 DNS 解析器(dnsvalidator)。
- Docker 支持:在 DockerHub 上提供官方 Docker 镜像。
- AWS 部署:通过 Terraform 和 Ansible 部署。
- IP/CIDR 支持:扫描 IP 范围和 CIDR 块。
- 扫描恢复:从最后完成的步骤恢复扫描。
- 自定义输出:将结果保存到用户定义的目录。
- 差异模式:突出显示后续扫描中的新发现。
- 范围过滤:支持范围内和范围外列表(inscope)。
- 通知:通过 Slack、Discord 或 Telegram 发送警报(notify)。
- 结果压缩:压缩并发送结果。
- Faraday 集成:将结果导出到 Faraday 以用于报告。
- AI 报告生成:使用本地 AI 模型生成报告(reconftw_ai)。
- 快速重新扫描模式:当未发现新资产时自动跳过繁重阶段(
--quick-rescan/QUICK_RESCAN)。 - 热点列表构建器:根据新发现对风险最高的资产进行评分和突出显示(
hotlist.txt)。 - 命令追踪:切换
SHOW_COMMANDS以将每个执行的命令记录到目标日志中,用于调试。 - 资产存储:当启用
ASSET_STORE时,将发现追加到assets.jsonl以用于下游自动化。 - 合并报告:在扫描结束时自动生成
report/report.json和report/index.html。 - ARM 支持:兼容 Raspberry Pi 和 ARM 架构(包括 MacOS MX)。
- 健康检查:通过
--health-check内置系统健康检查(也用于 DockerHEALTHCHECK)。 - 增量模式:仅扫描自上次运行以来的新发现(
--incremental)。 - 自适应速率限制:在 429/503 错误时自动退避(
--adaptive-rate)。 - 结构化日志:可选的 JSON 日志输出,用于高级分析(
STRUCTURED_LOGGING)。 - 输入清理:所有用户输入均经过清理,以防止命令注入。
- 试运行模式:预览将要执行的内容而不运行命令(
--dry-run)。 - 并行模式:并行运行独立功能以加快扫描速度(
--parallel,使用--no-parallel禁用)。 - 模块化架构:代码库拆分为 8 个专注模块,以提高可维护性。
- 机密管理:环境变量、
secrets.cfg和 Docker 运行时机密(参见 SECURITY.md)。 - 断路器:在重复失败后自动跳过工具,以避免扫描挂起。
- 检查点系统:从最后一个成功阶段恢复中断的扫描。
- macOS 原生支持:完全兼容 macOS(BSD coreutils、Homebrew Bash 4+)。
🏗️ 架构
reconFTW 采用模块化架构。主入口点(reconftw.sh)处理参数解析,并从 modules/ 目录中引入 8 个专用模块。
目录布局```
reconftw/ ├── reconftw.sh # Entry point — arg parsing, module loading, dispatch ├── reconftw.cfg # Default configuration ├── install.sh # Installer ├── Makefile # Data management, lint, fmt, test targets ├── modules/ │ ├── core.sh # Lifecycle, logging, notifications, cleanup (1024 lines) │ ├── modes.sh # Scan modes, argument parsing, help (902 lines) │ ├── subdomains.sh # Subdomain enumeration (1938 lines) │ ├── web.sh # Web analysis, fuzzing, JS checks (1712 lines) │ ├── vulns.sh # Vulnerability scanning (926 lines) │ ├── osint.sh # OSINT functions (500 lines) │ ├── axiom.sh # Ax/Axiom fleet helpers (143 lines) │ └── utils.sh # Utilities, sanitization, validation (508 lines) ├── tests/ │ ├── run_tests.sh # Test runner │ ├── unit/ # bats-core unit tests │ ├── integration/ # Integration tests │ └── fixtures/ # Test data ├── Docker/ │ └── Dockerfile # Official Docker image └── Terraform/ # AWS deployment
### 模块参考
| 模块 | 行数 | 用途 |
|--------|------:|---------|
| `core.sh` | 1024 | 生命周期管理、日志记录、通知、清理陷阱 |
| `modes.sh` | 902 | 扫描模式定义、参数解析、帮助输出 |
| `subdomains.sh` | 1938 | 所有子域名枚举功能 |
| `web.sh` | 1712 | Web 分析、模糊测试、JS 分析、CMS 检测 |
| `vulns.sh` | 926 | 漏洞扫描(XSS、SQLi、SSRF 等) |
| `osint.sh` | 500 | OSINT 功能(WHOIS、电子邮件、dorks、元数据) |
| `utils.sh` | 508 | 共享工具、输入清理、验证 |
| `axiom.sh` | 143 | Ax/Axiom 分布式集群管理 |
`--source-only` 标志允许在不执行主逻辑的情况下加载 `reconftw.sh`,从而支持对单个函数进行单元测试。
---
## 💿 安装
reconFTW 支持多种安装方法,以适应不同的环境。请确保有足够的磁盘空间(建议至少 10 GB)和稳定的互联网连接。
### 快速开始
1) 克隆并安装```yaml
git clone https://github.com/six2dez/reconftw
cd reconftw
./install.sh --verbose
- 运行扫描(完整 + 恢复)```bash ./reconftw.sh -d example.com -r
3) 最小化运行(仅被动足迹)```bash
./reconftw.sh -d example.com -p
提示:之后重新运行
./install.sh --tools可刷新工具链,而无需重新安装系统软件包。
本地安装(PC/VPS/VM)
-
前置条件:
- Golang:最新版本(
reconftw.cfg中默认启用install_golang)。 - 系统权限:如果未以 root 身份运行,请配置 sudo 以避免提示:
sudo echo "${USERNAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/reconFTW
- Golang:最新版本(
-
步骤: ```bash git clone https://github.com/six2dez/reconftw cd reconftw ./install.sh ./reconftw.sh -d target.com -r
-
注意事项:
install.sh脚本会安装依赖、工具,并配置路径(GOROOT、GOPATH、PATH)。- 如果 Golang 已配置好,请在
reconftw.cfg中设置install_golang=false。 - 对于已有环境,运行
./install.sh --tools可刷新 Go 二进制文件、pipx 包和仓库,而不会改动系统包。 - 查看 安装指南 获取详细说明。
Docker
- 拉取镜像: ```bash
docker pull six2dez/reconftw:main
- 运行容器: ```bash
docker run -it --rm
-v "${PWD}/OutputFolder/:/reconftw/Recon/"
six2dez/reconftw:main -d example.com -r
对于目标列表,请将列表文件绑定到容器中,并引用容器内的路径: ```bash
docker run -it --rm
-v "${PWD}/domains.txt:/reconftw/domains.txt:ro"
-v "${PWD}/OutputFolder/:/reconftw/Recon/"
six2dez/reconftw:main -l /reconftw/domains.txt -r
3. **查看结果**:
- 结果保存在主机的 `OutputFolder` 目录中(不在容器内)。
4. **自定义**:
- 修改 Docker 镜像或自行构建;参见 [Docker 指南](https://github.com/six2dez/reconftw/wiki/4.-Docker)。
- 要在自定义构建中跳过 Ax 工具,请传入 `--build-arg INSTALL_AXIOM=false`。
- 如果使用通知功能,请将 notify 配置挂载到容器内的 `~/.config/notify/provider-config.yaml`。
5. **运行时的密钥**:
通过环境变量传递 API 密钥和机密信息——切勿将其烘焙到镜像中: ```bash
docker run -it --rm \
-e SHODAN_API_KEY="your-key" \
-e PDCP_API_KEY="your-projectdiscovery-key" \
-e COLLAB_SERVER="your-server" \
-e XSS_SERVER="your-server" \
-v "${PWD}/OutputFolder/:/reconftw/Recon/" \
six2dez/reconftw:main -d example.com -r
参见 SECURITY.md 获取完整的机密管理指南。
-
健康检查:
Docker 镜像内置了
HEALTHCHECK,每 60 秒运行一次./reconftw.sh --health-check。你也可以手动运行它: ```bash docker exec ./reconftw.sh --health-check
Terraform + Ansible
- 使用 Terraform 和 Ansible 在 AWS 上部署 reconFTW。
- 按照 Terraform/README.md 中的指南进行设置。
尝试 v2 测试版(Go 重写)
reconFTW 正在用 Go 重写。该重写版本以可选预发布版形式提供:它列在
发布页面上,而 GitHub
绝不会将 releases/latest 指向预发布版——因此,如果你不做任何操作,你将继续获得
bash 版本。 这是有意为之。
Go 二进制文件名为 reconftw;bash 入口点为 reconftw.sh。它们不会互相覆盖,
因此你可以同时保留两者,并随时回退。
当前测试版为 v5.0.0-beta.1。它不由 releases/latest 提供,因此你需要
显式指定标签:```bash
curl -sSL "https://github.com/six2dez/reconftw/releases/download/v5.0.0-beta.1/reconftw_Linux_x86_64.tar.gz" | tar xz
sudo install -m 755 reconftw /usr/local/bin/reconftw
reconftw version
从[发布页面](https://github.com/six2dez/reconftw/releases/tag/v5.0.0-beta.1)中选择与你的平台匹配的资产——`Darwin`和`arm64`构建、静态musl构建以及`.deb`/`.rpm`包均已发布。
- [**该beta版本是什么,以及它不是什么**](https://github.com/six2dez/reconftw/blob/main/docs/V2-BETA-ANNOUNCEMENT.md)——包括三件明确尚未完成的事项。
- [**报告问题**](https://github.com/six2dez/reconftw/issues/new?template=v2-beta-feedback.md)——v2 beta反馈模板。bash版本中的Bug仍提交至常规Bug报告。
## 🛠️ 故障排除
- macOS上的Bash 4+:脚本会在Homebrew Bash下自动重新启动。如果你看到关于Bash < 4的消息,请运行`brew install bash`,打开一个新终端,然后重新运行`./install.sh`。
- macOS上的timeout:macOS通过`brew install coreutils`提供`gtimeout`。脚本现在会自动检测并使用它。
- 网络问题:安装程序会隐藏大多数命令输出。如果出现问题,请在`reconftw.cfg`中设置`upgrade_tools=true`后重新运行,执行`./install.sh --tools`,或手动安装缺失的工具(错误信息会指明工具名称)。
- GOPATH二进制文件:二进制文件会被复制到`/usr/local/bin`。如果你不希望这样,请确保`~/go/bin`在你的`PATH`中。
- Nuclei模板:如果模板未被克隆,请删除`~/nuclei-templates`并重新运行`./install.sh`。
## 🔑 API清单(可选)
- `subfinder`:`~/.config/subfinder/provider-config.yaml`
- GitHub令牌:`~/Tools/.github_tokens`(每行一个)
- GitLab令牌:`~/Tools/.gitlab_tokens`(每行一个)
- WHOISXML:在`reconftw.cfg`或环境变量中设置`WHOISXML_API`
- ASN枚举(`asnmap`):在环境变量/配置中设置`PDCP_API_KEY`(若未设置,`ASN_ENUM`将跳过)
- Slack/Discord/Telegram:在`~/.config/notify/provider-config.yaml`中配置`notify`
- SSRF服务器:如使用,请设置`COLLAB_SERVER`环境变量/配置
- 盲XSS服务器:如使用,请设置`XSS_SERVER`环境变量/配置
## 💾 要求
- 磁盘:建议预留10–20 GB可用空间(工具链+数据)
- 网络:安装和更新期间需稳定连接
- 操作系统:Linux/macOS,Bash ≥ 4
- 附加:`shellcheck`和`shfmt`(可选),用于`make lint`/`make fmt`
## ⚙️ 配置
`reconftw.cfg`文件控制reconFTW的整个执行过程。它允许对以下内容进行细粒度定制:
- **工具路径**:设置工具、解析器和字典的路径(`tools`、`resolvers`、`fuzz_wordlist`)。
- **API密钥**:通过环境变量或`secrets.cfg`配置Shodan、WHOISXML等的密钥(参见[SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md))。
- **扫描模式**:启用/禁用模块(例如`OSINT`、`SUBDOMAINS_GENERAL`、`VULNS_GENERAL`)。
- **性能**:调整线程数、速率限制和超时(例如`FFUF_THREADS`、`HTTPX_RATELIMIT`)。
- **自适应速率限制**:在429/503错误时自动退避(`ADAPTIVE_RATE_LIMIT`、`MIN_RATE_LIMIT`、`MAX_RATE_LIMIT`)。
- **增量扫描**:仅扫描自上次运行以来的新发现(`INCREMENTAL_MODE`)。
- **通知**:设置Slack、Discord或Telegram通知(`NOTIFY_CONFIG`)。
- **Ax(原Axiom)**:配置分布式扫描和解析器路径(`AXIOM_FLEET_NAME`、`AXIOM_FLEET_COUNT`、`AXIOM_RESOLVERS_PATH`)。
- **AI报告**:配置模型/配置文件/格式和上下文控制(`AI_MODEL`、`AI_REPORT_PROFILE`、`AI_REPORT_TYPE`、`AI_MAX_CHARS_PER_FILE`)。
- **高级Web检查**:切换GraphQL内省、参数发现、WebSocket测试、gRPC探测和IPv6扫描。
- **自动化与数据**:控制快速重新扫描启发式、资产日志记录、块大小、热门列表和调试跟踪(`QUICK_RESCAN`、`ASSET_STORE`、`CHUNK_LIMIT`、`HOTLIST_TOP`、`SHOW_COMMANDS`)。
- **磁盘与日志**:预检磁盘检查(`MIN_DISK_SPACE_GB`)、日志轮转(`MAX_LOG_FILES`、`MAX_LOG_AGE_DAYS`)、结构化JSON日志(`STRUCTURED_LOGGING`)。
- **缓存**:配置字典和解析器的缓存过期时间(`CACHE_MAX_AGE_DAYS`)。
- **DNS解析器安全**:缺失解析器文件时快速失败,解析器下载使用可配置的重试/超时参数(`RESOLVER_DOWNLOAD_*`),DNS暴力破解/解析超时默认禁用(`DNS_*_TIMEOUT=0`)并带有心跳进度。
- **密钥**:使用`secrets.cfg`进行本地覆盖,或使用环境变量用于CI/Docker(参见[SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md))。
**示例配置**:```bash
#############################################
# reconFTW config file #
#############################################
# General values
tools=$HOME/Tools # Path installed tools
if [[ -z "${SCRIPTPATH:-}" ]]; then
if [[ -n "${BASH_SOURCE[0]:-}" ]]; then
SCRIPTPATH="$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
else
SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
fi
fi
_detected_shell="${SHELL:-/bin/bash}"
profile_shell=".$(basename "${_detected_shell}")rc" # Get current shell profile
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
reconftw_version="$(git rev-parse --abbrev-ref HEAD)-$(git describe --tags 2>/dev/null || git rev-parse --short HEAD)"
else
reconftw_version="standalone"
fi # Fetch current reconftw version
DATA_DIR="${SCRIPTPATH}/data"
WORDLISTS_DIR="${DATA_DIR}/wordlists"
PATTERNS_DIR="${DATA_DIR}/patterns"
generate_resolvers=false # Generate custom resolvers with dnsvalidator
update_resolvers=true # Fetch and rewrite resolvers from trickest/resolvers before DNS resolution
resolvers_url="https://raw.githubusercontent.com/trickest/resolvers/main/resolvers.txt"
resolvers_trusted_url="https://gist.githubusercontent.com/six2dez/ae9ed7e5c786461868abd3f2344401b6/raw/trusted_resolvers.txt"
RESOLVER_DOWNLOAD_CONNECT_TIMEOUT=10 # Seconds to wait for resolver download TCP connection
RESOLVER_DOWNLOAD_MAX_TIME=120 # Hard cap in seconds for resolver downloads
RESOLVER_DOWNLOAD_RETRY=2 # Retry count for resolver downloads
RESOLVER_DOWNLOAD_RETRY_DELAY=2 # Delay in seconds between resolver download retries
fuzzing_remote_list="https://raw.githubusercontent.com/six2dez/OneListForAll/main/onelistforallmicro.txt" # Used to send to Ax (if used) on fuzzing
proxy_url="http://127.0.0.1:8080/" # Proxy url
install_golang=true # Set it to false if you already have Golang configured and ready
upgrade_tools=true
upgrade_before_running=false # Upgrade tools before running
#dir_output=/custom/output/path
SHOW_COMMANDS=false # Set true to log every executed command to the per-target log (verbose; may include sensitive data)
MIN_DISK_SPACE_GB=0 # Minimum required disk space in GB before starting reconnaissance (0 to disable check)
# Incremental mode configuration
INCREMENTAL_MODE=false # Only scan new findings since last run (use --incremental flag to enable)
MONITOR_MODE=false # Continuous monitor mode (enabled by --monitor)
MONITOR_INTERVAL_MIN=60 # Minutes between monitoring cycles
MONITOR_MAX_CYCLES=0 # 0 = run forever until interrupted
ALERT_SUPPRESSION=true # Suppress repeated monitor alerts by fingerprint history
ALERT_SEEN_FILE=".incremental/alerts_seen.hashes" # Store of seen alert fingerprints
# Adaptive rate limiting configuration
ADAPTIVE_RATE_LIMIT=false # Automatically adjust rate limits when encountering 429/503 errors (use --adaptive-rate flag to enable)
MIN_RATE_LIMIT=10 # Minimum rate limit (requests per second)
MAX_RATE_LIMIT=500 # Maximum rate limit (requests per second)
RATE_LIMIT_BACKOFF_FACTOR=0.5 # Multiply rate by this when errors occur (0.5 = half speed)
RATE_LIMIT_INCREASE_FACTOR=1.2 # Multiply rate by this on success (1.2 = 20% faster)
# Cache configuration
CACHE_MAX_AGE_DAYS=30 # Maximum age in days for cached wordlists/resolvers (30 = 1 month)
CACHE_MAX_AGE_DAYS_RESOLVERS=7 # Resolver cache TTL
CACHE_MAX_AGE_DAYS_WORDLISTS=30 # Wordlist cache TTL
CACHE_MAX_AGE_DAYS_TOOLS=14 # Tool cache TTL
CACHE_REFRESH=false # Force-refresh cache (or use --refresh-cache)
# Log rotation
MAX_LOG_FILES=10 # Maximum number of log files to keep per target
MAX_LOG_AGE_DAYS=30 # Delete log files older than this many days
# Structured logging configuration (JSON format)
STRUCTURED_LOGGING=false # Enable JSON structured logging for advanced log analysis
# Golang Vars (Comment or change on your own)
export GOROOT="${GOROOT:-/usr/local/go}"
export GOPATH="${GOPATH:-$HOME/go}"
case ":${PATH}:" in
*":$GOPATH/bin:"*) ;;
*) PATH="$GOPATH/bin:$PATH" ;;
esac
case ":${PATH}:" in
*":$GOROOT/bin:"*) ;;
*) PATH="$GOROOT/bin:$PATH" ;;
esac
case ":${PATH}:" in
*":$HOME/.local/bin:"*) ;;
*) PATH="$HOME/.local/bin:$PATH" ;;
esac
export PATH
# Rust Vars (Comment or change on your own)
export PATH="$HOME/.cargo/bin:$PATH"
# Tools config files
#NOTIFY_CONFIG=~/.config/notify/provider-config.yaml # No need to define
GITHUB_TOKENS=${tools}/.github_tokens
GITLAB_TOKENS=${tools}/.gitlab_tokens
#CUSTOM_CONFIG=custom_config_path.txt # In case you use a custom config file, uncomment this line and set your files path
# APIs/TOKENS - Set via environment variables (preferred) or uncomment and edit below.
# Environment variables take precedence if set.
SHODAN_API_KEY="${SHODAN_API_KEY:-}"
WHOISXML_API="${WHOISXML_API:-}"
PDCP_API_KEY="${PDCP_API_KEY:-}"
XSS_SERVER="${XSS_SERVER:-}"
COLLAB_SERVER="${COLLAB_SERVER:-}"
slack_channel="${slack_channel:-}"
slack_auth="${slack_auth:-}"
# For additional secrets, create a secrets.cfg file (gitignored) and it will be auto-sourced
# File descriptors
DEBUG_STD="&>/dev/null" # Skips STD output on installer
DEBUG_ERROR="2>/dev/null" # Skips ERR output on installer
# Osint
OSINT=true # Enable or disable the whole OSINT module
GOOGLE_DORKS=true
GITHUB_DORKS=true
GITHUB_REPOS=true
METADATA=true # Fetch metadata from indexed office documents
EMAILS=true # Fetch emails from differents sites
DOMAIN_INFO=true # whois info
IP_INFO=true # Reverse IP search, geolocation and whois
API_LEAKS=true # Check for API leaks
API_LEAKS_POSTLEAKS=true # Enhance API leaks with postleaksNg
THIRD_PARTIES=true # Check for 3rd parties misconfigs
SPOOF=true # Check spoofable domains
MAIL_HYGIENE=true # Check DMARC/SPF records
CLOUD_ENUM=true # Enumerate cloud storage across providers with cloud_enum
GITHUB_LEAKS=true # Search for leaked secrets across GitHub with ghleaks
GHLEAKS_THREADS=5 # Concurrent download threads for ghleaks
SECRETS_ENGINE="gitleaks" # gitleaks|titus|noseyparker|hybrid
SECRETS_SCAN_GIT_HISTORY=false # Include git history scans when supported
SECRETS_VALIDATE=false # Validate detected secrets when supported (titus)
GITHUB_ACTIONS_AUDIT=false # Audit GitHub Actions artifacts/workflows with gato
GATO_INCLUDE_ALL_ARTIFACT_SECRETS=false # Include noisy artifact secret matches in gato output
# Subdomains
SUBDOMAINS_GENERAL=true # Enable or disable the whole Subdomains module
SUBPASSIVE=true # Passive subdomains search
SUBCRT=true # crtsh search
CTR_LIMIT=999999 # Limit the number of results
SUBNOERROR=false # Check DNS NOERROR response and BF on them
SUBANALYTICS=true # Google Analytics search
SUBBRUTE=true # DNS bruteforcing
SUBSCRAPING=true # Subdomains extraction from passive URLs and live web metadata
SUBPERMUTE=true # DNS permutations
SUBIAPERMUTE=true # Permutations by AI analysis
SUBREGEXPERMUTE=true # Permutations by regex analysis
GOTATOR_FLAGS=" -depth 1 -numbers 3 -mindup -adv -md" # Flags for gotator
PERMUTATIONS_WORDLIST_MODE=auto # auto|full|short (auto: short if subs > threshold, full if DEEP)
PERMUTATIONS_SHORT_THRESHOLD=100 # Use short wordlist when subdomain count exceeds this
SUBTAKEOVER=true # Check subdomain takeovers, false by default cuz nuclei already check this
SUB_RECURSIVE_PASSIVE=false # Uses a lot of API keys queries
DEEP_RECURSIVE_PASSIVE=10 # Number of top subdomains for recursion
SUB_RECURSIVE_BRUTE=false # Needs big disk space and time to resolve
ZONETRANSFER=true # Check zone transfer
S3BUCKETS=true # Check S3 buckets misconfigs
REVERSE_IP=false # Check reverse IP subdomain search (set True if your target is CIDR/IP)
TLS_PORTS="21,22,25,80,110,135,143,261,271,324,443,448,465,563,614,631,636,664,684,695,832,853,854,990,993,989,992,994,995,1129,1131,1184,2083,2087,2089,2096,2221,2252,2376,2381,2478,2479,2482,2484,2679,2762,3077,3078,3183,3191,3220,3269,3306,3410,3424,3471,3496,3509,3529,3539,3535,3660,36611,3713,3747,3766,3864,3885,3995,3896,4031,4036,4062,4064,4081,4083,4116,4335,4336,4536,4590,4740,4843,4849,5443,5007,5061,5321,5349,5671,5783,5868,5986,5989,5990,6209,6251,6443,6513,6514,6619,6697,6771,7202,7443,7673,7674,7677,7775,8243,8443,8991,8989,9089,9295,9318,9443,9444,9614,9802,10161,10162,11751,12013,12109,14143,15002,16995,41230,16993,20003"
INSCOPE=false # Uses inscope tool to filter the scope, requires .scope file in reconftw folder
# Web detection
WEBPROBEFULL=true # Unified web probing over configured ports
WEBSCREENSHOT=true # Webs screenshooting
VIRTUALHOSTS=false # Check virtualhosts by fuzzing HOST header
UNCOMMON_PORTS_WEB="81,300,591,593,832,981,1010,1311,1099,2082,2095,2096,2480,3000,3001,3002,3003,3128,3333,4243,4567,4711,4712,4993,5000,5104,5108,5280,5281,5601,5800,6543,7000,7001,7396,7474,8000,8001,8008,8014,8042,8060,8069,8080,8081,8083,8088,8090,8091,8095,8118,8123,8172,8181,8222,8243,8280,8281,8333,8337,8443,8500,8834,8880,8888,8983,9000,9001,9043,9060,9080,9090,9091,9092,9200,9443,9502,9800,9981,10000,10250,11371,12443,15672,16080,17778,18091,18092,20720,32000,55440,55672"
WEBPROBE_PORTS="80,443,${UNCOMMON_PORTS_WEB}" # Ports used by webprobe_full
# Host
FAVIRECON=true # Favicon-based technology recon for discovered web targets
PORTSCANNER=true # Enable or disable the whole Port scanner module
GEO_INFO=true # Fetch Geolocalization info
PORTSCAN_PASSIVE=true # Port scanner with Shodan
PORTSCAN_ACTIVE=true # Port scanner with nmap
PORTSCAN_ACTIVE_OPTIONS="--top-ports 200 -sV -n -Pn --open --max-retries 2"
PORTSCAN_DEEP_OPTIONS="--top-ports 1000 -sV -n -Pn --open --max-retries 2 --script vulners"
PORTSCAN_STRATEGY=legacy # legacy|naabu_nmap
NAABU_ENABLE=true
NAABU_RATE=1000
NAABU_PORTS="--top-ports 1000"
SERVICE_FINGERPRINT=true # Fingerprint exposed services with nerva
SERVICE_FINGERPRINT_ENGINE="nerva" # nerva
SERVICE_FINGERPRINT_TIMEOUT_MS=2000 # nerva timeout per target (ms)
PORTSCAN_UDP=false
PORTSCAN_UDP_OPTIONS="--top-ports 20 -sU -sV -n -Pn --open"
CDN_IP=true # Check which IPs belongs to CDN
CDN_BYPASS=true # Try origin IP discovery on CDN-fronted hosts with hakoriginfinder
# Web analysis
WAF_DETECTION=true # Detect WAFs
NUCLEICHECK=true # Enable or disable nuclei
NUCLEI_TEMPLATES_PATH="$HOME/nuclei-templates" # Set nuclei templates path
NUCLEI_SEVERITY="info,low,medium,high,critical" # Set templates criticity
NUCLEI_EXTRA_ARGS="" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
#NUCLEI_EXTRA_ARGS="-etags openssh,ssl -eid node-express-dev-env,keycloak-xss,CVE-2023-24044,CVE-2021-20323,header-sql,header-reflection" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
NUCLEI_DAST=true # Run additional nuclei -dast module over webs/urls/gf candidates (forced on when VULNS_GENERAL=true, e.g. -a)
URL_CHECK=true # Enable or disable URL collection
URL_CHECK_PASSIVE=true # Search for urls, passive methods from Archive, OTX, CommonCrawl, etc
URL_CHECK_ACTIVE=true # Search for urls by crawling the websites
WAYMORE_TIMEOUT=30m # Timeout for waymore passive URL collection
WAYMORE_LIMIT=5000 # Optional URL collection limit for waymore
URL_GF=true # Url patterns classification
URL_EXT=true # Returns a list of files divided by extension
JSCHECKS=true # JS analysis
FUZZ=true # Web fuzzing
FUZZ_RECURSION_DEPTH=2 # ffuf recursion depth used in DEEP mode
IIS_SHORTNAME=true
CMS_SCANNER=true # CMS scanner
WORDLIST=true # Wordlist generation
ROBOTSWORDLIST=true # Check historic disallow entries on waybackMachine (DEEP mode only)
PASSWORD_DICT=true # Generate password dictionary
PASSWORD_DICT_ENGINE=cewler # cewler|pydictor
PASSWORD_MIN_LENGTH=5 # Min password length
PASSWORD_MAX_LENGTH=14 # Max password length
KATANA_HEADLESS_PROFILE=off # off|smart|full
CLOUD_ENUM_S3_PROFILE=optimized # optimized: quickscan (-qs + safe -m/-b paths) | exhaustive: -m/-b ${tools}/cloud_enum/enum_tools/fuzz.txt (missing fuzz => optimized)
CLOUD_ENUM_S3_THREADS=20 # Threads used by cloud_enum in s3buckets/cloud enumeration
# Vulns
VULNS_GENERAL=false # Enable or disable the vulnerability module (very intrusive and slow)
XSS=true # Check for xss with dalfox
TEST_SSL=true # SSL misconfigs
SSRF_CHECKS=true # SSRF checks
CRLF_CHECKS=true # CRLF checks
LFI=true # LFI by fuzzing
LFI_MAX_URLS=150 # Max single-parameter LFI candidates to test per target (0 = unlimited)
SSTI=true # SSTI by fuzzing
SSTI_ENGINE="TInjA" # SSTI engine
SQLI=true # Check SQLI
SQLMAP=true # Check SQLI with sqlmap
GHAURI=false # Check SQLI with ghauri
BROKENLINKS=true # Check for brokenlinks
BROKENLINKS_ENGINE="second-order" # Broken links engine
SPRAY=true # Performs password spraying
SPRAY_ENGINE="brutespray" # brutespray|brutus
SPRAY_BRUTUS_ONLY_DEEP=true # Run brutus only in DEEP mode unless disabled
BRUTUS_USERNAMES="" # Optional comma-separated usernames for brutus
BRUTUS_PASSWORDS="" # Optional comma-separated passwords for brutus
BRUTUS_KEY_FILE="" # Optional SSH private key path for brutus
COMM_INJ=true # Check for command injections with commix
SMUGGLING=true # Check for HTTP request smuggling flaws
WEBCACHE=true # Check for Web Cache issues
WEBCACHE_TOXICACHE=true # Complement web cache checks with toxicache
BYPASSER4XX=true # Check for 4XX bypasses
FUZZPARAMS=true # Fuzz parameters values
# Extra features
NOTIFICATION=false # Notification for every function
SOFT_NOTIFICATION=false # Only for start/end
DEEP=false # DEEP mode, really slow and don't care about the number of results
DEEP_LIMIT=500 # First limit to not run unless you run DEEP
DEEP_LIMIT2=1500 # Second limit to not run unless you run DEEP
DIFF=false # Diff function, run every module over an already scanned target, printing only new findings (but save everything)
REMOVETMP=false # Delete temporary files after execution (to free up space)
REMOVELOG=false # Delete logs after execution
PROXY=false # Send to proxy the websites found
SENDZIPNOTIFY=false # Send to zip the results (over notify)
PRESERVE=true # set to true to avoid deleting the .called_fn files on really large scans
FFUF_FLAGS=" -mc all -fc 404 -sf -noninteractive -of json" # Ffuf flags
# HTTP options
HEADER="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" # Default header
# Threads (auto-scaled based on CPU cores, override to set fixed values)
AVAILABLE_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
FFUF_THREADS=$((AVAILABLE_CORES * 10))
HTTPX_THREADS=$((AVAILABLE_CORES * 12))
HTTPX_UNCOMMONPORTS_THREADS=$((AVAILABLE_CORES * 25))
KATANA_THREADS=$((AVAILABLE_CORES * 5))
BRUTESPRAY_CONCURRENCE=$((AVAILABLE_CORES * 2))
DNSTAKE_THREADS=$((AVAILABLE_CORES * 25))
DALFOX_THREADS=$((AVAILABLE_CORES * 50))
DNS_RESOLVER=auto # auto|puredns|dnsx (auto: detects NAT/CGNAT → dnsx for home, puredns for VPS)
PUREDNS_PUBLIC_LIMIT=0 # Set between 2000 - 10000 if your router blows up, 0 means unlimited
PUREDNS_TRUSTED_LIMIT=400
PUREDNS_WILDCARDTEST_LIMIT=30
PUREDNS_WILDCARDBATCH_LIMIT=1500000
DNSX_THREADS=25 # Threads for dnsx when behind NAT (safe for home routers)
DNSX_RATE_LIMIT=100 # QPS for dnsx
DNSVALIDATOR_THREADS=200
INTERLACE_THREADS=10
LFI_INTERLACE_THREADS=4 # Dedicated interlace concurrency for LFI
TLSX_THREADS=1000
XNLINKFINDER_DEPTH=3
# Rate limits
HTTPX_RATELIMIT=150
NUCLEI_RATELIMIT=150
FFUF_RATELIMIT=0
LFI_FFUF_THREADS=20 # Dedicated ffuf threads for LFI
LFI_FFUF_RATELIMIT=50 # Dedicated ffuf rate limit for LFI
# Timeouts
SUBFINDER_ENUM_TIMEOUT=180 # Minutes
CMSSCAN_TIMEOUT=3600 # Seconds
FFUF_MAXTIME=900 # Seconds
LFI_INTERLACE_TIMEOUT=180 # Seconds per LFI interlace worker
LFI_FFUF_TIMEOUT=10 # Seconds per LFI HTTP request
LFI_FFUF_MAXTIME=90 # Seconds per single LFI ffuf job
LFI_FOLLOW_REDIRECTS=false # Follow redirects during LFI fuzzing
HTTPX_TIMEOUT=10 # Seconds
HTTPX_UNCOMMONPORTS_TIMEOUT=10 # Seconds
PERMUTATIONS_LIMIT=21474836480 # Bytes, default is 20 GB
DNS_BRUTE_TIMEOUT=0 # timeout/gtimeout duration for DNS bruteforce (0 disables hard-timeout, e.g. 4h)
DNS_RESOLVE_TIMEOUT=0 # timeout/gtimeout duration for DNS resolve (0 disables hard-timeout, e.g. 6h)
DNS_HEARTBEAT_INTERVAL_SECONDS=20 # Progress heartbeat interval for long DNS jobs
# lists
fuzz_wordlist=${WORDLISTS_DIR}/fuzz_wordlist.txt
lfi_wordlist=${WORDLISTS_DIR}/lfi_wordlist.txt
ssti_wordlist=${WORDLISTS_DIR}/ssti_wordlist.txt
subs_wordlist=${WORDLISTS_DIR}/subdomains.txt
subs_wordlist_big=${tools}/subdomains_n0kovo_big.txt
headers_inject=${WORDLISTS_DIR}/headers_inject.txt
resolvers=${tools}/resolvers.txt
resolvers_trusted=${tools}/resolvers_trusted.txt
# Ax Fleet (formerly Axiom — uses attacksurge/ax)
# Resolver paths on Ax instances (change if your fleet uses a different home dir)
AXIOM_RESOLVERS_PATH="/home/op/lists/resolvers.txt"
AXIOM_RESOLVERS_TRUSTED_PATH="/home/op/lists/resolvers_trusted.txt"
# Will not start a new fleet if one exist w/ same name and size (or larger)
# AXIOM=false Uncomment only to overwrite command line flags
AXIOM_FLEET_LAUNCH=true # Enable or disable spin up a new fleet, if false it will use the current fleet with the AXIOM_FLEET_NAME prefix
AXIOM_FLEET_NAME="reconFTW" # Fleet's prefix name
AXIOM_FLEET_COUNT=10 # Fleet's number
AXIOM_FLEET_REGIONS="eu-central" # Fleet's region
AXIOM_FLEET_SHUTDOWN=true # # Enable or disable delete the fleet after the execution
AXIOM_AUTO_FIX_HOSTKEY=true # Auto-repair known_hosts entries on SSH host-key mismatch before fallback to local mode
# This is a script on your reconftw host that might prep things your way...
#AXIOM_POST_START="~/Tools/axiom_config.sh" # Useful to send your config files to the fleet
AXIOM_EXTRA_ARGS="" # Leave empty if you don't want to add extra arguments
#AXIOM_EXTRA_ARGS=" --rm-logs" # Example
# Faraday-Server
FARADAY=false # Enable or disable Faraday integration
FARADAY_WORKSPACE="reconftw" # Faraday workspace
# AI
AI_EXECUTABLE="python3" # Python executable fallback if reconftw_ai venv python is not available
AI_MODEL="llama3:8b" # Model to use
AI_REPORT_TYPE="md" # Report type to use (md, txt)
AI_REPORT_PROFILE="bughunter" # Report profile to use (executive, brief, or bughunter)
AI_PROMPTS_FILE="" # Optional custom prompts file (empty uses reconftw_ai default)
AI_MAX_CHARS_PER_FILE=50000 # Max chars loaded per file before truncation
AI_MAX_FILES_PER_CATEGORY=200 # Max files loaded per category for AI context
AI_REDACT=true # Redact sensitive indicators before AI analysis
AI_ALLOW_MODEL_PULL=false # Allow reconftw_ai to auto-pull missing model
AI_STRICT=false # Fail AI analysis if one or more categories have no data
# API & Advanced Web Checks
GRAPHQL_CHECK=true # Detect GraphQL endpoints and introspection
GQLSPECTION=false # Run GQLSpection deep introspection on detected GraphQL endpoints (heavier)
PARAM_DISCOVERY=true # Parameter discovery with arjun
GRPC_SCAN=false # Attempt basic gRPC reflection on common ports
LLM_PROBE=false # Probe discovered web/API endpoints for LLM services with julius
LLM_PROBE_AUGUSTUS=false # Include augustus generator config in julius output
# IPv6
IPV6_SCAN=true # Attempt IPv6 discovery/portscan where addresses exist
# Wordlists / threads for new modules
ARJUN_THREADS=10
# Data & Automation
ASSET_STORE=true # Append assets/findings to assets.jsonl
EXPORT_FORMAT="" # Optional exporter at end of scan: json|html|csv|all
REPORT_ONLY=false # Rebuild report artifacts from existing results (or use --report-only)
QUICK_RESCAN=false # Skip heavy steps if no new subdomains/webs
CHUNK_LIMIT=2000 # Split very large lists into chunks (urls, webs)
HOTLIST_TOP=50 # Number of top risky assets to highlight
# Performance
RESOLVER_IQ=false # Prefer fast/healthy resolvers (experimental)
PERF_PROFILE="balanced" # low|balanced|max
# Estimated durations for skipped heavy modules (seconds)
TIME_EST_NUCLEI=600
TIME_EST_FUZZ=900
TIME_EST_URLCHECKS=300
TIME_EST_JSCHECKS=300
TIME_EST_API=300
TIME_EST_GQL=180
TIME_EST_PARAM=240
TIME_EST_GRPC=120
TIME_EST_IIS=60
# TERM COLORS
bred='\033[1;31m'
bblue='\033[1;34m'
bgreen='\033[1;32m'
byellow='\033[1;33m'
red='\033[0;31m'
blue='\033[0;34m'
green='\033[0;32m'
cyan='\033[0;36m'
yellow='\033[0;33m'
reset='\033[0m'
DNS 解析器护栏:
- 缺失/空的解析器文件现在会在 DNS 暴力破解/解析开始前快速失败。
- 解析器下载可通过
RESOLVER_DOWNLOAD_CONNECT_TIMEOUT、RESOLVER_DOWNLOAD_MAX_TIME、RESOLVER_DOWNLOAD_RETRY和RESOLVER_DOWNLOAD_RETRY_DELAY进行配置。 DNS_BRUTE_TIMEOUT=0和DNS_RESOLVE_TIMEOUT=0默认禁用硬超时(推荐用于非常大的目标集)。心跳进度仍会每隔DNS_HEARTBEAT_INTERVAL_SECONDS打印一次。```bash DNS_BRUTE_TIMEOUT=4h DNS_RESOLVE_TIMEOUT=6h DNS_HEARTBEAT_INTERVAL_SECONDS=20
**完整详情**:请参阅[配置指南](https://github.com/six2dez/reconftw/wiki/3.-Configuration-file)。
---
## 🚀 使用方法
reconFTW 支持多种模式和选项,以实现灵活的信息收集。使用 `-h` 标志可查看帮助菜单。
### 目标选项
| 标志 | 描述 |
| ---- | ------------------------------------------------------------ |
| `-d` | 单个目标域名(例如,`example.com`) |
| `-l` | 包含目标域名列表的文件(每行一个) |
| `-m` | 多域名目标(例如,用于关联域名的公司名称) |
| `-x` | 排除子域名(范围外列表) |
| `-i` | 包含子域名(范围内列表) |
### 模式选项
| 标志 | 描述 |
| ---- | --------------------------------------------------------------------- |
| `-r` | **侦察**:完整侦察,不进行主动攻击 |
| `-s` | **子域名**:子域名枚举、Web 探测和接管检测 |
| `-p` | **被动**:仅进行被动侦察 |
| `-a` | **全部**:完整侦察加主动漏洞检查 |
| `-w` | **Web**:对特定 Web 目标进行漏洞检查 |
| `-n` | **OSINT**:OSINT 扫描,不进行子域名枚举或攻击 |
| `-z` | **极简**:轻量级侦察,包含基础检查和一些漏洞检测 |
| `-c` | **自定义**:运行特定功能(需要额外参数) |
| `-h` | 显示帮助菜单 |
### 通用选项
| 标志 | 描述 |
| ----------------- | -------------------------------------------------------- |
| `--deep` | 启用深度扫描(较慢,建议使用 VPS) |
| `-f` | 自定义配置文件路径 |
| `-o` | 结果输出目录 |
| `-v` | 启用 Ax 分布式扫描 |
| `--vps-count` | 覆盖本次运行的 Ax 集群实例数量 |
| `-q` | 设置速率限制(每秒请求数) |
| `-y` | 启用 AI 结果分析 |
| `--check-tools` | 如果缺少所需工具则退出 |
| `--quick-rescan` | 未发现新子域名/Web 时跳过重型模块 |
| `--health-check` | 运行系统健康检查并退出 |
| `--incremental` | 仅扫描自上次运行以来的新发现 |
| `--adaptive-rate` | 出错时自动调整速率限制(429/503) |
| `--dry-run` | 显示将要执行的命令而不实际运行 |
| `--parallel` | 并行运行独立功能(更快,占用更多内存) |
| `--no-parallel` | 即使启用了并行也强制顺序执行 |
| `--monitor` | 持续监控模式(单个目标;`-w` 支持 `-l`) |
| `--monitor-interval` | 监控周期之间的间隔(分钟) |
| `--monitor-cycles` | 在 N 个周期后停止(0 = 无限) |
| `--report-only` | 仅重建报告产物而不进行扫描 |
| `--refresh-cache` | 强制刷新缓存的解析器/字典 |
| `--export` | 导出产物:`json`、`html`、`csv` 或 `all` |
### 使用示例
1. **对单个目标进行完整侦察**: ```bash
./reconftw.sh -d target.com -r
- 对多个目标进行侦察: ```bash
./reconftw.sh -l targets.txt -r -o /path/to/output/
- 深度侦察(建议使用 VPS): ```bash
./reconftw.sh -d target.com -r --deep
- 并行模式(更快,但需要更多内存): ```bash
./reconftw.sh -d target.com -r --parallel
- 强制顺序模式: ```bash
./reconftw.sh -d target.com -r --no-parallel
- 多域侦察: ```bash
./reconftw.sh -m company -l domains.txt -r
- Ax 集成: ```bash
./reconftw.sh -d target.com -r -v
- Ax 与 fleet override 的集成: ```bash
./reconftw.sh -d target.com -r -v 30
- 带攻击的完整侦察(YOLO 模式): ```bash
./reconftw.sh -d target.com -a
- 显示帮助: ```bash ./reconftw.sh -h
11. **强制刷新缓存**: ```bash
./reconftw.sh -d target.com -r --refresh-cache
- 导出所有报告工件: ```bash ./reconftw.sh -d target.com -r --export all
13. **持续监控(每30分钟一次,共48个周期)**: ```bash
./reconftw.sh -d target.com -r --monitor --monitor-interval 30 --monitor-cycles 48
- 仅重建报告(不进行扫描): ```bash ./reconftw.sh -d target.com --report-only --export all
**完整指南**:参见[使用指南](https://github.com/six2dez/reconftw/wiki/2.-Usage-Guide)。
---
## ☁️ Ax 框架支持(原 Axiom)
reconFTW 与 [Ax](https://github.com/attacksurge/ax) 集成,用于分布式扫描,通过将任务分发到多个云实例来缩短执行时间。
- **设置**:在 Ax 配置(`axiom-configure`)期间选择 `reconftw` 作为供应器。
- **集群管理**:自动创建和销毁集群(`AXIOM_FLEET_LAUNCH`、`AXIOM_FLEET_SHUTDOWN`)或使用现有集群。
- **配置**:在 `reconftw.cfg` 中设置集群大小、区域和名称(`AXIOM_FLEET_COUNT`、`AXIOM_FLEET_REGIONS`、`AXIOM_FLEET_NAME`)。
**示例**:```bash
./reconftw.sh -d target.com -r -v
详细信息:请参阅官方 Ax 文档 和 attacksurge/ax 仓库。
💻 Faraday 支持
reconFTW 与 Faraday 集成,用于基于 Web 的报告和漏洞管理。
- 设置:安装 Faraday,通过
faraday-cli进行身份验证,并在reconftw.cfg(FARADAY_WORKSPACE)中配置工作区。 - 用法:在
reconftw.cfg中设置FARADAY=true以启用。
🧠 AI 集成
reconFTW 使用 AI 通过工具 reconftw_ai 根据扫描结果生成详细报告。
- 模型:可配置的 AI 模型(例如,通过
AI_MODEL设置llama3:8b)。 - 报告类型:Markdown 或纯文本(
AI_REPORT_TYPE)。 - 配置文件:高管、简报或漏洞猎人(
AI_REPORT_PROFILE)。 - 结构化输出:
reconftw将机器可读的报告存储在ai_result/reconftw_analysis.json中。 - 上下文控制:使用
AI_MAX_CHARS_PER_FILE和AI_MAX_FILES_PER_CATEGORY限制输入大小。 - 安全控制:使用
AI_REDACT和AI_STRICT切换编辑和严格模式。
示例:```yaml AI_EXECUTABLE="python3" AI_MODEL="llama3:8b" AI_REPORT_TYPE="md" AI_REPORT_PROFILE="bughunter" AI_MAX_CHARS_PER_FILE=50000 AI_MAX_FILES_PER_CATEGORY=200 AI_REDACT=true AI_ALLOW_MODEL_PULL=false AI_STRICT=false
---
## 🗂️ 数据管理
使用私有仓库安全地管理扫描数据和 API 密钥。
当 `ASSET_STORE=true` 时,reconFTW 会在每次运行期间将关键发现汇总到 `assets.jsonl` 中,从而便于仅将可操作的增量同步到您的私有仓库。
### Makefile
使用提供的 `Makefile` 轻松进行仓库管理(需要 [GitHub CLI](https://cli.github.com/))。
1. **初始化**: ```bash
export PRIV_REPO="$HOME/reconftw-data"
make bootstrap
- 与上游同步: ```bash
make sync
- 上传数据: ```bash
make upload
- Lint / 格式化脚本: ```bash
make lint # shellcheck for reconftw.sh, modules/*.sh & install.sh
make fmt # shfmt with project defaults
- 运行测试: ```bash
make test # unit tests (bats-core)
make test-all # unit + integration tests
手动操作
- 在 GitHub/GitLab 上创建一个私有仓库。
- 克隆并配置: ```bash
git clone https://github.com/yourusername/reconftw-data
cd reconftw-data
git commit --allow-empty -m "Initial commit"
git remote add upstream https://github.com/six2dez/reconftw
git fetch upstream
git rebase upstream/main master
- 上传更改: ```bash
git add .
git commit -m "Data upload"
git push origin master
- 更新工具: ```bash
git fetch upstream
git rebase upstream/main master
🧪 测试
reconFTW 使用 bats-core 进行自动化测试。
安装 bats-core```bash
macOS
brew install bats-core
Debian/Ubuntu
apt install bats
From source
git clone https://github.com/bats-core/bats-core.git /tmp/bats sudo /tmp/bats/install.sh /usr/local
### 运行测试```bash
# Unit tests only
make test
# Unit + integration tests
make test-all
# Via the runner script
./tests/run_tests.sh # unit only
./tests/run_tests.sh --all # unit + integration
测试目录结构```
tests/ ├── run_tests.sh # Test runner script ├── unit/ # Unit tests (fast, no network) │ ├── test_sanitize.bats │ ├── test_utils.bats │ └── test_validation.bats ├── integration/ # Integration tests (require installed tools) │ └── test_smoke.bats ├── security/ # Security tests (injection, etc.) │ └── test_injection.bats ├── mocks/ # Mock tools for offline testing └── fixtures/ # Shared test data files
### 运行安全测试```bash
# Test command injection prevention
make test-security
# Or directly
bats tests/security/
编写测试
测试使用 --source-only 模式来加载函数,而不会执行主脚本:```bash
#!/usr/bin/env bats
setup() { source ./reconftw.sh --source-only }
@test "sanitize_domain strips invalid chars" { result="$(sanitize_domain 'exam;ple.com')" [ "$result" = "example.com" ] }
### CI 流水线
GitHub Actions 工作流(`.github/workflows/tests.yml`)在每次推送和拉取请求时运行:
1. **ShellCheck** — 检查 `reconftw.sh`、`modules/*.sh` 和 `install.sh` 的代码规范
2. **单元测试** — 运行所有 `tests/unit/*.bats` 文件
3. **集成测试** — 安装 reconFTW 并验证工具的可用性
---
## 思维导图/工作流程

---
## 示例视频

---
## 🤝 如何贡献
请参阅 [CONTRIBUTING.md](https://github.com/six2dez/reconftw/blob/main/CONTRIBUTING.md) 获取完整的贡献指南,包括开发环境搭建、代码风格、测试和 PR 流程。
快速链接:
- [报告 Bug](https://github.com/six2dez/reconftw/issues/new/choose)
- [提交拉取请求](https://github.com/six2dez/reconftw/tree/dev)(目标分支为 `dev`)
- [行为准则](https://github.com/six2dez/reconftw/blob/main/CODE_OF_CONDUCT.md)
---
## 🔒 安全
有关安全策略、机密管理和漏洞报告,请参阅 [SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md)。
---
## ❓ 需要帮助?
- **Wiki**:浏览 [reconFTW Wiki](https://github.com/six2dez/reconftw/wiki)。
- **常见问题**:查看 [FAQ](https://github.com/six2dez/reconftw/wiki/7.-FAQs)。
- **社区**:加入 [Discord 服务器](https://discord.gg/R5DdXVEdTy) 或 [Telegram 群组](https://t.me/joinchat/TO_R8NYFhhbmI5co)。
---
## 💖 支持本项目
通过以下方式支持 reconFTW 的开发:
- **请我喝咖啡**:[buymeacoffee.com/six2dez](https://www.buymeacoffee.com/six2dez)
[<img src="https://assets.kitploit.com/production/public/readmes/670/1177bf77de4c288d45b816dd405a8b5027116f0b1893449986cf200c765707ad.webp">](https://www.buymeacoffee.com/six2dez)
- **DigitalOcean 推荐**:[推荐链接](https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)
<a href="https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"><img src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg" alt="DigitalOcean 推荐徽章" /></a>
- **GitHub 赞助**:[github.com/sponsors/six2dez](https://github.com/sponsors/six2dez)
---
## 🙏 致谢
特别感谢以下服务对 reconFTW 的支持:
- [C99](https://api.c99.nl/)
- [CIRCL](https://www.circl.lu/)
- [NetworksDB](https://networksdb.io/)
- [ipinfo](https://ipinfo.io/)
- [hackertarget](https://hackertarget.com/)
- [Censys](https://censys.io/)
- [Fofa](https://fofa.info/)
- [intelx](https://intelx.io/)
- [Whoxy](https://www.whoxy.com/)
---
## 📝 更新日志
请参阅 [CHANGELOG.md](https://github.com/six2dez/reconftw/blob/main/CHANGELOG.md) 获取每个版本的详细变更列表。
---
## 🛠️ 开发
### 项目结构```
reconftw/
├── reconftw.sh # Main entry point (~500 lines)
├── reconftw.cfg # Configuration file
├── modules/ # Phase modules
│ ├── utils.sh # Utilities, sanitization, caching, circuit breaker
│ ├── core.sh # Framework core, logging, lifecycle, health check
│ ├── modes.sh # Scan modes, argument parsing
│ ├── subdomains.sh # Subdomain enumeration
│ ├── web.sh # Web analysis, nuclei scans
│ ├── vulns.sh # Vulnerability scanning
│ ├── osint.sh # OSINT functions
│ └── axiom.sh # Ax/Axiom fleet helpers
├── lib/ # Pure utility libraries
│ └── validation.sh # Input validation functions
├── tests/ # Test suite (100+ tests)
│ ├── unit/ # Unit tests (bats)
│ ├── integration/ # Integration/smoke tests
│ └── security/ # Injection prevention tests
├── docs/ # Documentation
│ └── ARCHITECTURE.md # Detailed architecture guide
└── secrets.cfg.example # Template for API keys
运行测试```bash
make test # Unit tests make test-security # Security tests make test-all # All tests make lint # Shellcheck make lint-fix # Auto-fix with shfmt
### 开发工作流```bash
# 1. Source without executing (for testing)
source ./reconftw.sh --source-only
# 2. Test individual functions
sanitize_domain "test;domain.com"
# 3. Run health check
./reconftw.sh --health-check
# 4. Dry run to preview
./reconftw.sh -d example.com -r --dry-run
贡献
开发指南请参阅 CONTRIBUTING.md,技术细节请参阅 docs/ARCHITECTURE.md。
📜 许可证
reconFTW 依据 MIT 许可证 授权。