efti74/Sub-Domain-Enumeration-Tool-for-Linux
GitHub: efti74/Sub-Domain-Enumeration-Tool-for-Linux
一个基于 Bash 的 Linux 子域名枚举工作流,整合多种被动收集、DNS 验证和 HTTP 探测工具以实现自动化的安全侦察。
Stars: 0 | Forks: 0
# 子域名枚举
**由 Efti74 创建**
一个基于 Bash 的子域名侦察工作流,专为**授权的 Bug Bounty 和渗透测试范围**设计。它结合了被动发现、主动 DNS 枚举、排列生成、DNS 验证、HTTP/HTTPS 探测、状态码收集以及可选的 VHost 发现。
## 1. 克隆仓库
```
git clone
cd
```
发布后,请将上方的占位符替换为实际的 GitHub 仓库 URL 和目录名称。
## 2. 使脚本可执行
```
chmod +x install.sh sub_enum.sh
```
## 3. 首先安装必需的工具
在**运行侦察脚本之前**,请运行包含的依赖安装程序:
```
./install.sh
```
安装程序会尝试安装或检测该工作流所使用的依赖项,包括:
- Subfinder
- Amass
- Assetfinder
- Findomain
- Sublist3r
- curl
- jq
- Gobuster
- PureDNS
- MassDNS
- AlterX
- dnsx
- **ProjectDiscovery httpx**
- ffuf
- SecLists/wordlists
不同 Linux 发行版之间的软件包可用性有所不同。如果某个依赖项无法自动安装,`install.sh` 会打印一条 **警告**。在开始完整的侦察运行之前,请从其官方项目/包源手动安装所有缺失的依赖项。
安装完成后,请检查验证输出。不要忽略针对您期望工作流使用的工具的 `[WARNING] ... missing` 消息。
有关详细说明和故障排除,请阅读 [`TOOLS.md`](TOOLS.md)。
## 4. 验证主脚本
首次运行之前:
```
bash -n ./sub_enum.sh
```
如果该命令没有输出任何内容,则说明 Bash 语法是有效的。
您还可以查看可用的选项:
```
./sub_enum.sh --help
```
## 5. 运行子域名枚举
### 推荐初学者使用:交互模式
只需运行:
```
./sub_enum.sh
```
脚本将以交互方式询问配置信息。
示例:
```
============================================================
Sub Domain Enumeration
Created by Efti74
============================================================
Interactive setup (optional fields can be skipped by pressing Enter)
------------------------------------------------------------------
Target domain (required, e.g. example.com): example.com
Wordlist [optional - Enter = default]:
PureDNS resolver list [optional - Enter = skip]:
Base URL for ffuf [optional - Enter = skip]:
Output directory [optional - Enter = automatic]:
Threads [optional - Enter = 50]:
Run active enumeration? [Y/n - Enter = Yes]:
Enable ffuf VHost stage? [Y/n - Enter = Yes]:
```
只有**目标域名是必填的**。对于可选问题,按 **Enter** 键即可使用默认值或跳过该功能。
输入根域名,例如:
```
example.com
```
请勿输入任意的 URL 路径,例如:
```
https://example.com/login/page
```
可选的 **Base URL** 提示是专门用于 ffuf VHost 发现的,可以接受如下值:
```
https://example.com
```
### 命令行模式
您可以通过提供参数来跳过交互式问题。
基础用法:
```
./sub_enum.sh -d example.com
```
自定义字典:
```
./sub_enum.sh \
-d example.com \
-w /path/to/subdomains-wordlist.txt
```
自定义 PureDNS resolver 列表:
```
./sub_enum.sh \
-d example.com \
-r /path/to/resolvers.txt
```
可选的 ffuf VHost 发现:
```
./sub_enum.sh \
-d example.com \
-u https://example.com
```
自定义输出目录:
```
./sub_enum.sh \
-d example.com \
-o recon_example
```
自定义并发:
```
./sub_enum.sh \
-d example.com \
-t 100
```
被动/低噪音模式:
```
./sub_enum.sh \
-d example.com \
--no-active
```
仅禁用 ffuf:
```
./sub_enum.sh \
-d example.com \
--no-ffuf
```
## 6. 推荐的首次运行流程
对于全新的 Linux 安装,请严格遵循以下顺序:
```
# 1. Enter the cloned repository
cd
# 2. Make scripts executable
chmod +x install.sh sub_enum.sh
# 3. Install/check dependencies
./install.sh
# 4. Resolve every important MISSING/WARNING dependency
# shown by install.sh before continuing.
# 5. Validate Bash syntax
bash -n ./sub_enum.sh
# 6. Start interactive reconnaissance
./sub_enum.sh
```
或者,在依赖项准备就绪后:
```
./sub_enum.sh -d example.com
```
## 7. 关键的 ProjectDiscovery httpx 检查
存在多个名为 `httpx` 的程序。本项目需要的是 **ProjectDiscovery httpx**,而不是 Python 的 HTTPX CLI。
在首次完整运行之前,请验证:
```
type -a httpx
httpx -h 2>&1 | grep -E -- '-l|-status-code|-json'
```
正确的工具支持如下选项:
```
-l
-status-code
-json
```
如果您收到:
```
Error: No such option: -l
```
则说明执行了错误的 `httpx`。
如果 ProjectDiscovery httpx 是使用 Go 安装的,请尝试:
```
export PATH="$HOME/go/bin:$PATH"
hash -r
```
然后再次验证:
```
httpx -version
httpx -h 2>&1 | grep -E -- '-l|-status-code|-json'
```
有关更多故障排除信息,请参阅 `TOOLS.md`。
## 8. 字典说明
SecLists 路径因 Linux 发行版而异。
如果脚本中配置的默认字典不存在,请找到您安装的 DNS 字典并明确指定它:
```
./sub_enum.sh \
-d example.com \
-w /path/to/subdomains-top1million-20000.txt
```
在使用自定义字典之前:
```
test -f /path/to/wordlist.txt && wc -l /path/to/wordlist.txt
```
## 9. 理解结果
结果目录包含以下文件:
```
passive_unique.txt
all_candidates_unique.txt
resolved_subdomains.txt
dns_records.txt
httpx.jsonl
live_urls.txt
live_with_status.txt
dns_alive_but_no_http.txt
vhost_candidates_ffuf.txt
raw/
```
重要文件:
- **`resolved_subdomains.txt`** — 当 DNS 验证工具可用时,这是经过 DNS 验证的主要子域名清单。
- **`live_urls.txt`** — 有 HTTP/HTTPS 响应的 URL。
- **`live_with_status.txt`** — 存活的 URL 信息,包括 HTTP 状态码和其他收集的元数据。
- **`httpx.jsonl`** — 结构化的 ProjectDiscovery httpx 输出。
- **`dns_alive_but_no_http.txt`** — DNS 解析正常但对 HTTP/HTTPS 探测无响应的主机。
- **`vhost_candidates_ffuf.txt`** — VHost 候选者;这些与 DNS 子域名分开存放。
- **`raw/`** — 每个工具的原始结果和中间结果,有助于故障排除。
空文件**并不总是意味着零发现**。某个工具可能缺失、被跳过、超时或失败。在解读空结果之前,请检查终端警告和 `TOOLS.md`。
## 依赖清单
`requirements.txt` 列出了项目依赖项,但它**不是 Python 的 pip requirements 文件**。
请勿使用:
```
pip install -r requirements.txt
```
大多数依赖项是 Linux/Go 安全工具。请使用:
```
./install.sh
```
并手动安装安装程序报告为不可用的任何内容。
## 文档
- `README.md` — 安装和使用说明。
- `TOOLS.md` — 逐个工具的解释和故障排除。
- `requirements.txt` — 依赖清单。
- `install.sh` — 尽力而为的依赖安装程序/检查器。
- `sub_enum.sh` — 主侦察脚本。
## 法律和授权声明
仅在您获得明确授权进行测试的域和系统上使用此项目。请遵守目标的 Bug Bounty 或渗透测试范围、自动化限制和速率限制。您需自行负责遵守适用法律和计划规则。
标签:Bash, GitHub, 代码生成, 子域名枚举, 实时处理, 应用安全, 数字取证, 渗透测试工具, 系统安全, 自动化脚本, 运行时操纵