stxkxs/recon

GitHub: stxkxs/recon

一个快速、模块化的基础设施侦察工具包,通过27个模块收集域名和IP的DNS、SSL、HTTP、WHOIS等信息并生成安全评分报告。

Stars: 0 | Forks: 0

# 侦察 一个快速、模块化的基础设施侦察工具包,专为 SRE 和安全团队设计。 ``` _ __ ___ ___ ___ _ __ | '__/ _ \/ __/ _ \| '_ \ | | | __/ (_| (_) | | | | |_| \___|\___\___/|_| |_| ``` [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Bash 4+](https://img.shields.io/badge/bash-4%2B-green.svg)](https://www.gnu.org/software/bash/) ## 概述 Recon 对域名和 IP 地址执行被动侦察,收集 DNS 记录、SSL 证书、HTTP 标头、WHOIS 数据、技术指纹、端口状态、CORS 配置、WAF/CDN 检测、证书透明度日志等信息。它与 Shodan、VirusTotal 和 SecurityTrails 集成以获取丰富的情报,生成安全态势评分,并能生成自包含的 HTML 报告。专为以下场景设计: - **事件响应**:快速收集可疑域名的上下文信息 - **基础设施审计**:验证 DNS、SSL 和安全标头配置 - **安全评估**:通过可操作的建议对安全态势进行评分 - **竞争分析**:了解技术栈和基础设施选择 - **资产发现**:查找子域名、开放端口和相关基础设施 ## 功能特性 - **模块化架构** - 27 个模块,可运行特定模块或一次性全部运行 - **安全评分** - A-F 字母等级及可操作的建议 - **HTML 报告** - 导出自包含的深色主题 HTML 报告 - **CORS 分析** - 检测 CORS 配置错误和源反射 - **端口扫描** - 扫描 20 个常见服务端口的 TCP 状态 - **WAF/CDN 检测** - 对 Web 应用防火墙和 CDN 进行被动指纹识别 - **DNSSEC 验证** - 链条验证和配置分析 - **接管检测** - 子域名接管漏洞扫描 - **API 集成** - Shodan, VirusTotal, SecurityTrails, Wayback Machine - **邮件安全** - SPF, DMARC, DKIM 和 BIMI 分析 - **JS 分析** - 从 JavaScript 中提取 secrets、endpoint 和依赖项 - **目录发现** - 敏感文件和路径枚举 - **双重输出** - 人类可读的终端输出或用于自动化的 JSON - **批量处理** - 并行执行数百个目标的扫描 - **检查点/恢复** - 中断的任务可以恢复 - **配置驱动** - YAML 配置,支持环境变量覆盖 - **Charm/gum UI** - 安装 [gum](https://github.com/charmbracelet/gum) 后增强终端输出 - **Docker 支持** - 容器化以保持环境一致性 ## 快速开始 ``` # Clone the repo git clone https://github.com/stxkxs/recon.git cd recon # 针对域名运行 ./bin/recon example.com # 用于自动化的 JSON 输出 ./bin/recon --json example.com | jq . # 仅特定模块 ./bin/recon -m dns,ssl example.com # 安全评分 ./bin/recon -s example.com # HTML 报告 ./bin/recon --report report.html example.com # 仅端口扫描 ./bin/recon -m ports example.com # CORS 分析 ./bin/recon -m cors example.com # WAF/CDN 检测 ./bin/recon -m waf example.com # 邮件安全分析 ./bin/recon -m emailsec -s example.com # IP 侦察 ./bin/recon 8.8.8.8 # 批处理 ./bin/recon --batch targets.txt --parallel 4 ``` ## 安装 ### 前置条件 | 必需 | 可选 | |----------|----------| | bash 4+ | yq (YAML config) | | dig | timeout (coreutils) | | curl | flock (batch locking) | | openssl | gum (enhanced UI) | | whois | nc (banner grabbing) | | jq | nmap (enhanced port scanning) | **macOS:** ``` # bash 4+ (macOS 自带 bash 3.2) brew install bash # 其他依赖 brew install bind curl openssl whois jq yq # 可选:Charm gum 用于增强终端 UI brew install gum ``` **Ubuntu/Debian:** ``` apt-get install bash dnsutils curl openssl whois jq yq # 可选:gum mkdir -p /etc/apt/keyrings curl -fsSL https://repo.charm.sh/apt/gpg.key | gpg --dearmor -o /etc/apt/keyrings/charm.gpg echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | tee /etc/apt/sources.list.d/charm.list apt-get update && apt-get install gum ``` ### 安装 ``` # 验证依赖 make check-deps # 安装到 /usr/local (需要 sudo) sudo make install # 或者安装到 ~/.local (用户安装,无需 sudo) make install-local # 验证安装 recon --version ``` ### Docker ``` # 构建镜像 make docker-build # 运行 docker run --rm -it recon:latest example.com docker run --rm -it recon:latest --json example.com # 使用 docker-compose cd docker docker-compose run --rm recon example.com ``` ## 使用方法 ``` Usage: recon [options] recon --batch [options] Arguments: Domain or IP address to scan Options: -h, --help Show this help message -v, --version Show version information -j, --json Output results as JSON -o, --output FILE Write output to file -m, --modules LIST Comma-separated list of modules to run -c, --config FILE Use custom config file -q, --quiet Suppress banner and progress output -s, --score Run security scoring after scan -r, --report FILE Generate HTML report to file --list-modules List available modules Batch Processing: -b, --batch FILE Process multiple targets from file -p, --parallel N Number of parallel workers (default: 4) --resume Resume interrupted batch --list-batches List recent batch runs ``` ## 模块 | 模块 | 描述 | 收集的数据 | |--------|-------------|----------------| | `dns` | DNS 枚举 | A, AAAA, MX, TXT, NS, CAA, DMARC, DKIM 记录 | | `subdomain` | 子域名发现 | 来自 80+ 条目词典的常见子域名 | | `crt` | 证书透明度 | 搜索 CT 日志以查找子域名和证书 | | `ssl` | SSL/TLS 分析 | 证书链、有效期、SANs、TLS 版本 | | `http` | HTTP 标头 | 安全标头、服务器信息、重定向 | | `whois` | WHOIS 查询 | 组织、网络名称、国家、CIDR | | `files` | 常见文件 | robots.txt, security.txt, sitemap.xml, well-known | | `tech` | 技术检测 | 前端框架、分析工具、CDN/基础设施 | | `ip` | IP 侦察 | 反向 DNS, ASN, 地理位置提示 | | `ports` | 端口扫描 | 20 个常见 TCP 端口及服务识别 | | `cors` | CORS 分析 | 配置错误检测、源反射、风险等级 | | `waf` | WAF/CDN 检测 | 通过标头指纹识别防火墙和 CDN | | `dnssec` | DNSSEC 验证 | DNSSEC 链验证和配置状态 | | `takeover` | 子域名接管 | 悬空 CNAME 和接管漏洞检测 | | `shodan` | Shodan 情报 | 开放端口、服务、漏洞、OS 指纹识别 | | `virustotal` | VirusTotal 信誉 | 域名/IP 信誉、检测到的 URL、威胁类别 | | `wayback` | Wayback Machine | 历史 URL 发现和端点枚举 | | `securitytrails` | SecurityTrails | DNS 历史、关联域名、子域名 | | `reverseip` | 反向 IP 查询 | 托管在同一 IP 地址上的域名 | | `asn` | ASN 扩展 | ASN 详情、IP 前缀枚举、对等网络 | | `axfr` | 区域传送测试 | DNS AXFR 区域传送漏洞检测 | | `methods` | HTTP 方法 | 每个端点允许的 HTTP 方法枚举 | | `dirs` | 目录发现 | 敏感文件、管理面板、备份文件、配置文件 | | `jsanalysis` | JS 分析 | JavaScript 文件中的 secrets、API endpoint、依赖项 | | `favicon` | Favicon 哈希 | Favicon 哈希指纹识别以进行技术识别 | | `emailsec` | 邮件安全 | SPF, DMARC, DKIM, BIMI 验证和分析 | | `score` | 安全评分 | A-F 字母等级、类别细分、建议 | **默认模块:** - 域名:`dns`, `subdomain`, `crt`, `ssl`, `http`, `whois`, `files`, `tech`, `ports`, `cors`, `waf`, `dnssec`, `shodan`, `virustotal`, `wayback`, `securitytrails`, `axfr`, `methods`, `dirs`, `jsanalysis`, `favicon` - IP:`ip`, `ports`, `shodan`, `virustotal`, `reverseip`, `asn` - 扫描后:`score`, `takeover`, `emailsec`(使用 `-s` 标志或显式运行) ## 安全评分 使用 `-s` 运行以获取安全态势评分: ``` recon -s example.com ``` 评分评估: | 类别 | 权重 | 检查项 | |----------|--------|--------| | 传输安全 | 25 分 | HTTPS, HSTS, HTTP 重定向 | | 邮件安全 | 15 分 | SPF, DMARC, DKIM | | 证书健康 | 15 分 | 有效 SSL, CAA 记录 | | 安全标头 | 25 分 | CSP, X-Frame-Options, XCTO, Referrer-Policy, Permissions-Policy | | 基础设施 | 10 分 | 多个 nameserver, security.txt | 等级:**A** (90%+), **B** (80%+), **C** (70%+), **D** (60%+), **F** (<60%) ## HTML 报告 生成自包含的 HTML 报告: ``` recon --report report.html example.com ``` 报告包含所有扫描数据,采用深色主题、响应式布局,并包含评分可视化、颜色编码的发现结果和结构化表格。 ## 示例 ### 基础侦察 ``` # 带终端输出的完整扫描 recon example.com # 快速 DNS 检查 recon -m dns example.com # SSL 和 HTTP 安全分析 recon -m ssl,http example.com # 保存结果到文件 recon --json example.com -o results.json # 安静模式 (无 banner) recon -q example.com ``` ### 安全评估 ``` # 带安全评分的完整扫描 recon -s example.com # 生成带评分的 HTML 报告 recon --report audit.html -s example.com # 检查 CORS 配置 recon -m cors example.com # 仅端口扫描 recon -m ports example.com # 组合安全检查 recon -m http,ssl,cors,ports -s example.com # 子域名接管检查 recon -m subdomain,crt,takeover example.com # JavaScript secrets 扫描 recon -m jsanalysis example.com # 完整邮件安全审计 recon -m dns,emailsec -s example.com ``` ### 使用 JSON 输出 ``` # 美观打印完整结果 recon --json example.com | jq . # 提取 A 记录 recon --json example.com | jq '.results.dns.data.a' # 获取所有发现的子域名 recon --json example.com | jq '.results.subdomain.data.found[].fqdn' # 检查安全头 recon --json example.com | jq '.results.http.data.urls[0].security_headers' # 获取安全评分 recon --json -s example.com | jq '.results.score.data | {grade, percentage, recommendations}' # 获取开放端口 recon --json example.com | jq '.results.ports.data.open[] | {port, service}' # 检查 CORS 风险等级 recon --json example.com | jq '.results.cors.data | {risk, findings}' # 构建摘要报告 recon --json -s example.com | jq '{ domain: .target, grade: .results.score.data.grade, ips: .results.dns.data.a, nameservers: .results.dns.data.ns, open_ports: [.results.ports.data.open[].port], cors_risk: .results.cors.data.risk, subdomains: [.results.subdomain.data.found[].fqdn], ssl_issuer: .results.ssl.data.certificates[0].issuer, technologies: .results.tech.data }' ``` ### 批量处理 ``` # 创建目标文件 (每行一个) cat > targets.txt << 'EOF' example.com github.com cloudflare.com EOF # 使用 8 个并行 worker 处理 recon --batch targets.txt --parallel 8 # 恢复中断的批处理 recon --resume # 查看批处理历史 recon --list-batches # 结果保存至 ~/.local/share/recon/results/ ``` ### 输入归一化 Recon 自动对输入进行归一化: ``` # 所有这些都是等效的: recon example.com recon EXAMPLE.COM recon https://example.com recon https://example.com/path/to/page recon " example.com " ``` ## 配置 ### 配置文件 创建 `~/.config/recon/recon.yaml` 或 `./recon.yaml`: ``` global: output_dir: "~/.local/share/recon/results" output_format: "terminal" # terminal | json color: "auto" # auto | always | never retention_days: 30 timeouts: dns: 5 http: 10 ssl: 5 whois: 15 ports: 2 batch: max_parallel: 4 checkpoint_interval: 10 resume_on_start: true rate_limits: requests_per_second: 2 whois_delay: 1 modules: dns: enabled: true record_types: [A, AAAA, MX, TXT, NS, CAA] subdomain: enabled: true wordlist: "" # empty = use built-in ssl: enabled: true http: enabled: true whois: enabled: true files: enabled: true tech: enabled: true ip: enabled: true ports: enabled: true cors: enabled: true crt: enabled: true waf: enabled: true dnssec: enabled: true takeover: enabled: true shodan: enabled: true virustotal: enabled: true wayback: enabled: true securitytrails: enabled: true reverseip: enabled: true asn: enabled: true axfr: enabled: true methods: enabled: true dirs: enabled: true wordlist: "" # empty = use built-in request_delay: 0.2 jsanalysis: enabled: true max_files: 20 max_file_size: 2097152 favicon: enabled: true emailsec: enabled: true score: enabled: true # 用于增强情报的 API keys api_keys: shodan: "" securitytrails: "" virustotal: "" ``` 参阅 [`etc/recon.yaml.example`](etc/recon.yaml.example) 获取完整模板。 ### 环境变量 环境变量会覆盖配置文件中的值: ``` export RECON_OUTPUT_FORMAT=json export RECON_COLOR=never export RECON_TIMEOUT_DNS=10 export RECON_TIMEOUT_HTTP=20 export RECON_PARALLEL=8 export RECON_API_SHODAN=your_api_key export RECON_API_VIRUSTOTAL=your_api_key export RECON_API_SECURITYTRAILS=your_api_key ``` ## JSON Schema ``` { "meta": { "version": "2.1.0", "run_id": "20240201-143022-a1b2c3", "started_at": "2024-02-01T14:30:22Z", "ended_at": "2024-02-01T14:31:45Z", "target_original": "https://example.com", "target_normalized": "example.com" }, "target": "example.com", "results": { "dns": { "status": "success", "data": { "a": ["93.184.216.34"], "aaaa": ["2606:2800:220:1:248:1893:25c8:1946"], "mx": [{"priority": 10, "host": "mail.example.com."}], "txt": ["v=spf1 -all"], "ns": ["ns1.example.com.", "ns2.example.com."], "caa": ["0 issue \"letsencrypt.org\""], "dmarc": "v=DMARC1; p=reject", "dkim": {"google": "v=DKIM1; ..."} } }, "ports": { "status": "success", "data": { "open": [ {"port": 80, "service": "http", "state": "open", "banner": null}, {"port": 443, "service": "https", "state": "open", "banner": null} ], "closed": [22, 21, 3306], "total_scanned": 20 } }, "cors": { "status": "success", "data": { "url": "https://example.com", "tests": [], "findings": [], "risk": "none" } }, "waf": { "status": "success", "data": { "detected": true, "provider": "Cloudflare", "confidence": "high" } }, "shodan": { "status": "success", "data": { "ip": "93.184.216.34", "ports": [80, 443], "vulns": [], "os": "Linux" } }, "score": { "status": "success", "data": { "score": 85, "max_score": 100, "percentage": 85, "grade": "B", "passed": 12, "failed": 3, "checks": [], "recommendations": ["Add Content-Security-Policy header"] } } }, "errors": [], "conflicts": [], "summary": { "modules_run": 27, "modules_success": 27, "modules_partial": 0, "modules_failed": 0, "total_errors": 0, "total_conflicts": 0 } } ``` ## 项目结构 ``` recon/ ├── bin/ │ └── recon # Main entry point ├── lib/ │ ├── core/ │ │ ├── common.sh # Colors, logging, utilities │ │ ├── config.sh # YAML config loading │ │ ├── input.sh # Input normalization & validation │ │ ├── output.sh # JSON formatters │ │ ├── state.sh # Checkpoint/resume state │ │ ├── ui.sh # Charm/gum UI integration │ │ └── report.sh # HTML report generation │ ├── modules/ │ │ ├── dns.sh # DNS enumeration │ │ ├── subdomain.sh # Subdomain discovery │ │ ├── crt.sh # Certificate Transparency │ │ ├── ssl.sh # SSL/TLS analysis │ │ ├── http.sh # HTTP header analysis │ │ ├── whois.sh # WHOIS lookups │ │ ├── files.sh # Common files check │ │ ├── tech.sh # Technology detection │ │ ├── ip.sh # IP-specific recon │ │ ├── ports.sh # TCP port scanning │ │ ├── cors.sh # CORS misconfiguration detection │ │ ├── waf.sh # WAF/CDN detection │ │ ├── dnssec.sh # DNSSEC validation │ │ ├── takeover.sh # Subdomain takeover detection │ │ ├── shodan.sh # Shodan intelligence │ │ ├── virustotal.sh # VirusTotal reputation │ │ ├── wayback.sh # Wayback Machine discovery │ │ ├── securitytrails.sh # SecurityTrails intelligence │ │ ├── reverseip.sh # Reverse IP lookup │ │ ├── asn.sh # ASN expansion │ │ ├── axfr.sh # Zone transfer testing │ │ ├── methods.sh # HTTP methods enumeration │ │ ├── dirs.sh # Directory discovery │ │ ├── jsanalysis.sh # JavaScript analysis │ │ ├── favicon.sh # Favicon hash fingerprinting │ │ ├── emailsec.sh # Email security analysis │ │ └── score.sh # Security posture scoring │ └── batch/ │ ├── runner.sh # Batch orchestration │ └── progress.sh # Progress tracking ├── etc/ │ ├── recon.yaml.example # Config template │ └── subdomains.txt # Default wordlist (82 entries) ├── docker/ │ ├── Dockerfile │ └── docker-compose.yaml ├── tests/ │ ├── test_input.sh # Input normalization tests │ ├── test_output.sh # JSON output tests │ ├── test_modules.sh # Module unit tests (all 27 modules) │ ├── test_crt.sh # Certificate Transparency tests │ ├── test_shodan.sh # Shodan module tests │ ├── test_virustotal.sh # VirusTotal module tests │ ├── test_waf.sh # WAF detection tests │ ├── test_dnssec.sh # DNSSEC validation tests │ ├── test_takeover.sh # Subdomain takeover tests │ ├── test_wayback.sh # Wayback Machine tests │ ├── test_securitytrails.sh # SecurityTrails tests │ ├── test_reverseip.sh # Reverse IP tests │ ├── test_asn.sh # ASN expansion tests │ ├── test_axfr.sh # Zone transfer tests │ ├── test_methods.sh # HTTP methods tests │ ├── test_dirs.sh # Directory discovery tests │ ├── test_jsanalysis.sh # JavaScript analysis tests │ ├── test_favicon.sh # Favicon hashing tests │ ├── test_emailsec.sh # Email security tests │ └── test_integration.sh # End-to-end tests ├── Makefile ├── LICENSE └── README.md ``` ## 开发 ``` # 运行所有测试 make test # 运行特定测试套件 bash tests/test_input.sh # Input normalization bash tests/test_output.sh # JSON output bash tests/test_modules.sh # All 27 modules bash tests/test_integration.sh # End-to-end bash tests/test_shodan.sh # Individual module tests # ... 20 个测试文件,共 873 个测试 # 使用 shellcheck 进行 Lint make lint # 检查依赖 make check-deps # 演示运行 make demo # Terminal output make demo-json # JSON output ``` ### 添加新模块 1. 创建 `lib/modules/mymodule.sh`: ``` #!/usr/bin/env bash [[ -n "${_RECON_MODULE_MYMODULE_LOADED:-}" ]] && return 0 _RECON_MODULE_MYMODULE_LOADED=1 # 运行模块 - 返回 JSON mymodule_run() { local target=$1 # ... gather data ... echo '{"key": "value"}' } # 打印终端输出 mymodule_print() { local json=$1 local target=$2 header "MY MODULE - $target" # ... format output ... } # 检查依赖 mymodule_check() { check_dependencies mytool } ``` 2. 在 `bin/recon` 中注册: ``` MODULES[mymodule]="mymodule_run:mymodule_print:mymodule_check" DOMAIN_MODULES+=(mymodule) ``` 3. 在 `bin/recon` 中引入: ``` source "${PROJECT_ROOT}/lib/modules/mymodule.sh" ``` ## 安全注意事项 - **仅被动模式**:Recon 仅执行被动/半被动侦察 - **无认证**:不尝试进行身份验证或登录 - **速率限制**:针对 WHOIS 和其他有速率限制的服务配置了延迟 - **遵守 robots.txt**:仅检查其是否存在,不爬取禁止的路径 ## 路线图 - [x] API 集成 (Shodan, SecurityTrails, VirusTotal, Wayback Machine) - [x] 邮件安全分析 (SPF, DMARC, DKIM, BIMI) - [x] WAF/CDN 检测和 DNSSEC 验证 - [x] 子域名接管检测 - [x] JavaScript 分析和目录发现 - [ ] AWS 集成 (Route53, EC2 metadata) - [ ] 可选增强工具 (subfinder, httpx) - [ ] 历史比较 / 变更检测 - [ ] 用于监控的 Webhook 通知 - [ ] Web UI 仪表板 ## 贡献 欢迎贡献!请: 1. Fork 本仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 进行更改 4. 运行测试 (`make test`) 5. 提交 (`git commit -m 'Add amazing feature'`) 6. 推送 (`git push origin feature/amazing-feature`) 7. 打开一个 Pull Request ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE)。 ## 致谢 - 灵感来源于安全社区中的各种侦察工具 - 使用标准 Unix 工具构建,以实现最大的可移植性 - 在可用时使用 [Charm](https://charm.sh) 工具进行增强
标签:Ask搜索, Bash 脚本, C2日志可视化, CDN 检测, Cloudflare, CORS 分析, DNS 分析, GitHub, HTML 报告, HTTP/HTTPS抓包, JS 分析, MITRE ATT&CK, SRE, SSL 证书, Talos规则, VirusTotal, WAF 检测, 主动扫描, 侦察工具, 偏差过滤, 动态插桩, 反取证, 域名信息收集, 基础设施审计, 子域名接管, 安全评估, 实时处理, 密码管理, 库, 应急响应, 应用安全, 态势感知, 指纹识别, 插件系统, 数据统计, 电子邮箱安全, 端口扫描, 请求拦截