bryanflowers/wpsecscan

GitHub: bryanflowers/wpsecscan

一款开源的 WordPress 防御性安全扫描器,通过聚合 8 个 CVE 数据源执行 226 项安全检查并提供多格式合规报告。

Stars: 1 | Forks: 1

# WPSecScan [![tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/b7/b76436d9f0781ac9d5833a7b5dff2e25ef5251e33eb577b1d4649701faf39513.svg)](https://github.com/bryanflowers/wpsecscan/actions/workflows/tests.yml) [![CVE feed](https://static.pigsec.cn/wp-content/uploads/repos/cas/e0/e0bd30b67647ef8045d5d42d5e3c3db5e75afb88f979efea6a7345a577aaf527.svg)](https://github.com/bryanflowers/wpsecscan/actions/workflows/cve-feed.yml) [![license](https://img.shields.io/github/license/bryanflowers/wpsecscan)](LICENSE) [![release](https://img.shields.io/github/v/release/bryanflowers/wpsecscan)](https://github.com/bryanflowers/wpsecscan/releases/latest) [![downloads](https://img.shields.io/github/downloads/bryanflowers/wpsecscan/total)](https://github.com/bryanflowers/wpsecscan/releases) [![python](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/) [![checks](https://img.shields.io/badge/checks-293%2B-brightgreen)](FEATURES.md) [![CVE sources](https://img.shields.io/badge/CVE%20sources-8-blue)](docs/data-sources.md) [![tests passing](https://img.shields.io/badge/tests-1066%20passing-brightgreen)](tests/) [![PyPI](https://img.shields.io/pypi/v/wpsecscan)](https://pypi.org/project/wpsecscan/) [![SLSA Level 3](https://img.shields.io/badge/SLSA-Level%203-success)](docs/verify-release.md) [![Sigstore signed](https://img.shields.io/badge/Sigstore-signed-blueviolet)](docs/verify-release.md) [![threat-intel](https://img.shields.io/badge/threat--intel-10%20providers-orange)](FEATURES.md) **来源最全面的 WordPress 漏洞扫描器 — 开源,AGPLv3,本地运行。** 涵盖 18 个类别的 226 项检查。**8 源夜间 CVE 聚合器** (NVD + GHSA + Mitre + OSV + Wordfence + WPVulnerability + CIRCL + Patchstack)。**SLSA L3 + Sigstore 签名发布**。**10 提供商 威胁情报联盟** (CISA KEV, EPSS, Exploit-DB, Metasploit, ATT&CK Navigator, STIX, MISP, OpenCTI, OTX, GreyNoise)。**持续 监控** (CT/DNS/WHOIS/RBL/honeypot/auto-rollback)。**主动 漏洞验证** 具有严格的同意授权机制。**企业 模式**: OIDC + SAML + RBAC + audit-log + approval workflow + multi-tenant + quotas。**分发**: Docker, K8s, Homebrew, Snap, Flatpak, winget, AUR, Chocolatey。 原有主标题: 为您提供比任何单一付费或免费服务更新、更完整的漏洞数据库。完全在您的机器上运行 — 没有遥测,没有按站点授权,没有任何数据离开您的设备。 以两个独立的 Windows 可执行文件形式发布 — 运行它们的机器上无需安装 Python。 - **`wpsecscan.exe`** — 命令行扫描器。输出:console + HTML + JSON + CSV + SARIF + Markdown + Excel (XLSX) + executive PDF + Burp scope XML + CycloneDX SBOM + shields.io status badge SVG。 - **`wpsecscan-gui.exe`** — 完整的 GUI,带有实时进度树、发现详情、risk score、 扫描配置文件、多目标队列、定时扫描、webhook 警报、exploit playbook 等。 - **`wpsecscan-companion.zip`** — WordPress 插件,暴露一个只读、token 控制的 REST endpoint,以便扫描器在一次往返中获取权威诊断信息(与 HTTP probe 猜测相比,插件/主题检测的准确性提高 3 倍)。 ### 为什么人们转向 WPSecScan - **8 源 CVE 聚合器** 每晚在我们的基础设施上运行 — 拉取 Wordfence + NVD + GitHub Security Advisories + Mitre CVE List + OSV.dev + WPVulnerability.com + CIRCL + Patchstack 并将它们合并为一个 feed。 用户可以获得比单独使用 Wordfence/Patchstack 严格来说更新、更完整的数据库。**8 个来源中有 6 个是完全免费的,无需密钥。** - **每日数据库刷新 + 每 CVE webhook 警报** — `wpsecscan schedule install` 在 Windows Task Scheduler / macOS launchd / Linux systemd 上注册每日 02:00 的 CVE 刷新 + 每周 03:00 的站点扫描。 `wpsecscan db subscribe https://hooks.slack.com/...` 会在您安装的插件出现新 CVE 的那一刻触发。 - **每项检查映射 15 个合规框架**:OWASP Top 10 + MITRE ATT&CK + CWE + D3FEND + PCI-DSS 4.0 + NIST 800-53 + ISO 27001 + HIPAA + FERPA + SOC 2 + FedRAMP + GDPR + HITRUST CSF v11.4 + CMMC 2.0 + NIST CSF 2.0 + CIS Critical Controls v8 + ISO 27001:2022 Annex A。 - **11 种报告格式**:HTML、JSON、CSV、SARIF 2.1.0、Markdown、Excel (带有按 OWASP 类别分组的 XLSX 表格)、executive PDF、CycloneDX SBOM、 Burp Suite scope XML、attestation PDF、shields.io status-badge SVG。 - **10 个第三方集成**,包括 Burp Suite 项目 XML、 OWASP ZAP 发现导入、Nuclei 模板自动拉取、JIRA / Linear / GitHub Issues 批量创建、Wordfence 云同步、Sucuri SiteCheck、 Patchstack + WPScan 回写、WP Engine / Kinsta / WP.com 主机 API。 - **AI 辅助修复**,具有 PII 掩码 + prompt-injection 防护 + 每个后端的成本跟踪。自带 OpenAI / Anthropic / Ollama / llama.cpp 密钥。**`WPSECSCAN_NO_AI=1` 可硬禁用。** - **隐私优先**:无遥测,本地运行,支持 SOCKS5/HTTP 代理(Tor 友好),`WPSECSCAN_NO_NETWORK=1` 可用于 air-gapped 模式。 ## 快速安装 ### 选项 A — `pip install wpsecscan` (任何平台) 在 Linux、macOS 或带有 Python 的 Windows 上最简单的路径: ``` pip install wpsecscan wpsecscan --version wpsecscan https://example.com --json-only ``` PyPI: 对于可选的 GUI 最小化到托盘功能,请使用 `[ui]` 额外包安装(引入 Pillow + pystray): ``` pip install "wpsecscan[ui]" ``` 其他可选的额外包:`[pdf]`(用于真正的 PDF executive 报告的 reportlab), `[browser]`(用于 headless DOM-XSS 的 playwright),`[yaml]`(用于 daemon 配置的 pyyaml),`[ops]`(用于企业模式的 redis + bcrypt),或 `[all]` 安装所有内容。 ### 选项 B — 预构建的 Windows 可执行文件 1. 打开此文件夹中的 `dist\`。 2. 将 `wpsecscan.exe` 和 `wpsecscan-gui.exe` 复制到 PATH 上的某个位置 (例如 `C:\Tools\` 或 `C:\Users\\bin\`)。 3. 完成。不需要 Python,不需要安装程序,不需要管理员权限。 第一次运行它们时,Windows SmartScreen 可能会警告发布者未知 (这些二进制文件没有代码签名)。点击 **More info → Run anyway**。 ### 选项 C — 从源码构建 需要 Python 3.10+ 和 PyInstaller。在项目根目录打开 PowerShell: ``` .\build.ps1 ``` 这会在 `.venv\` 中创建一个 virtualenv,从 `requirements.txt` 安装依赖, 并运行 PyInstaller。输出: ``` dist\wpsecscan.exe # CLI (~17 MB) dist\wpsecscan-gui.exe # GUI (~17 MB) ``` 两者都是单文件可执行程序 — 将它们复制到任何地方,它们都能独立运行。 ### 选项 D — 直接从源码运行(开发) ``` python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install . python run.py https://example.com # CLI python run_gui.py # GUI pytest # 780 tests ``` ## 首次扫描 ### GUI 1. 双击 `wpsecscan-gui.exe`。 2. 将 URL 粘贴到 URL 字段中(例如 `https://your-wp-site.com`)。 3. 点击 **Scan**。观察左侧的实时树,点击任何发现以阅读 证据、修复方案和 *Exploit Playbook*(具体的 sqlmap/Metasploit/curl/nuclei 命令)。 4. 扫描完成后,顶部的 **Risk Score** 徽章会显示颜色编码的 `0-100` (绿/黄/橙/红)。HTML 和 JSON 报告将保存到您的用户文件夹中。 ### CLI ``` # 简单扫描,HTML + JSON 保存到当前目录 wpsecscan.exe https://your-wp-site.com # 自定义输出文件夹 wpsecscan.exe https://your-wp-site.com --out C:\scans\ # 仅 JSON,无 HTML wpsecscan.exe https://your-wp-site.com --json-only --out C:\scans\ # 从文件中指定多个目标 wpsecscan.exe --file my-sites.txt --concurrency 5 --out C:\scans\ # Aggressive 模式(主动 payload 检查 — SQLi、XSS、SSRF 等) wpsecscan.exe https://your-wp-site.com --aggressive # 认证扫描 wpsecscan.exe https://your-wp-site.com --auth-user admin --auth-pass # 使用已保存的 WPScan API token 进行更丰富的 plugin CVE 查找 wpsecscan.exe https://your-wp-site.com --wpscan-token ``` **退出代码**:`0` = 干净 / 仅信息 · `1` = 中危发现 · `2` = 严重或高危发现 · `130` = Ctrl+C。 ### v2.8.x 子命令族 ``` # 从已保存的 JSON 报告中生成 14 种格式中的任意一种(SBOM、CEF、LEEF、 # HIPAA/FedRAMP/CMMC 映射、risk-CSV、attestation letter 等) wpsecscan emit cef report.json --out splunk-events.cef wpsecscan emit spdx-sbom report.json --out sbom.json # 将已保存的报告推送到 16 个目标位置中的一个 wpsecscan push gitlab-ci report.json # GitLab Code Quality JSON wpsecscan push sentry report.json # Sentry release-health correlation (v2.8.3) wpsecscan push defectdojo report.json # DefectDojo SARIF import (v2.8.3) wpsecscan push chat report.json # Mattermost / RocketChat / Telegram # AI 助手(基于 LLM;遵循现有的 AI provider 配置) wpsecscan ai injection-check response.txt wpsecscan ai control-map report.json --framework hipaa wpsecscan ai waf-rule finding.json --target-waf cloudflare # v2.8.3 # v2.8.3 实用工具 wpsecscan init # interactive first-run wizard wpsecscan check disable wpgraphql # skip a check on future scans wpsecscan benchmark https://example.com # time each check individually wpsecscan export-config # show effective merged config wpsecscan compare-pypi-version # is the installed version current? # v2.8.4 — mobile API + GUI Phase 4 wpsecscan-mobile-api # PWA backend + GUI launcher with QR enrol # 在 GUI 中:File 菜单 → Push to… / Export As… / AI(16 个 push、14 个 export、6 个 AI 子项) # 右键点击 finding 以获取 "Push to…" / "AI explain" / "Export As…" 上下文菜单项。 # 新增 31 项测试,添加了 CodeQL Python SAST workflow。 # v2.8.5 — bug 修复 + CI 修复版本 # 3 个 Critical(gui _save_pref lock TOCTOU race、scanner parallel-groups WAF streak、 # history .json/.sig atomic ordering),10 个 High(mobile_api dead /findings/ branch、 # do_OPTIONS scope、POST /api/scan rate-limit、QR-URL token leak、PhotoImage base64、 # cdn_edge_audit precedence、payment_commerce or-await、a11y walrus、sites atomic、 # creds_vault RMW),7 个 Medium,1 个语法修复(3.10/3.11 CI green),新增 17 项 regression tests。 ``` ## 检查内容 (226 项检查) 被动检查始终运行;主动检查需要 `--aggressive`。 - **侦察 (Recon)**:WP 核心版本 · 插件枚举 (slug + version) · 主题枚举 · 用户枚举 (`?author=`, REST `wp/v2/users`) - **攻击面 (Surface)**:40+ 暴露路径探测 (`.env`, `wp-config.php.bak`, `.git/config`, debug.log, backup-plugin dumps, phpinfo, adminer, …) · WebDAV / OPTIONS 枚举 · beta/test/debug 查询参数发现 - **认证面 (Auth surface)**:`wp-login.php` + XML-RPC 方法枚举 + `system.multicall` 放大器检查 + rate-limit 探测 · OAuth2/OIDC 发现审计 · SAML / XSW endpoint 发现 · JWT 审计 (`alg=none` + 弱 HS256 暴力破解) - **传输 (Transport)**:TLS 版本、证书过期、HSTS、CSP、X-Frame-Options、Referrer-Policy、Permissions-Policy、cookie 标志 - **APIs**:REST namespace 映射、REST OPTIONS 写入方法枚举、WPGraphQL introspection、CORS 配置错误(包含 `null` origin 反射的完整 preflight 矩阵) - **防御态势 (Defensive posture)**:WAF / CDN 检测 · WAF 规则集识别 (CRS / AWS / Cloudflare Managed / Wordfence Premium) · DNS SPF / DMARC / DKIM · security.txt · AbuseIPDB 信誉 (opt-in) - **供应链 (Supply-chain)**:外部 JS 主机 + SRI hash 检查 · source-map 暴露 · JS 库版本审计 · S3 bucket 发现 + public-ACL 探测 · GitHub 泄露 token 搜索 (opt-in,使用 AKIA/sk_live_/ghp_/etc. 扫描您的域名。) - **子域攻击面 (Subdomain attack surface)**:certificate-transparency 发现 · dangling-CDN 接管候选 · **cookie-tossing 链**检测 (apex-cookie + 可接管子域) - **服务器指纹 (Server fingerprint)**:Server-Timing, X-Request-ID, X-Debug-Token 泄露 - **CVE 匹配**:7000+ Wordfence CVE + 307 个高置信度 exploit 特征 + 224 个现代 payload · CISA KEV 目录丰富 · EPSS 百分位评分 · VirusTotal URL/IP 丰富 (opt-in) - **主动 (Aggressive)** (`--aggressive`):SQLi (基于错误 + time-blind escalator) · 反射型 XSS · SSRF · 路径遍历 · 开放重定向 · 文件上传 · 默认凭据 (最多 10 个) · SSTI (7 个模板引擎) · NoSQL operator injection · 路径规范化绕过 (`..%2f`, `..;/`, …) · race-condition 探测 (并行 POSTs) · 主动 HTTP smuggling (CL.TE / TE.CL) · headless DOM-XSS (Playwright,可选) - **深度 (Deep)** (`--deep-throttle`):以 5-60s 的节奏进行 10-500 次错误密码尝试,以映射您的登录限流阈值 (合成的虚假用户,固定的错误密码 — 绝非暴力破解) - **已认证 (Authenticated)** (`--auth-user`/`--auth-pass`):登录,审计用户角色、插件、Site Health、选项 ### Round-54 添加内容 (Nov 2026 — A1-G4 目录) WPSecScan 从 80 项检查增加到 94 项,外加一个庞大的非检查工具包: | 领域 | 新增 | |------|-----| | **主动探测** | `ssti`, `nosql_injection`, `path_bypass`, `race_condition`, `dom_xss_headless` (Playwright 可选) | | **被动 / 情报检查** | `webdav`, `dev_params`, `abuseipdb_lookup` (`--abuseipdb-token`), `waf_ruleset`, `oauth_oidc`, `saml_xsw`, `s3_bucket_discovery`, `github_leak_search` (`--github-search-token`), `jwt_audit` | | **修改的检查** | `subdomains` (B7 cookie-tossing 链), `cors` (B8 preflight 矩阵包含 `Origin: null`), `qli` (A3 time-blind escalator), `smuggling_probe` (A6 主动 CL.TE/TE.CL) | | **威胁情报集成** | CISA KEV, EPSS, VirusTotal, Sucuri SiteCheck, NVD/Wordfence CVE 解释器 | | **每项检查标签** | `data/check_tags.json` 中新增的 `cwe` (例如 `CWE-79`) + `d3fend` (例如 `D3-IVA`) 字段 | | **报告器** | 单页 executive PDF (`--exec-pdf`,使用 reportlab 或 HTML fallback) · 两份报告的拖放式 HTML diff 查看器 · Burp Suite scope XML (`--burp-export`) · 嵌入 HTML 报告中的严重程度 × OWASP 类别 SVG 热力图 | | **CLI 标志** | `--fail-on`, `--diff-against`, `--shell`, `--replay-har`, `--daemon`, `--abuseipdb-token`, `--vt-token`, `--github-search-token`, `--burp-export`, `--exec-pdf` | | **GUI 窗口** · 按历史发现的 OWASP/ATT&CK/CWE/D3FEND 标签进行深入分析 · 多 URL risk-score 趋势叠加 · 拖放式市场浏览器 · 5 步首次运行教程 | | **协作 (Collab)** | 按发现分配所有者 + 评论线程 (右键单击) | | **基础设施 / 文档** | `.github/workflows/wpsecscan.yml` (夜间 + PR 扫描) · `ci/` 中的 GitLab CI / Jenkins / Azure DevOps 模板 · `Dockerfile` + `docker-compose.yml` · `SDK.md` · `DISTRIBUTED-SCAN.md` · 每次扫描调用的 audit-log JSONL · 自定义 signature / payload 拖放 (`~/.wpsecscan/{signatures,payloads}/`) · i18n stub (en + es) | ## 输出格式 每次扫描都会生成: | 标志 | 文件 | 用例 | |---------------------|--------------------------|-----------------------------------------| | (默认) | `-.html` | 在浏览器中打开。每个命令都有复制到剪贴板的按钮,带有颜色编码的 exploit playbook,以及右上角的“🖨 打印 / 保存为 PDF”按钮。 | | (默认) | `-.json` | 包含每个发现的 `confidence` (低/中/高) 和每项检查的 `tags` (OWASP Top 10 + MITRE ATT&CK)。用于下游工具。 | | `--csv` | `-.csv` | 电子表格导入。单元格已针对 Excel formula-injection 进行转义。 | | `--sarif` | `-.sarif` | GitHub Code Scanning、Azure DevOps 以及任何接收 SARIF 2.1.0 的工具。 | | `--json-only` | 抑制 HTML | CI / 脚本使用。 | | `--md` | `-.md` | 用于 Confluence / GitHub / Slack 线程的 Markdown 报告。 | | `--xlsx` | `-.xlsx` | 带有按 OWASP 类别分组的 Excel 工作簿。 | | `--har FILE.har` | `FILE.har` | 每个 HTTP 请求的 HAR 1.2 记录 (Cookie/Authorization 已脱敏)。使用 `--replay-har` 重播。 | | `--burp-export` | `--burp-scope.xml` | 用于交接给手动测试的 Burp Suite scope XML。 | | `--exec-pdf` | `--exec.pdf` | 单页非技术性 executive 摘要。如果安装了 `reportlab` 则使用它,否则写入一个适合打印的 HTML 文件。 | ### Round-54 CLI 添加内容 | 标志 | 用途 | |---------------------------------------|------------------------------------------------------------------------------------------| | `--fail-on critical\|high\|medium` | 覆盖退出代码逻辑 — 仅当发现达到或超过阈值时才返回非零值。 | | `--diff-against BASELINE.json` | 计算与已保存 JSON 报告相比的 NEW / RESOLVED 增量,并打印到 stdout。 | | `--shell` | 扫描后,进入预绑定 `report` 的 Python REPL (面向高级用户 / IR)。 | | `--replay-har HAR_FILE` | 重新运行 HAR 文件中的每个请求;可选择使用 `` 覆盖 origin。 | | `--daemon CONFIG.yml` | 由 YAML 配置驱动的 Cron 风格定时扫描 (无需 Task Scheduler)。 | | `--abuseipdb-token TOKEN` | 为目标 IP 启用 AbuseIPDB 信誉检查。 | | `--vt-token TOKEN` | 启用 VirusTotal URL/IP 数据丰富。 | | `--github-search-token PAT` | 启用针对目标域名 + 常见密钥前缀的 GitHub 代码搜索。 | ### Round-56 可见性标志 | 标志 | 用途 | |---------------------------------------|------------------------------------------------------------------------------------------| | `--demo` | 针对虚假目标的合成扫描 — 每次检查都会触发虚假发现,每次集成都会触发虚假活动事件。将每种工件的一个副本写入 `~/.wpsecscan/demo/`。非常适合用于截图、安装冒烟测试或培训新用户。 | | `--no-live` | 在扫描期间禁用实时多面板丰富 dashboard。静态 console 报告器仍会在最后渲染。适用于 CI 日志 / 管道输出。 | ## 高级用户功能 (GUI) - **Risk score**:0–100,颜色编码。根据严重性权重和每级上限计算。 - **配置文件** (File → Profiles):将当前的切换/节奏/阈值集保存为 `"Quick"`, `"Deep"`, `"Audit"` 等。一键加载。存储在 `~/.wpsecscan/profiles.json` 中。 - **最近的 URL**:URL 字段是最近扫描的 20 个站点的下拉菜单。 - **与上次扫描进行 Diff**:如果 `~/.wpsecscan/reports/` 中存在相同 URL 的先前 JSON,扫描后会出现一个按钮。显示每个发现的 `[NEW]` / `[RESOLVED]`。 - **多目标扫描** (Tools → Multi-target):粘贴/加载 URL 列表,依次扫描每个 URL,带有一行显示一个站点并附带 risk score 和 Δ-vs-last-scan 的 dashboard。 - **定时循环扫描** (Tools → Schedule):注册一个 Windows Task Scheduler 任务 (`WPSecScan_`),每天/每周/每月在选定时间运行。输出到您选择的文件夹。使用 `schtasks /Delete /TN WPSecScan_ /F` 移除。 - **Risk-score 趋势** (Tools → Show risk trend):当前 URL 历史分数的 ASCII sparkline。 - **Webhook 通知** (File → Settings → "Webhook notify"):当扫描发现 ≥ 选定的严重级别时,向 Slack/Discord/Teams/PagerDuty 发送一个 POST 请求。主机通过允许列表进行验证 — 不会发布到任意 URL 或原始 IP。 - **发现注释**:右键单击任何发现 → "Accepted risk" / "False positive" 并附带可选备注。按 URL 持久化存储在 `~/.wpsecscan/annotations.json` 中。 - **过滤标签**:仅显示 NEW (对比上次扫描)、仅显示 CONFIRMED (signature 引擎主动验证)、隐藏已注释的、按严重级别显示/隐藏。 - **Exploit playbook**:每个发现的详情窗格都包含具体的攻击者端命令 (curl PoCs · sqlmap · Metasploit · nuclei · wpscan · ffuf),并已替换 `{target}`,外加一段通俗易懂的*"攻击者如何利用此漏洞"*的段落。 - **OWASP + MITRE 标签**:每次检查都标有相应的 OWASP Top 10 类别 (例如 `A03:2021`) 和 MITRE ATT&CK 技术 (例如 `T1190`)。在 GUI 和 console 中内联显示。 - **Exploit 置信度**:每个发现都带有一个独立于严重程度的置信度徽章 (HIGH / MED / LOW) — `[CONFIRMED]` 发现为 HIGH;存在 WAF 会将未确认的发现降级一个等级。 - **扫描中途取消**:在 20 分钟的深度 throttle 测试期间点击取消,将返回带有迄今为止所了解信息的部分结果。 ## CLI 标志参考 (最常用) ``` USAGE: wpsecscan.exe [URL] [options] Targets: URL A single site (https://example.com) --file FILE Newline-separated list of URLs Output: --out PATH Output directory or filename stem (default: cwd) --json-only Suppress HTML --html-only Suppress JSON --csv Also write CSV --sarif Also write SARIF 2.1.0 --quiet, -q Suppress the colored console table (alias: --no-console) -v / -vv Increase console verbosity (per-check / HTTP-level) Modes: --aggressive Enable active payload checks (SQLi, XSS, SSRF, etc.) --prove For each confirmed aggressive finding, run a read-only proof extractor. Requires --aggressive. Read-only. --deep-throttle Run the deep login-throttle mapper --deep-throttle-attempts N (10-500, default 120) --deep-throttle-pacing S (5-60 seconds, default 10) --auth-user USER Admin username for authenticated scan (env: WPSECSCAN_AUTH_USER) --auth-pass PASS Admin password (env: WPSECSCAN_AUTH_PASS; use `-` to read from stdin) --ssh-audit user@host Connect via SSH and run a read-only wp-cli audit --password-audit FILE Offline: convert wp_users dump to a hashcat-ready file (NO network) Tuning: --timeout SECONDS Per-request timeout (default 15) --concurrency N Concurrent requests per host (default 10) --user-agent STRING Custom User-Agent --insecure Don't verify TLS certs --wpscan-token TOKEN WPScan API token (richer plugin CVE data) --hibp-token TOKEN HaveIBeenPwned API key Maintenance: --update-db Refresh the Wordfence vulnerability database (exits 75 on remote-fetch failure for CI detection) --diff OLD.json NEW.json Diff two saved JSON reports --baseline BASELINE.json Diff scan-in-progress against a saved baseline (alias: --diff-against) --debug Verbose internal logging to ~/.wpsecscan/logs/ --completion {bash,zsh,powershell} Print shell-completion script and exit --version Subcommands (run `wpsecscan --help` for details): sites Manage a list of sites (add/list/scan/remove) schedule Install/uninstall a Windows-Scheduler / launchd / systemd cron digest Configure SMTP / webhook digests of new findings ai-cost Print AI-triage cost summary ai-options Read/set Advanced AI-triage toggles analytics Manage opt-in analytics db vuln DB management (status / update / signatures / source-stats / subscribe / alert-check) compare URL Diff the two most-recent saved snapshots of a URL badge URL Emit a shields.io-style SVG of the latest scan grade ``` ## 配置文件 所有内容都存储在 `~/.wpsecscan/` 中 (即 `C:\Users\\.wpsecscan\`): | 路径 | 用途 | |----------------------------------------------|----------------------------------------------------------| | `history.json` | 最近扫描的 20 个 URL (GUI 下拉菜单) | | `profiles.json` | 命名扫描配置文件 (切换 + deep-throttle 设置) | | `settings.json` | 通过 GUI 引导向导保存的 token | | `sites.json` | 用于 `wpsecscan sites` + 定时任务的托管站点列表 | | `schedule_state.json` | `wpsecscan schedule` 的 Cron 风格状态 | | `digest.json` | 配置的 SMTP / webhook 摘要目的地 | | `annotations.json` | 每个发现的注释 (accepted-risk / FP) | | `comments.json` | 每个发现的自由文本评论 | | `stars.json` | 加星标的发现 (GUI 侧边栏) | | `disabled_checks.json` | 持久禁用的检查 ID | | `reports/{host}.json` | 每个 URL 的最新扫描快照 (规范) | | `reports/{host}-{YYYYmmdd-HHMMSS}.json` | 带时间戳的快照历史 (用于 `compare`,趋势) | | `cache/wporg/{slug}.json` | 24 小时缓存的 wp.org 插件元数据 (plugin_cemetery) | | `checkpoints/` | `--checkpoint` 可恢复扫描状态 | | `logs/` | `--debug` 日志文件 | | `demo/` | `--demo` 合成扫描工件 | | `analytics/events.jsonl` | 选择加入的分析 (默认关闭;`wpsecscan analytics`) | | `wordfence.json` | 聚合 CVE 数据库的本地缓存 | 使用 `WPSECSCAN_HOME` 环境变量覆盖基础目录。 ### Shell 补全 ``` # bash wpsecscan --completion bash > /etc/bash_completion.d/wpsecscan # zsh wpsecscan --completion zsh > "${fpath[1]}/_wpsecscan" # PowerShell wpsecscan --completion powershell | Out-File -Append $PROFILE ``` 重启 shell 以激活。 ### 通过环境变量传递密钥 每个敏感标志 — `--auth-pass`, `--auth-app-password`, `--companion-token`, `--proxy-auth`, `--wpscan-token`, `--patchstack-token`, `--hibp-token`, `--vt-token`, `--abuseipdb-token`, `--github-search-token` — 在未通过 CLI 传递时,会从匹配的 `WPSECSCAN_` 环境变量中读取。使用 `--auth-pass -` 通过 `getpass` 从 stdin 读取密码 (防止其泄露到 `ps aux` / shell 历史记录中)。 ## 安全性 - **仅用于您拥有的网站**或获得书面测试许可的网站。在线密码 暴力破解永久不在范围内。“deep throttle” 探测使用合成的 不存在的用户名和固定的错误密码 — 它映射您的防御,但绝不会 猜测密码。 - 所有主动 payload 都是只读的。payload 库在加载时强制执行 使用 pytest 不变量来扫描任何写操作。 - webhook URL 允许列表拒绝原始 IP、内部地址 (包括位于 `169.254.169.254` 的 AWS 元数据) 和未知主机。 - 经过认证的扫描会使用您提供的凭据运行,但绝不会记录它们。 - 定时任务 URL 验证器强制执行严格的正则表达式,以防止在注册的 `schtasks` 命令中发生 shell-meta 注入。 ## 故障排除 **"Windows protected your PC" SmartScreen 警告** — 点击 *More info → Run anyway*。 二进制文件没有代码签名。 **Defender 隔离 `wpsecscan.exe` 并提示 `Backdoor:JS/Chopper.GG!dha`** — 已知的误报。 这是一个防御性扫描器:为了在您的网站上**检测** webshell (China Chopper, c99, r57),它附带了这些攻击模式的参考。Defender 的模式匹配启发式方法会标记该 .exe,即使它从不在本地执行任何这些模式。同样的检测机制也会触发 sqlmap、Metasploit、nuclei 和 Gophish — 所有这些都是合法的安全工具。 **三种解决方法:** 1.在 GUI 中**:首次启动时会弹出一个带有“立即添加排除项 (UAC)”按钮的对话框。您也可以随时通过 *Tools → Add Windows Defender exclusion...* 打开它。 2. **从管理员 PowerShell** (手动,一行): Add-MpPreference -ExclusionPath 'C:\path\to\dist' 将 `C:\path\to\dist` 替换为包含 `.exe` 二进制文件的实际文件夹。 3. **通过附带的辅助脚本** (自动检测二进制文件位置,提示 UAC): .\scripts\add-defender-exclusion.ps1 **恢复被隔离的文件**:*Windows Security → Virus & threat protection → Protection history → Allow*。 **此程序绝不会**: - 在您的计算机上安装后门。 - 在您的机器上打开任何监听端口。 - 将数据发送到除您输入的 WordPress URL 之外的任何地方。 - 运行其 signature 列表中的任何 webshell — 这些字符串是用来识别*您网站上的* webshell 的,而不是用来执行它们的。 **GUI 中出现“DB: not loaded — click Refresh”** — 点击 *Refresh vuln DB*。或者从 CLI 执行:`wpsecscan.exe --update-db`。 **扫描在卡住的目标上停滞** — `--timeout 5` 可减少每次请求的等待时间。 **多目标扫描因一个错误的 URL 而冻结** — 每个 URL 都有自己每次请求的 超时。如果一个 URL 始终挂起,请将其从列表中删除。 **Cron / 定时任务条目堆积** — 使用 `schtasks /Query /TN WPSecScan_*` 列出它们,并使用 `schtasks /Delete /TN /F` 单独删除。 **GUI 在启动时立即崩溃** — 检查 `C:\Users\\.wpsecscan\` 是否可写。 从终端运行以查看 traceback:`wpsecscan-gui.exe` (窗口 构建故意抑制了 console 输出 — 从 checkout 中通过 `python run_gui.py` 运行 以查看错误)。 ## 清单 | 类别 | 数量 | |---------------------------|-------| | 检查 | **226** | | Payloads | **224** | | Exploit signatures | **307** | | 插件 CVE 数据库 | ~7,000 (Wordfence) + 通过夜间聚合器的其他 7 个来源 | | Exploit-playbook 条目 | **25** | | 测试 | **667** | ## 许可证与免责声明 根据 **AGPLv3+** 授权 (从 v1.9.0 起 — v1.0.0..v1.8.0 为 MIT)。 请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。 **AGPL 网络条款**:如果您将修改后的 WPSecScan 作为托管服务运行 (SaaS、Web UI、付费扫描层级),您必须根据相同的 AGPLv3+ 条款发布修改后的源码。私有的内部使用和修改保持私有。有关 AGPLv3 之外的商业分发许可条款, 请联系 bryaninbangkok@gmail.com。 此工具仅供在您拥有的网站上进行**防御性使用**。在大多数司法管辖区,未经明确书面许可对第三方 网站使用是非法的,这违反了 Computer Fraud and Abuse Act (US) / Computer Misuse Act (UK) / 其他地方的同等法律。 作者不对滥用行为承担责任。
标签:Python, WordPress, 威胁情报, 子域名突变, 安全合规, 实时处理, 密码管理, 开发者工具, 搜索引擎查询, 无后门, 漏洞挖掘, 特征检测, 网络代理, 请求拦截, 逆向工具