0xZiki/Recondo

GitHub: 0xZiki/Recondo

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

Stars: 0 | Forks: 0

# ⚡ RECONDO v2.0 ![Python 版本](https://img.shields.io/badge/python-3.8+-blue.svg) ![许可证](https://img.shields.io/badge/license-Propietary-red.svg) ![测试](https://img.shields.io/badge/tests-52%20passed-brightgreen.svg) ![覆盖率](https://img.shields.io/badge/coverage-75%25-green.svg) **高级 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安全, 主机安全, 指纹识别, 无后门, 聊天机器人, 蓝队分析, 逆向工具