pwnbox 是一款用 Rust 编写的自动化侦察与枚举工具,针对 HackTheBox 靶机一键完成从端口扫描到服务枚举、Web 爆破和凭据检测的全流程并生成报告。
pwnbox
针对于 HackTheBox 的自动化侦察与枚举工具,使用 Rust 编写。
将其指向一台靶机,然后去喝杯咖啡。等你回来时,你已经可以获得一份完整的端口扫描、服务枚举、默认凭据检测、目录爆破结果以及一份准备就绪的后续步骤清单。
## 工作原理
pwnbox 运行一个 **6 阶段的 pipeline** —— 每个阶段都会将结果传递给下一个阶段,并且耗时较长的任务(UDP、漏洞脚本、feroxbuster)会在后台运行,因此不会发生任何阻塞。
```
[0/6] Connectivity ping + TTL-based OS guess
[1/6] DNS zone transfer, reverse DNS, auto /etc/hosts
[2/6] TCP rustscan -> nmap -sC -sV on open ports
[bg] Vuln scan nmap --script vuln (background)
[3/6] UDP top 100 ports (background, needs sudo)
[4/6] Web curl, whatweb, feroxbuster, vhost brute (background)
[5/6] Services parallel: SSH, FTP, SMB, RPC, NFS, LDAP, Kerberos,
MySQL, PostgreSQL, Redis, MSSQL, SMTP, SNMP, WinRM
```
所有结果都会被收集到一份 **文本报告**、一份可选的 **JSON 报告**,以及保存好的 nmap 输出文件中,方便你稍后使用 grep 进行检索。
## 功能特性
- **20 个服务模块**,基于开放端口进行自动检测
- 通过 tokio 实现 **并行执行** —— 服务扫描、目录爆破、vhost 扫描均可并发运行
- 针对 MySQL、PostgreSQL、Redis、MSSQL、FTP 的 **默认凭据测试**
- **SSL 证书主机名发现** —— 从 HTTPS 证书中提取 CN/SAN
- **自动配置 /etc/hosts** —— 发现的主机名会被自动添加
- **`--fast` 模式** —— 仅进行 TCP + web 标头扫描,一分钟内即可完成
- **`--resume`** —— 在重复运行时复用缓存的 nmap 输出
- **`--watch N`** —— 每 N 分钟重新扫描一次端口,并在发生变化时发出警报
- **配置驱动** —— 字典、工具路径、超时设置全部集中在 `config.toml` 中
- **工具依赖检查器** —— 在启动时对缺失的工具发出警告
## 安装说明
### 快速安装 (Kali / Ubuntu / Debian)
```
sudo ./setup.sh
```
这将安装所有依赖项,并将 pwnbox 构建到 `/usr/local/bin/`。
### 手动安装
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo build --release
sudo cp target/release/pwnbox /usr/local/bin/
```
### 预编译二进制文件
```
chmod +x pwnbox
sudo mv pwnbox /usr/local/bin/
```
## 使用说明
```
pwnbox
[OPTIONS]
```
### 示例
```
# 全面扫描
pwnbox Lame 10.10.10.3
# 快速模式 — 仅 TCP + web headers
pwnbox Lame 10.10.10.3 --fast
# 跳过不需要的服务
pwnbox Lame 10.10.10.3 --skip smb,ldap,udp
# 恢复之前的扫描(复用缓存的 nmap 输出)
pwnbox Lame 10.10.10.3 --resume
# 在文本报告之外同时输出 JSON
pwnbox Lame 10.10.10.3 --json
# 监视模式 — 每 5 分钟重新扫描
pwnbox Lame 10.10.10.3 --watch 5
# 自定义输出目录
pwnbox Lame 10.10.10.3 -o /tmp/lame-scan
```
### 选项
| 参数标志 | 描述 |
|---|---|
| `-f, --fast` | 快速模式:仅进行 TCP 扫描 + web 标头获取 |
| `-s, --skip ` | 跳过指定服务(以逗号分隔,例如:`smb,ldap,udp`) |
| `--resume` | 复用上一次运行中缓存的 nmap 输出 |
| `--json` | 在生成文本报告的同时输出 JSON 报告 |
| `--watch ` | 每 N 分钟重新扫描一次端口,并在发生变化时发出警报 |
| `-o, --output ` | 输出目录(默认:`~/htb//`) |
| `-c, --config ` | 指定 config.toml 的路径 |
| `--init-config` | 生成默认的 `config.toml` 文件并退出 |
| `-v, --verbose` | 显示完整的工具输出 |
| `-t, --timeout ` | 每条命令的全局超时时间 |
| `--ferox-threads ` | Feroxbuster 的线程数 |
## 输出结果
报告将保存至 `~/htb//`:
```
~/htb/lame/
lame-20260331-180059.txt text report
lame-20260331-180059.json JSON report (with --json)
nmap-tcp.txt raw nmap TCP output
nmap-udp.txt raw nmap UDP output
nmap-vuln.txt vuln scan output
ferox-80.txt directory brute results
vhosts-443.txt virtual host discoveries
```
## 配置说明
```
pwnbox --init-config
```
配置文件查找顺序:`./config.toml` -> `~/.config/pwnbox/config.toml` -> 内置默认配置。
```
[defaults]
timeout = 300
ferox_threads = 50
fast = false
verbose = false
[wordlists]
dir_medium = ["/opt/SecLists/Discovery/Web-Content/raft-medium-directories.txt"]
dns_subdomains = ["/opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt"]
usernames = ["/opt/SecLists/Usernames/xato-net-10-million-usernames.txt"]
[tools]
# 如果工具不在 $PATH 中则覆盖工具路径(留空则使用默认值)
nmap = ""
rustscan = ""
feroxbuster = ""
```
## 必需工具
**必须安装**(缺少这些工具 pwnbox 将无法启动):
- `nmap`, `curl`, `ping`
**建议安装**(如果缺少,pwnbox 会发出警告):
- `rustscan` —— 快速端口发现
- `feroxbuster` —— 目录暴力破解
- `ffuf` 或 `gobuster` —— vhost 扫描
运行 `sudo ./setup.sh` 即可一次性安装所有工具。
## 从源码构建
```
cargo build --release
cargo test
cargo clippy -- -D warnings
```
需要 Rust 1.85+(2024 版本)。
## 开源协议
[MIT](LICENSE)