ANANSI CLI 是一款用 Go 编写的命令行攻击面情报引擎,通过六阶段自动化 pipeline 完成子域名发现、主机探测、TLS 分析、安全标头审计、暴露路径检测和子域名接管排查。
## 功能简介
ANANSI CLI 是一款终端优先的攻击面侦查工具,专为渗透测试人员和漏洞赏金猎人打造。只需提供一个域名,它就会运行完整的六阶段情报 pipeline,并打印出您可以立即采取行动的原始技术输出。
默认情况下,ANANSI 会过滤掉干扰信息,仅显示**已发现的**资产(例如:存活子域名、活跃的 HTTP/HTTPS 主机、成功的 TLS 证书、存活 URL 上缺失的安全标头、暴露的路径以及已确认的接管)。这能让您的终端保持整洁。如果您想查看所有尝试过的检查,包括已失效的子域名、失败的连接以及未检查的 endpoint,只需启用 **verbose** 标志(`-v`/`--verbose`)。
|
阶段 |
模块 |
发现内容 |
|-------|--------|---------------|
| 01 | **DISCOVERY** | 通过 crt.sh CT logs + DNS 暴力破解字典发现子域名 |
| 02 | **PROBE** | 存活的 HTTP/HTTPS 主机 — 状态码、服务器、重定向链、标题 |
| 03 | **TLS** | 证书过期时间、SANs、协议版本、密码套件、自签名检测 |
| 04 | **HEADERS** | 缺失的安全标头、CORS 配置错误 |
| 05 | **PATHS** | 暴露的文件 — `.env`、`.git`、配置文件、管理面板、备份、API 文档 |
| 06 | **TAKEOVER** | 指向未被声明的云服务的悬空 CNAME |
## 性能与架构
- **原生 Go DNS 解析器**:使用纯 Go goroutines 绕过缓慢的 `cgo` 阻塞的系统查询。
- **并发探测**:HTTP 探测、TLS 分析和安全标头检查完全并行化。
- **智能接管过滤**:仅针对已验证的失效 CNAME 记录的子域名。
- **并行暴露路径探测**:并发获取自定义的 404 基线。
## 安装
### 选项 1 — 下载二进制文件(无需 Go)
```
# Linux x86_64
curl -L https://github.com/QYVORA/qyvora-anansi-cli/releases/latest/download/anansi-linux-amd64 -o anansi
chmod +x anansi
sudo mv anansi /usr/local/bin/
# Linux arm64 (Raspberry Pi, 等)
curl -L https://github.com/QYVORA/qyvora-anansi-cli/releases/latest/download/anansi-linux-arm64 -o anansi
chmod +x anansi
sudo mv anansi /usr/local/bin/
# macOS (Apple Silicon)
curl -L https://github.com/QYVORA/qyvora-anansi-cli/releases/latest/download/anansi-macos-arm64 -o anansi
chmod +x anansi
sudo mv anansi /usr/local/bin/
# macOS (Intel)
curl -L https://github.com/QYVORA/qyvora-anansi-cli/releases/latest/download/anansi-macos-amd64 -o anansi
chmod +x anansi
sudo mv anansi /usr/local/bin/
```
### 选项 2 — 从源码构建(自动化)
**要求:** Go 1.22+ 及活跃的互联网连接。
```
git clone https://github.com/QYVORA/qyvora-anansi-cli
cd qyvora-anansi-cli
./install.sh
```
安装程序会验证您的依赖项,下载软件包,构建已剥离的二进制文件,并自动将其配置到您的环境变量路径中。该二进制文件具有**零 runtime 依赖**。
## 用法
```
# Clean scan — 仅显示发现的资产(默认)
anansi target.com
# 对已解析的子域名进行递归暴力破解
anansi target.com -r
# Verbose scan — 显示所有发现和未发现的输出
anansi target.com -v
# 子域名变异扫描
anansi target.com -m
# 扫描备用端口(默认:80,443)
anansi target.com -p 80,443,8080,8443
# 使用毫秒级延迟进行速率限制
anansi target.com --delay 100
# Deep scan — 更大的 wordlist,扩展的路径规则
anansi target.com --deep
# 运行特定模块
anansi target.com --modules discovery,probe,takeover
# 自定义单次请求超时(默认:5s)
anansi target.com --timeout 10
# 配置并发线程池(默认:50)
anansi target.com --threads 100
# JSON 输出
anansi target.com --out json > results.json
anansi target.com --out json | jq '.Findings[] | select(.Severity == "CRITICAL")'
# Markdown 输出
anansi target.com --out markdown > recon.md
# HTML 输出 — 高级暗色模式报告
anansi target.com --out html > report.html
```
### 标志
|
标志 |
简写 |
默认值 |
描述 |
|------|-----------|---------|-------------|
| `--recursive` | `-r` | false | 对已解析的子域名启用递归子域名暴力破解 |
| `--verbose` | `-v` | false | 启用 verbose 输出(显示所有已发现及未发现/失败的资产) |
| `--mutate` | `-m` | false | 根据已解析的前缀启用子域名变异暴力破解 |
| `--ports` | `-p` | 80,443 | 要探测的备用端口(逗号分隔列表) |
| `--delay` | | 0 | 请求之间的延迟(以毫秒为单位),用于速率限制 |
| `--deep` | | false | 更大的子域名字典 + 更多路径探测规则 |
| `--out` | | terminal | 输出格式:`terminal` \| `json` \| `markdown` \| `html` |
| `--timeout` | | 5 | 单次请求超时时间(以秒为单位) |
| `--threads` | `-t` | 50 | 扫描时使用的并发线程数 |
| `--stealth` | | false | 启用 stealth 模式:随机 User-Agent、抖动、跳过 crt.sh、减少噪声 |
| `--modules` | | all | 要运行的模块的逗号分隔列表 |
### `--modules` 可用模块名称
`discovery` `probe` `tls` `headers` `paths` `takeover`
## 输出
┌─────────────────────────────────────────────────────────┐
│ ANANSI 攻击面情报引擎 │
│ 目标 target.com │
│ 时间 2025-06-01 14:22:01 UTC │
│ 作者 QYVORA OffSec // qyvora.netlify.app │
└─────────────────────────────────────────────────────────┘
══ 阶段 01 ── DISCOVERY // 子域名枚举 + DNS 解析
────────────────────────────────────────────────────────────────
来源: crt.sh=12 字典=3 san=2
api.target.com 104.21.44.12 crt.sh LIVE
dev.target.com 104.21.44.13 crt.sh LIVE
old.target.com — wordlist DEAD
CNAME → target.herokuapp.com
══ 阶段 05 ── PATHS // 暴露端点 + 文件检测
────────────────────────────────────────────────────────────────
[严重] 暴露的 .env 文件
资产: https://api.target.com/.env
修复: 限制或禁止公开访问 /.env。
══ 阶段 06 ── TAKEOVER // 悬空 CNAME 检测
────────────────────────────────────────────────────────────────
[严重] 子域名接管 — Heroku
资产: old.target.com
修复: 移除悬空的 CNAME 或声明 Heroku 资源。
══ 总结 ──────────────────────────────────────────────────────
目标 target.com
耗时 1m43s
子域名 发现 17 个,存活 11 个
风险评分 74/100
发现结果 严重:3 高危:7 中危:4 低危:6 信息:2
## 项目结构
```
anansi-cli/
├── main.go # Entry point
├── go.mod # Go module + dependencies
├── cmd/
│ └── root.go # CLI command, flags, phase orchestration
└── internal/
├── output/
│ ├── types.go # Shared data structures
│ └── terminal.go # Terminal/JSON/HTML/Markdown renderer
├── discovery/
│ └── discovery.go # crt.sh + DNS brute-force enumeration
├── probe/
│ └── probe.go # HTTP/HTTPS surface probing
├── tls/
│ └── tls.go # TLS certificate analysis + SAN discovery
├── headers/
│ └── headers.go # Security header audit + CORS check
├── paths/
│ └── paths.go # Exposed path + file detection
└── takeover/
└── takeover.go # Subdomain takeover detection
```
## 开发初衷
渗透测试和漏洞金社区主要在 Linux 终端上运作。优秀的工具应该是能够专精于一项任务且毫不拖沓的单个二进制文件。无需 Web UI,无需云账号,也无需 API key。
ANANSI CLI 是完整 ANANSI 平台的便携伴侣 —— 这是一个内置于 QYVORA OffSec 生态系统中的、由 API 驱动的攻击面情报服务。相同的检测逻辑。相同的输出理念。CLI 用于您的笔记本电脑,API 用于您的 pipeline。
## 法律声明
仅扫描您拥有或已获得明确书面授权进行测试的目标。在大多数司法管辖区,未经授权的扫描是非法的。QYVORA OffSec 对本工具的滥用不承担任何责任。
## 许可证
MIT — 尽情 fork、扩展和集成它。感谢保留署名。
## 贡献
欢迎提交 PR。如需进行重大更改,请先提 Issue。如果您添加了新的路径规则、接管指纹或检测模块 —— 请提交 PR。我们的目标是保持二进制文件体积小巧,且情报信号精准高效。
QYVORA // 加纳,塔马利
非洲的网络安全正在蓬勃发展。我们正在培养其背后的中坚力量。