WPScan漏洞扫描工具使用教程:主动扫描自己WordPress网站的已知漏洞

什么是WPScan?

WPScan是专为WordPress设计的开源安全扫描工具,由Automattic(WordPress母公司)维护。它能够:

  • 枚举WordPress版本、已安装的插件和主题
  • 检测已知CVE漏洞(对照WPScan漏洞数据库)
  • 测试用户名枚举风险
  • 检测配置安全问题
  • 测试登录接口暴力破解防护

重要说明: WPScan是合法的安全审计工具,用于扫描你自己的网站。未经授权扫描他人网站是违法行为。


安装WPScan

方法一:Ruby Gem安装(推荐)

WPScan基于Ruby开发,需要Ruby 2.5+环境:

# Ubuntu/Debian
sudo apt update
sudo apt install ruby ruby-dev libcurl4-openssl-dev make zlib1g-dev
sudo gem install wpscan

# macOS(使用Homebrew)
brew install ruby
gem install wpscan

# 验证安装
wpscan --version

方法二:Docker安装(无需配置Ruby环境)

# 拉取Docker镜像
docker pull wpscanteam/wpscan

# 运行扫描
docker run -it --rm wpscanteam/wpscan --url https://你的域名.com

方法三:Kali Linux(预装)

Kali Linux已预装WPScan,直接使用即可。


获取WPScan API Token

WPScan有免费的API Token,每天可以查询25个漏洞。需要注册获取:

  1. 访问 wpscan.com 注册账户
  2. 登录后进入Profile页面,找到API Token
  3. 复制Token,在扫描时使用 --api-token 参数

免费版限制:每天25次API请求(足够扫描一个普通网站)。


基础扫描命令

基础枚举扫描

# 基础扫描(检测WordPress版本和插件)
wpscan --url https://你的域名.com

# 带API Token的完整漏洞扫描
wpscan --url https://你的域名.com --api-token 你的TOKEN

# 输出到文件
wpscan --url https://你的域名.com --api-token 你的TOKEN --output report.txt

枚举插件漏洞

# 枚举所有已安装插件并检测漏洞
wpscan --url https://你的域名.com --enumerate p --api-token 你的TOKEN

# 仅检测有已知漏洞的插件
wpscan --url https://你的域名.com --enumerate vp --api-token 你的TOKEN

# 解释:
# p = plugins(所有插件)
# vp = vulnerable plugins(有漏洞的插件)
# ap = all plugins(尝试枚举所有可能的插件,较慢)

枚举主题漏洞

# 检测主题漏洞
wpscan --url https://你的域名.com --enumerate vt --api-token 你的TOKEN
# vt = vulnerable themes

枚举用户名

# 枚举WordPress用户名(安全风险评估)
wpscan --url https://你的域名.com --enumerate u

# 尝试多种枚举方法
wpscan --url https://你的域名.com --enumerate u --detection-mode aggressive

如果WPScan能枚举出你的用户名,说明你的网站存在用户名枚举风险,攻击者可以获取用户名再进行密码暴力破解。

完整扫描

# 全面扫描:版本、插件、主题、用户
wpscan --url https://你的域名.com \
  --enumerate vp,vt,u \
  --api-token 你的TOKEN \
  --detection-mode aggressive \
  --output full-report.txt \
  --format cli

解读扫描结果

WordPress版本风险

[+] WordPress version 6.3.1 identified
 | Found By: Readme File (Aggressive Detection)
 | [!] 3 vulnerabilities identified:
 |
 | [!] Title: WordPress <= 6.3.1 - Cross-Site Scripting (XSS)
 |     Fixed in: 6.3.2
 |     References:
 |      - https://wpscan.com/vulnerability/xxxxx
 |      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-XXXXX

处理方式: 立即更新WordPress到最新版本。

插件漏洞

[+] contact-form-7
 | Location: https://你的域名.com/wp-content/plugins/contact-form-7/
 | Last Updated: 2023-10-01T00:00:00.000Z
 | Outdated, installed version is 5.8.1, latest is 5.9.0
 |
 | [!] Title: Contact Form 7 <= 5.8.1 - Unrestricted File Upload
 |     Fixed in: 5.8.2
 |     CVSS: 9.8 (Critical)

处理方式: 立即更新该插件,如果是已放弃维护的插件,寻找替代品。

CVSS评分含义

评分范围 严重程度 优先级
9.0-10.0 严重(Critical) 立即处理
7.0-8.9 高危(High) 尽快处理
4.0-6.9 中危(Medium) 计划处理
0.1-3.9 低危(Low) 关注

用户枚举结果

[+] admin
 | Found By: Author Posts - Display Name (Passive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

处理方式:
– 将管理员用户名改为非 admin 的用户名
– 在WordPress设置中,不显示作者档案或修改显示名称
– 安装插件阻止作者枚举(如Wordfence的”防止用户名枚举”选项)


常见安全发现及修复

发现1:WordPress版本泄露

[+] WordPress readme.html was found at https://你的域名.com/readme.html

修复: 删除WordPress根目录的 readme.html 文件,或通过.htaccess限制访问:

<Files readme.html>
    Order Allow,Deny
    Deny from all
</Files>

发现2:wp-cron.php暴露

如果WPScan发现 wp-cron.php 可以被外部频繁访问,可能成为DDoS放大器:

修复: 禁用默认wp-cron,改用系统cron:

// 在wp-config.php中添加
define('DISABLE_WP_CRON', true);

然后在服务器上设置系统cron每隔5-10分钟运行一次:

*/10 * * * * curl https://你的域名.com/wp-cron.php > /dev/null 2>&1

发现3:目录列表开放

[+] Directory listing is enabled at https://你的域名.com/wp-content/uploads/

修复: 在.htaccess或uploads目录添加:

Options -Indexes

在CI/CD中自动化扫描

如果你有多个WordPress网站,可以设置自动化定期扫描:

#!/bin/bash
# 每周扫描并发送报告的脚本

DOMAIN="你的域名.com"
API_TOKEN="你的WPScan Token"
EMAIL="管理员邮箱@example.com"
DATE=$(date +%Y%m%d)

wpscan --url https://$DOMAIN \
  --api-token $API_TOKEN \
  --enumerate vp,vt,u \
  --output /tmp/wpscan-$DATE.txt

# 发送报告(需要配置mail命令)
mail -s "WPScan安全报告 $DATE" $EMAIL < /tmp/wpscan-$DATE.txt

WPScan vs Wordfence扫描比较

对比项 WPScan Wordfence扫描
运行位置 本地/远程命令行 WordPress内部
漏洞数据库 WPScan数据库(非常全面) Wordfence专有数据库
文件内容扫描 不扫描文件内容 扫描文件内容(检测恶意代码)
插件漏洞检测 强(专业级)
使用难度 需要命令行基础 有图形界面,简单
适合场景 主动安全审计 持续安全监控
成本 免费(有API限制) 免费/付费

建议: 两者配合使用——用WPScan做定期安全审计,用Wordfence做日常防护监控。


主动扫描是”防患于未然”的安全策略。定期(建议每月一次)用WPScan扫描你的WordPress网站,及早发现已知漏洞并修复,而不是等到被黑客利用后再进行紧急修复