搜索全站
插件 10 分钟阅读

如何查询 WordPress 插件已知漏洞(WPScan / Patchstack)

插件有没有已知漏洞?本文给出 WPScan 命令行扫描、WPScan 漏洞 API 批量查询、Patchstack 数据库检索三种方法的完整命令,以及发现漏洞后的五步应急响应流程。

U
UFO_PF 2019-02-02 · 阅读 10 分钟
如何 插件
阅读提示
本文约 3,920 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:漏洞早就公布了,你只是没查

WordPress 生态里绝大部分成功入侵,利用的不是什么高深的 0day,而是几个月前就公开、补丁也已经发布、但站长没有更新的老漏洞。攻击者手里有自动化扫描器,他们用不了多久就能把全网跑一遍;而站长这边,往往连自己装的插件有没有漏洞都不知道。

原因很现实:WordPress 后台虽然有更新提示,但它只告诉你「有新版本可用」,不会告诉你「当前版本存在可被利用的漏洞」。这两者之间隔着一层信息差,而填补这层信息差需要主动去查漏洞库。

可用的公开漏洞库主要有三个:WPScan Vulnerability Database(由 Automattic 维护,漏洞条目最全)、Patchstack Database(原名 WP White Security,响应快、条目详细)、以及 Wordfence Intelligence。三者各有侧重,配合 WordPress.org 的官方安全公告使用效果最好。

本文给出三种可落地的查询方式:命令行批量扫描、API 程序化查询、网页库检索,并给出从「发现漏洞」到「确认修复」的完整流程。

原理分析:漏洞库记录的是什么

一条典型的 WordPress 插件漏洞记录包含这些字段:

字段 含义 用途
Vulnerability type 漏洞类型:SQLI、XSS、RCE、LFI、Auth Bypass、CSRF 等 判断危害等级
Affected versions 受影响的版本区间,如 <= 3.2.1 判断你的版本是否在内
Fixed in 哪个版本修的,如 3.2.2 确定要升到哪个版本
CVE ID 通用漏洞编号,如 CVE-2024-1234 跨库检索、合规报告
CVSS score 通用漏洞评分,0–10 分 判断紧急程度
Auth required 是否需要登录或特定权限 判断被利用的难度
CWE 弱点分类 理解成因

理解这几个字段,就能自己判断优先级,而不是看到「有漏洞」就恐慌。举个例子:一个 CVSS 5.4、需要管理员权限、且是 XSS 的漏洞,对于一个只有你一个管理员的个人站来说,实际风险很低;而一个 CVSS 9.8、无需登录的未授权文件上传漏洞,则必须在几小时内处理——这类漏洞通常几天内就会出现大规模自动化利用。

还有一个重要区分:漏洞库收录的是「已公开」的漏洞。厂商私下修复、未公开的漏洞(即 0day)不会在里面。所以漏洞库查询是必要动作,但不是充分保障,定期更新仍然不能省。

保姆级实操

第一步:安装 WPScan

WPScan 是 Ruby 编写的命令行工具,需要 Ruby 环境:

# 安装(Debian / Ubuntu)
sudo apt-get install ruby-full build-essential libcurl4-openssl-dev
sudo gem install wpscan

# 升级漏洞库
wpscan --update

第二步:对站点做完整扫描

推荐使用非侵入式扫描(aggressive 模式会发起大量请求并可能触发 WAF):

wpscan --url https://example.com \
        --enumerate vp,vt,tt,cb,dbe \
        --api-token YOUR_API_TOKEN \
        --format cli-no-color \
        --output-file wpscan-report.txt

参数含义:vp 枚举有漏洞的插件、vt 有漏洞的主题、tt 枚举主题、cb 枚举配置文件备份、dbe 枚举可被公开访问的数据库导出文件。

输出里每条漏洞会标注 [!] Title、受影响版本、固定版本和参考链接。

第三步:用 API 批量查询指定插件

如果只想查某个插件的所有历史漏洞,可以直接调 WPScan 的 API:

curl -s "https://wpscan.com/api/v3/plugins/contact-form-7" \
     -H "Authorization: Token token=YOUR_API_TOKEN" \
  | python -c "
import sys, json
d = json.load(sys.stdin)
slug = list(d.keys())[0]
for name, v in d[slug]['vulnerabilities'].items():
    fixed = v.get('fixed_in') or '未修复'
    print(f\"{name} | 类型={v['vuln_type']} | 修复于={fixed} | CVSS={v.get('cvss',{}).get('score','-')}\")
"

免费账号每天有请求次数限制,批量查询建议缓存在本地。

第四步:交叉核对 Patchstack 数据库

# 直接检索插件 slug 对应的漏洞页(浏览器打开或 curl)
curl -s "https://patchstack.com/database/?search=elementor" -o /dev/null -w "%{http_code}\n"

Patchstack 的条目通常附 PoC 说明和利用条件,对判断「我这个配置会不会被打中」很有帮助。另外它提供 WordPress 版漏洞情报订阅,也可以安装其官方插件 Patchstack(原 WP White Security)来做站点侧的实时拦截。

第五步:核对 CVE 与 NVD

拿到 CVE 编号后去 NVD 查 CVSS 详细向量,用于内部风险评估报告和向客户说明:

curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2024-1234" \
  | python -c "import sys,json; d=json.load(sys.stdin);
v=d['vulnerabilities'][0]['cve'];
print(v['id'], v['metrics'].get('cvssMetricV31',[{}])[0].get('cvssData',{}).get('baseScore'));
print(v['descriptions'][0]['value'][:200])"

第六步:确认修复

# 更新到修复版本
wp plugin update plugin-slug --version=3.2.2

# 确认当前版本
wp plugin get plugin-slug --field=version

# 复扫确认漏洞已消除
wpscan --url https://example.com --enumerate vp --api-token YOUR_API_TOKEN

常见踩坑

  1. 只扫一次就完事:漏洞是持续新增的。建议每月至少全站扫一次,关键插件订阅其安全公告。

  2. 被 WAF 拦截导致扫描结果不准:很多站点前面有 Cloudflare 或安全狗,WPScan 的请求会被挡,表现为大量误报或超时。扫描时可以临时放行扫描 IP,或者用 --random-user-agent 降低触发概率。

  3. 看到「版本区间包含我」就直接删插件:先看 Auth required 和 CVSS。有些漏洞利用门槛极高,误删插件反而导致功能中断,风险更大。

  4. 忽略 Fixed in 为空的条目:那意味着厂商还没修。此时要么换插件,要么自己做虚拟补丁(用 WAF 规则拦截对应请求路径)。

  5. 用过期本地漏洞库扫描:wpscan --update 必须跑,本地库不更新等于查旧账。

  6. 案例: 某站点使用的表单插件在公开漏洞库中出现一条 CVSS 9.8 的未授权任意文件读取漏洞,修复版本在披露当天就发布了。站长当时没订阅任何情报,两周后才发现站点 wp-config.php 被拖走、数据库被导出、首页被替换成勒索页面。事后复盘:漏洞披露到被大规模自动化利用,通常只有 3–7 天窗口。教训是——高危及无权限要求的漏洞,必须当天处理。

  7. 扫描本身触发告警:对生产站扫描会产生大量请求,可能被主机商判定为攻击。先在预发布站或低峰期做。

总结

漏洞查询应该做成例行流程,而不是出事后的补救动作。建议固定成月度动作:

  1. wpscan --update 更新本地库;
  2. 对生产站跑一次 --enumerate vp,vt;
  3. 对 CVSS ≥ 7.0 或无需登录的漏洞当天处理;
  4. 处理完复扫确认;
  5. 无法立即更新的,用 WAF 加临时规则并排期。

优先级排序记住一条:无需认证 + 高 CVSS = 立即处理;需要管理员权限 + 中低 CVSS = 排期处理。全站插件的漏洞扫描结果出来后,如果某个插件反复出现高危漏洞,就该考虑换掉了——这往往也是判断 识别已弃用插件 的重要信号。另外,选插件阶段就该先查一遍漏洞历史,方法在 挑选插件的 8 条硬标准 里有说明。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。