0xZiki/Recondo
GitHub: 0xZiki/Recondo
Recondo 是一款具备隐身能力的高级 Web 侦察与内容发现工具,集 CMS 指纹识别、智能误报过滤和代理自动轮换于一体,帮助安全人员高效且隐蔽地完成目标站点资产探测。
Stars: 0 | Forks: 0
# ⚡ RECONDO v2.0




**高级 Web 侦察与内容发现** — 智能隐身 | CMS 指纹识别 | 零噪声
```
╔═══════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ ███████╗ ██████╗ ██████╗ ███╗ ██╗██████╗ ██████╗ ║
║ ██╔══██╗██╔════╝██╔════╝██╔═══██╗████╗ ██║██╔══██╗██╔═══██╗ ║
║ ██████╔╝█████╗ ██║ ██║ ██║██╔██╗ ██║██║ ██║██║ ██║ ║
║ ██╔══██╗██╔══╝ ██║ ██║ ██║██║╚██╗██║██║ ██║██║ ██║ ║
║ ██║ ██║███████╗╚██████╗╚██████╔╝██║ ╚████║██████╔╝╚██████╔╝ ║
║ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝ ╚═════╝ ║
║ ║
║ Web Reconnaissance Tool — Stealth & Smart ║
║ Version 2.0 — Architecture Complete created by :0xZiki ║
╚═══════════════════════════════════════════════════════════════════╝
v2.0 - Advanced Web Recon
```
## 🎯 功能
| # | 功能 | 描述 |
|---|---------|-------------|
| 1 | **智能 404 检测** | 消除误报 — 检测自定义错误页面并将其忽略 |
| 2 | **CMS 指纹识别** | 识别 WordPress、Joomla、Drupal 及其版本和置信度评分 |
| 3 | **4 级分类** | 🛑 严重 · 🔥 高危 · ⚠️ 中危 · ℹ️ 低危 — 优先处理重要事项 |
| 4 | **代理预检** | 在扫描前验证代理 — 自动丢弃死代理 |
| 5 | **恢复与检查点** | Ctrl+C?没问题 — 使用 `--resume` 从中断处继续 |
| 6 | **动态抖动** | 请求间的随机延迟可打破模式检测并规避速率限制 |
| 7 | **智能 429 处理** | 自动降速并遵守 Retry‑After 标头 |
| 8 | **身份轮换** | 每次请求轮换 User‑Agent 和标头 — 真实的浏览器指纹 |
| 9 | **自动获取代理** | 自动从公开来源获取并验证免费代理 |
| 10 | **支持自定义字典** | 通过 `--wordlist` 标志或 `.env` 使用您自己的字典 |
## 📋 要求
- **Python 3.8+**
- **无需 root 权限** — 以普通用户身份运行
- **外部库**(通过 `requirements.txt` 安装):
- `requests>=2.31.0`
- `python-dotenv>=1.0.0`
- `lxml>=5.0.0`
- `colorama>=0.4.6`
- `pysocks>=1.7.1`
## 🛡️ OPSEC 与配置(.env 文件)
为了维护严格的操作安全 (OPSEC) 并避免将敏感的隐身配置泄露到 GitHub 或蓝队,Recondo 使用了环境变量。
### 设置说明:
1. **切勿**修改核心脚本来硬编码您的机密信息。
2. 复制提供的示例文件以创建您的本地机密配置:
cp .env.example .env
3. 使用您的操作数值编辑新创建的 `.env` 文件。
**可用的环境变量:**
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `TARGET_URL` | **必填** | 目标网站(例如 `https://example.com`) |
| `THREADS` | `10` | 并发工作线程数(1–50) |
| `DELAY_MIN` | `1.0` | 请求间最小延迟(秒) |
| `DELAY_MAX` | `3.0` | 请求间最大延迟(秒) |
| `PROXY_LIST` | 空 | 逗号分隔的代理列表(例如 `http://proxy1:8080,http://proxy2:8080`) |
| `AUTO_FETCH_PROXIES` | `false` | 自动从公开来源获取并验证免费代理 |
| `MAX_PROXIES` | `30` | 要获取的最大代理数量(启用自动获取时) |
| `PROXY_CACHE_FILE` | `proxies_cache.json` | 用于缓存已验证代理的文件 |
| `TIMEOUT` | `10` | 请求超时(秒) |
| `OUTPUT_DIR` | `results` | 报告目录 |
| `OUTPUT_FORMAT` | `json` | 报告格式(`json`、`txt`、`html`) |
| `WORDLIST_PATH` | 空 | 自定义字典文件的路径 |
| `EXTERNAL_WORDLIST` | 空 | 自定义字典文件的路径(别名) |
| `FLUSH_INTERVAL` | `1000` | 写入磁盘前缓冲的发现结果数量 |
| `CHECKPOINT_INTERVAL` | `100` | 两次检查点保存之间的请求数 |
| `PROXY_HEALTH_CHECK_INTERVAL` | `50` | 两次代理健康检查之间的请求数 |
| `PROXY_RETRY_COUNT` | `2` | 每个代理的重试次数 |
| `ERROR_LOG_FILE` | `logs/errors.log` | 错误日志文件的路径 |
## 🚀 用法
### 快速开始
```
# 显示所有可用命令
python main.py --help
```
### 扫描模式 — 全面侦察
```
# 基础扫描
python main.py scan --url https://target.com
# 使用自定义 wordlist 扫描
python main.py scan --url https://target.com --wordlist /path/to/wordlist.txt
# 断点续扫(从上次 checkpoint 继续)
python main.py scan --url https://target.com --resume
# 使用来自 .env 的自定义 wordlist
python main.py scan --url https://target.com
```
### CMS 指纹识别
```
# 识别目标上运行的 CMS
python main.py fingerprint --url https://target.com
# 输出示例:
# CMS: wordpress
# Version: 6.4.2
# Confidence: 95%
```
### 配置检查
```
# 在扫描前验证你的 .env 设置
python main.py check
```
## 📁 项目结构
```
Recondo/
├── src/ # Core source code
│ ├── core/ # Foundation
│ │ ├── engine.py # Scan orchestrator
│ │ ├── fetcher.py # HTTP client with stealth & auto-proxy
│ │ ├── parser.py # Response analysis
│ │ └── identity_manager.py # HTTP identity rotation
│ ├── modules/ # Specialized features
│ │ ├── fingerprint.py # CMS identification
│ │ ├── classifier.py # Severity classification
│ │ └── reporter.py # Report generation
│ ├── config/ # Configuration
│ │ ├── settings.py # .env loader
│ │ └── validators.py # Input validation
│ └── utils/ # Utilities
│ ├── decorators.py # Timing, retry, error logging
│ ├── proxy_manager.py # Auto-proxy fetching & validation
│ └── models.py # Data contracts (loose coupling)
├── maps/ # CMS path databases
│ ├── wordpress_map.json
│ ├── joomla_map.json
│ └── drupal_map.json
├── tests/ # Unit tests (28+ tests, 100% pass)
│ └── test_engine.py
├── requirements.txt # Dependencies
├── .env.example # Configuration template
└── main.py # Entry point
```
## 🏗️ 架构
```
Recondo Engine
├── Engine (Orchestrator) ← Central controller
│ ├── Phase 1: Fingerprint ← CMS detection (WordPress/Joomla/Drupal)
│ ├── Phase 2: Load Paths ← From CMS map or custom wordlist
│ ├── Phase 3: Baseline ← Detect custom 404 pages
│ ├── Phase 4: Scan ← Multi‑threaded (ThreadPoolExecutor)
│ └── Phase 5: Report ← JSON/TXT/HTML generation
├── Fetcher (Stealth HTTP) ← All network communication
│ ├── Auto-Proxy Fetching ← Fetches free proxies from public sources
│ ├── Proxy Rotation ← Round‑robin with pre‑flight check
│ ├── Identity Rotation ← User‑Agent + headers rotation
│ ├── Dynamic Jitter ← Random delays (DELAY_MIN ↔ DELAY_MAX)
│ └── Smart 429 Handling ← Auto‑throttle + Retry‑After respect
├── Parser (Response Analysis) ← Smart 404 detection
│ ├── Content‑Length Compare ← Baseline vs response
│ ├── Error Keyword Detection ← 404 / Not Found / Oops...
│ └── Body Hash Comparison ← Identical custom error pages
├── Classifier (Severity) ← 4‑level classification
│ ├── CRITICAL ← Configs, .env, SQL dumps, passwords
│ ├── HIGH ← Admin panels, backups, .htaccess
│ ├── MEDIUM ← Logs, robots.txt, cron endpoints
│ └── LOW ← CSS, JS, images, readme files
└── Reporter (Output) ← Report generation
├── JSON ← Machine‑readable (structured)
├── TXT ← Human‑readable (console style)
└── HTML ← Rich interactive report (with colors)
```
## 🛠️ 工程说明
- **线程安全:** 结果缓冲区使用 `threading.Lock()` 进行安全的并发写入 — 无竞态条件。
- **内存管理:** 每 `FLUSH_INTERVAL` 次将结果刷写到磁盘,以防止 OOM (内存不足)。
- **检查点系统:** 每 `CHECKPOINT_INTERVAL` 次保存一次进度 — 使用 `--resume` 恢复。
- **智能 404 检测:** 比较内容长度、正文哈希和错误关键字 — 消除误报。
- **全局异常处理:** 每个线程都封装在 `try/except` 中 — 单个工作线程的失败不会导致整个扫描崩溃。
- **松耦合:** 所有组件都通过 `models.py` 中的契约进行通信 — 易于扩展。
- **代理预热:** 在扫描前测试每个代理 — 自动移除死代理。
- **自动获取代理:** 当 `AUTO_FETCH_PROXIES=true` 时,自动从公开来源获取并验证免费代理。
## 📄 输出示例
### 控制台输出(实时扫描)
```
============================================================
RECONDO — Scan Complete
============================================================
Paths Scanned: 2500/2500
Total Findings: 18
🔴 Critical: 2 🔥 High: 4 ⚠️ Medium: 5 ℹ️ Low: 7
Errors: 0
Time Elapsed: 45.2s
Report: results/recondo_report_20260119_153000.html
============================================================
```
### HTML 报告 — 交互式仪表板
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 🛡️ Recondo — Web Reconnaissance Report │
│ Generated: 2026-01-19 15:30:00 │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Total: 18│ │ 🔴 Crit: 2│ │ 🔥 High: 4│ │
│ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────────────────┤
│ Severity │ Path │ Status │ Reason │
│ 🔴 CRIT │ /wp-config.php │ 200 │ Config │
│ 🔴 CRIT │ /.env │ 200 │ Secrets │
│ 🔥 HIGH │ /wp-admin/ │ 200 │ Admin │
│ 🔥 HIGH │ /backup.sql │ 200 │ DB Dump │
└─────────────────────────────────────────────────────────────────────────────┘
```
### JSON 输出 — 机器可读
```
{
"tool": "Recondo v2.0",
"timestamp": "2026-01-19T15:30:00",
"stats": {
"total_paths": 2500,
"scanned": 2500,
"findings": 18,
"errors": 0,
"elapsed": 45.2
},
"findings_by_severity": {
"critical": 2,
"high": 4,
"medium": 5,
"low": 7
},
"findings": [
{
"path": "/wp-config.php",
"severity": "critical",
"reason": "WordPress configuration file (DB credentials)",
"status_code": 200,
"content_length": 1234,
"response_time": 0.35
}
]
}
```
## 🔧 所有选项
| 命令 | 选项 | 描述 |
|---------|--------|-------------|
| `scan` | `--url` | 目标 URL(覆盖 `.env`) |
| `scan` | `--wordlist` | 自定义字典文件的路径(覆盖 `.env`) |
| `scan` | `--resume` | 从上一个检查点恢复 |
| `fingerprint` | `--url`(必填) | 用于 CMS 识别的目标 URL |
| `check` | — | 验证 `.env` 配置 |
## 🚚 对比:Recondo 与行业标准工具
| 功能 | Recondo | Gobuster | Dirb | FFUF |
|---------|---------|----------|------|------|
| 智能 404 检测 | ✅ | ❌ | ❌ | ❌ |
| CMS 指纹识别 | ✅ | ❌ | ❌ | ❌ |
| 严重性分类 | ✅ | ❌ | ❌ | ❌ |
| 恢复/检查点 | ✅ | ✅ | ❌ | ✅ |
| 代理预检 | ✅ | ✅ | ❌ | ✅ |
| 自动获取代理 | ✅ | ❌ | ❌ | ❌ |
| 动态抖动 | ✅ | ❌ | ❌ | ❌ |
| 身份轮换 | ✅ | ❌ | ❌ | ❌ |
| HTML 报告 | ✅ | ❌ | ❌ | ❌ |
| 429 处理 | ✅ | ❌ | ❌ | ❌ |
## 🧪 测试
```
# 运行所有测试并附带 coverage
python -m pytest tests/ -v
# 预期输出:68 passed, 0 failed
```
### 测试覆盖率报告
```
Name Stmts Miss Cover
--------------------------------------------------
src/__init__.py 0 0 100%
src/config/__init__.py 2 0 100%
src/config/settings.py 45 20 56%
src/config/validators.py 62 21 66%
src/core/__init__.py 4 0 100%
src/core/engine.py 228 58 75%
src/core/fetcher.py 158 68 57%
src/core/identity_manager.py 31 1 97%
src/core/parser.py 69 6 91%
src/models.py 61 1 98%
src/modules/__init__.py 3 0 100%
src/modules/classifier.py 31 0 100%
src/modules/fingerprint.py 88 18 80%
src/modules/reporter.py 123 5 96%
src/utils/__init__.py 2 0 100%
src/utils/decorators.py 41 20 51%
src/utils/proxy_manager.py 111 30 73%
--------------------------------------------------
TOTAL 1059 248 77%
```
## ⚠️ 免责声明
此工具仅设计用于授权的渗透测试、CTF 比赛和教育目的。在大多数司法管辖区,未经明确许可在他人网络或网站上使用它属于违法行为。全部责任由用户承担。
## 📝 许可证
仅用于教育和授权的渗透测试目的。
## 📞 联系方式
Recondo 团队 — 为了安全社区,用 🖤 打造
## ⭐ 为我们点赞
如果您觉得此工具很有用,请给我们点个星!⭐ 这有助于其他人发现该工具。
标签:C2日志可视化, Python, Web安全, 主机安全, 指纹识别, 无后门, 聊天机器人, 蓝队分析, 逆向工具