bryanflowers/wpsecscan
GitHub: bryanflowers/wpsecscan
一款开源的 WordPress 防御性安全扫描器,通过聚合 8 个 CVE 数据源执行 226 项安全检查并提供多格式合规报告。
Stars: 1 | Forks: 1
# WPSecScan
[](https://github.com/bryanflowers/wpsecscan/actions/workflows/tests.yml)
[](https://github.com/bryanflowers/wpsecscan/actions/workflows/cve-feed.yml)
[](LICENSE)
[](https://github.com/bryanflowers/wpsecscan/releases/latest)
[](https://github.com/bryanflowers/wpsecscan/releases)
[](https://www.python.org/)
[](FEATURES.md)
[](docs/data-sources.md)
[](tests/)
[](https://pypi.org/project/wpsecscan/)
[](docs/verify-release.md)
[](docs/verify-release.md)
[](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, 威胁情报, 子域名突变, 安全合规, 实时处理, 密码管理, 开发者工具, 搜索引擎查询, 无后门, 漏洞挖掘, 特征检测, 网络代理, 请求拦截, 逆向工具