【WPScanの使い方を徹底解説】WordPressの脆弱性診断を始めよう!

WordPressを安全に運用するためには、WPScanによる定期的な脆弱性診断が欠かせません。

本記事では、WPScanの基本的な使い方からよく使うオプション、さらにはWordPressサイトで脆弱性が見つかった際の対応策まで、詳しく解説します。

本記事はセキュリティの啓発を目的としたものであり、WPScanの不正使用を推奨するものではありません。他人のサーバーに対するスキャン行為は、たとえ善意でも違法とみなされることがあります。ご自身が管理するサーバーの脆弱性診断にご活用ください。

本記事では、セキュリティ学習を安心・安全に行うため、意図的に脆弱性を持たせたアプリケーション(通称:やられアプリ)を使用し、脆弱性スキャンを行っています。詳細は記事本文で解説していますので、ぜひご覧ください。

目次

WPScanとは

WPScanは、WordPressサイトに特化した脆弱性スキャナであり、セキュリティ診断の現場で広く利用されているツールです。開発元はセキュリティ企業であるAutomattic社で、長年にわたってWordPressセキュリティに関する情報を蓄積し、最新の脆弱性データベースと連携して動作します。

ブラックボックステスト型の診断手法を採用しており、サイトの内部情報にアクセスすることなく、外部からHTTP(S)リクエストを通じてオンライン診断を行います。

WPScanの特徴

WPScanは、WordPressに特化した脆弱性スキャナとして開発されており、その最大の特徴はWordPress固有のセキュリティリスクを深く理解したスキャンが可能である点にあります。

通常のWeb脆弱性スキャナは一般的なセキュリティリスク(SQLインジェクションやXSSなど)に対応していますが、WPScanはWordPressのテーマ、プラグイン、バージョン情報といった特有の構造に基づいた診断を行えるため、精度の高い調査が可能です。

WordPressに最適化されたセキュリティ診断

WordPressに関する多岐にわたる診断が可能であり、特に「WordPress本体」「インストール済みテーマ」「有効化されたプラグイン」「ユーザーアカウント情報」など、一般的な脆弱性スキャナでは検出しきれないWordPress特有の脆弱性に対応しています。

WPScan User Documentation(WPScanユーザードキュメント)によると、以下の項目のセキュリティ診断が可能です。

  • The version of WordPress installed and any associated vulnerabilities
  • What plugins are installed and any associated vulnerabilities
  • What themes are installed and any associated vulnerabilities
  • Username enumeration
  • Users with weak passwords via password brute forcing
  • Backed up and publicly accessible wp-config.php files
  • Database dumps that may be publicly accessible
  • If error logs are exposed by plugins
  • Media file enumeration
  • Vulnerable Timthumb files
  • If the WordPress readme file is present
  • If WP-Cron is enabled
  • If user registration is enabled
  • Full Path Disclose
  • Upload directory listing
  • And much more…

(日本語訳)

  • インストールされているWordPressのバージョンおよび関連する脆弱性
  • インストールされているプラグインおよび関連する脆弱性
  • インストールされているテーマおよび関連する脆弱性
  • ユーザー名の列挙
  • パスワード総当たり攻撃によって特定される弱いパスワードのユーザー
  • バックアップされ、公開状態にあるwp-config.phpファイル
  • 公開状態になっている可能性のあるデータベースのダンプファイル
  • プラグインによってエラーログが公開されているかどうか
  • メディアファイルの列挙
  • 脆弱なTimthumbファイル
  • WordPressのreadmeファイルが存在するかどうか
  • WP-Cronが有効になっているかどうか
  • ユーザー登録が有効になっているかどうか
  • フルパスの開示
  • アップロードディレクトリの一覧
  • その他多数…

脆弱性データベースと連携

WPScanは、WordPressの脆弱性データベースを独自に管理しており、既知の脆弱性情報に基づいて診断を行います。

2025年5月4日現在、このデータベースには6万件以上(*)の脆弱性情報が蓄積されています。
* WordPress Vulnerability Statistics(WordPressの脆弱性統計)

これにより、診断サイトがどのようなリスクを抱えているかを正確に把握でき、対応の優先順位づけにも活用できます。

未認証(非ログイン)状態での診断が可能

WPScanはブラックボックステスト形式を採用しており、WordPressの管理者権限を必要とせずに外部からオンライン診断が可能です。攻撃者と同じ視点で外部から調査できるため、公開サーバーのセキュリティリスクを可視化する上で非常に有効です。

CLIベースで自動化しやすい

WPScanはコマンドラインインターフェース(CLI)を採用しているため、スクリプト自動化や定期スキャンの仕組みに組み込みやすく、企業のセキュリティ運用において高い柔軟性を持っています。

また、JSON形式での出力にも対応しているため、ログの解析やSlack通知など、他ツールとの連携にも適しています。

WPScanを使う理由

WordPressは世界中で最も利用されているCMSであり、W3Techsの調査によれば、全ウェブサイトの43.5%がWordPressを使用しています。(2025年5月4日時点)

その人気の裏返しとして、サイバー攻撃者にとっても主要な標的となっており、Wordfence社が発表したレポートによると、2024年にWordPressを対象とした攻撃は540億件以上にのぼっています。このような状況下では、自社サイトを適切に保護するために、脆弱性診断ツールの導入が欠かせません。

WPScanは、一般的なWeb脆弱性スキャナとは異なり、WordPress専用に設計されたツールであり、WordPress特有のリスク(例:ユーザー名列挙、既知の脆弱プラグイン検出、ディレクトリ構造の特定など)に特化しています。そのため、WordPressサイトの脆弱性診断において、WPScanは信頼性の高いツールとして多くの現場で採用されています。

WPScanをインストール

WPScan User Documentation(WPScanユーザードキュメント)では、Ruby Gem、Docker、Homebrew(macOS)を使ったインストール方法を解説しています。

# Ruby Gem
gem install wpscan

# Docker
docker pull wpscanteam/wpscan

# Homebrew (macOS)
brew install wpscanteam/tap/wpscan
WindowsでWPScanを使う方法

WPScanはWindowsにはネイティブ対応していません。そのため、WindowsでWPScanを使うには、Docker、WSL (Windows Subsystem for Linux) 、仮想化ソフトウェアなどの環境を利用する必要があります。

この記事で使用している環境

本記事では、仮想化ソフトウェア(VirtualBox)を利用し、Kali LinuxにプリインストールされているWPScanを使用してます。

検証環境

物理マシンWindows10 Pro 22H2(64bit)
仮想化ソフトOracle VirtualBox 7.1.4
仮想マシンKali Linux 2025.1
ミドルウェアWPScan 3.8.28

Kali Linuxは、ペネトレーションテスト用に開発されたディストリビューションで、多数のセキュリティツールがプリインストールされています。Kali Linuxについて、下記の記事で詳しく解説していますので、サイバーセキュリティに関心のある方は、ぜひご覧ください。

WPScanの起動方法

WPScanはCLIベースの脆弱性スキャナのため、ターミナルから直接コマンドを実行します。

また、Kali Linuxの場合、メニューより起動することもできます。

Kali LinuxのメニューからWPScanを起動する

03-Web Application Analysis-CMS & Framework Identification-wpscanを選択すると、自動的にターミナルが起動し、ヘルプコマンドwpscan -hを実行します。

自動的にターミナルが起動し、ヘルプコマンド(wpscan -h)が実行される

WPScanの使い方

WPScanの基本的な使い方は、コマンドラインからの操作が中心となります。対象となるWordPressサイトのURLを指定してスキャンを実行するだけで、テーマやプラグイン、コアファイルに存在する既知の脆弱性などを自動的に調査できます。

基本コマンド

診断対象のサイトURLを指定(--url、-u)

$ wpscan --url 【サイトURL】    # -uでも可

このコマンドを実行することで、指定されたURLにアクセスし、情報収集を開始します。実際の運用では、いくつかのオプションを組み合わせて使用することで、より精度の高い診断が可能になります。

バージョン確認(--version)

$ wpscan --version

ヘルプ(--help、-h、--hh)

簡易ヘルプ
$ wpscan --help    # -hでも可

詳細ヘルプ
$ wpscan -hh

メタデータをアップデート

$ wpscan --update

ローカルに保持しているメタデータのデータベースを更新します。(このメタデータには脆弱性情報は含まれていません。)

主なオプション

WPScanでは、多数のオプションが提供されており、目的に応じた柔軟な脆弱性診断が可能です。ここでは、実務で特に使用頻度の高いオプションについて解説します。

診断項目を指定(--enumerate、-e)

$ wpscan --url 【サイトURL】 --enumerate 【診断項目】    # -eでも可

診断項目を指定することで、より深いスキャンが可能です。

診断項目

設定値診断対象
vp脆弱なプラグイン
ap全てのプラグイン
p人気のプラグイン
vt脆弱なテーマ
at全てのテーマ
t人気のテーマ
ttTimthumbファイル
cb設定のバックアップ
dbeDBエクスポート
uユーザー名
mメディア

例えば、ユーザー名の列挙はブルートフォース攻撃の前段階として悪用されやすく、 --enumerate u オプションを指定することで、サイトに登録されているユーザー名を確認することができます。

また、プラグインやテーマに関しても --enumerate vp--enumerate vt を指定することで、インストールされている脆弱なコンポーネントを洗い出すことができます。

診断項目を指定しない場合、vp, vt, tt, cb, dbe, u, mがデフォルト指定されます。

脆弱性データベースと連携(--api-token)

$ wpscan --url 【サイトURL】 --api-token 【APIトークン】

このコマンドでは、WPScanが管理する脆弱性データベースと連携し、脆弱性の有無を確認します。

脆弱性データベースとの連携には、APIトークンが必要です。WPScan公式サイトでアカウント登録すれば、APIトークンを取得できますが、無料プランでは1日のリクエスト回数に制限があります。

APIトークンを取得していない場合

APIトークンがなくても、脆弱性の有無などの診断は制限されますが、バージョン情報などのスキャンは可能です。

ライセンスの詳細は、WPScan公式サイトで最新情報をご確認下さい。

WPScan公式サイト

ファイル出力(--output、-o)

$ wpscan --url 【サイトURL】 --output 【ファイル名】    # -oでも可

スキャン結果をファイルに出力します。また、後述する--formatオプションと組み合わせることにより、JSON形式での出力も可能です。

出力形式(--format、-f)

$ wpscan --url 【サイトURL】 --format 【出力形式】    # -fでも可
  • cli:デフォルト形式。コンソール上で人間が読みやすい形で出力されます。
  • cli-no-color:デフォルト形式(色なし)。ログ保存などに向いています。
  • json:JSON形式。スクリプトや自動化ツールで扱いやすい形式です。
$ wpscan --url 【サイトURL】 --format json --output 【ファイル名】

--outputオプションと組み合わせることにより、JSON形式でファイル保存することも可能です。

WPScanを使ってWordPressサイトを脆弱性診断する

このセクションでは、実際にWPScanを使って、OWASP BWAに含まれているWordPressサイトを脆弱性診断します。

OWASP BWAとは、世界的なセキュリティ啓発コミュニティであるOWASPが提供する「やられアプリ」の一つで、意図的に脆弱性を持たせたセキュリティ学習用のプラットフォームです。

OWASP BWAについて、下記の記事でインストール方法などを解説していますので、ぜひご覧ください。

他人のWordPressサイトに対してWPScanを使用することは、不正アクセス禁止法などの法律に抵触する可能性がありますので、絶対におやめください。

を実行

$ wpscan --url http://192.168.10.105/wordpress/
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.28
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://192.168.10.105/wordpress/ [192.168.10.105]
[+] Started: Sat May  3 16:28:33 2025

Interesting Finding(s):

[+] Headers
 | Interesting Entries:
 |  - Server: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1
 |  - X-Powered-By: PHP/5.3.2-1ubuntu4.30
 |  - Status: 200 OK
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://192.168.10.105/wordpress/xmlrpc.php
 | Found By: Headers (Passive Detection)
 | Confidence: 60%
 | Confirmed By: Link Tag (Passive Detection), 30% confidence
 | References:
 |  - http://codex.wordpress.org/XML-RPC_Pingback_API
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
 |  - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

[+] WordPress readme found: http://192.168.10.105/wordpress/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] WordPress version 2.0 identified (Insecure, released on 2005-12-26).
 | Found By: Rss Generator (Passive Detection)
 |  - http://192.168.10.105/wordpress/?feed=rss2, <!-- generator="wordpress/2.0" -->
 |  - http://192.168.10.105/wordpress/?feed=rss2, <generator>http://wordpress.org/?v=2.0</generator>

[+] WordPress theme in use: default
 | Location: http://192.168.10.105/wordpress/wp-content/themes/default/
 | Last Updated: 2020-02-25T00:00:00.000Z
 | [!] The version is out of date, the latest version is 1.7.2
 | Style URL: http://192.168.10.105/wordpress/wp-content/themes/default/style.css
 | Style Name: WordPress Default
 | Style URI: http://wordpress.org/
 | Description: The default WordPress theme based on the famous <a href="http://binarybonsai.com/kubrick/">Kubrick</...
 | Author: Michael Heilemann
 | Author URI: http://binarybonsai.com/
 |
 | Found By: Css Style In Homepage (Passive Detection)
 | Confirmed By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.5 (80% confidence)
 | Found By: Style (Passive Detection)
 |  - http://192.168.10.105/wordpress/wp-content/themes/default/style.css, Match: 'Version: 1.5'

[+] Enumerating All Plugins (via Passive Methods)
[+] Checking Plugin Versions (via Passive and Aggressive Methods)

[i] Plugin(s) Identified:

[+] mygallery
 | Location: http://192.168.10.105/wordpress/wp-content/plugins/mygallery/
 | Latest Version: 2.0.8
 | Last Updated: 2019-10-22T14:01:00.000Z
 |
 | Found By: Urls In Homepage (Passive Detection)
 |
 | The version could not be determined.

[+] Enumerating Config Backups (via Passive and Aggressive Methods)
 Checking Config Backups - Time: 00:00:00 <====================================================> (137 / 137) 100.00% Time: 00:00:00

[i] No Config Backups Found.

[!] No WPScan API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 25 daily requests by registering at https://wpscan.com/register

[+] Finished: Sat May  3 16:28:42 2025
[+] Requests Done: 179
[+] Cached Requests: 6
[+] Data Sent: 40.826 KB
[+] Data Received: 117.76 KB
[+] Memory used: 259.621 MB
[+] Elapsed time: 00:00:08

オプションなしのシンプルなスキャンであっても、ApacheやPHP、WordPressのバージョン、使用しているテーマやプラグインなどの情報を確認することができます。

診断項目を指定して実行(ユーザー名列挙)

$ wpscan --url http://192.168.10.105/wordpress/ --enumerate u

〜 省略 〜

[+] Enumerating Users (via Passive and Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <=====================================================> (10 / 10) 100.00% Time: 00:00:00

[i] User(s) Identified:

[+] admin
 | Found By: Rss Generator (Passive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

〜 省略 〜

--enumerate uを指定して実行した結果、adminというユーザーを使用していることが分かります。

WordPressサイトに脆弱性が見つかった場合の対応

WPScanの診断結果で脆弱性が検出された場合、まず最初に確認すべきは、その脆弱性の深刻度と影響範囲です。

CVE(共通脆弱性識別子)とCVSS(共通脆弱性評価システム)のスコアをもとに、緊急性の高いものから優先的に対応を進める必要があります。CVSSスコアが7.0以上であれば高リスクと判断され、速やかな対応が求められます。

主な対策
  • 不要なテーマやプラグインを削除する
  • テーマやプラグインを最新バージョンに更新する
  • セキュリティプラグインを導入する
  • レンタルサーバーのセキュリティ機能を利用する

不要なテーマやプラグインを削除する

WPScanによって脆弱性のあるテーマやプラグインが検出された場合、そのテーマやプラグインが本当に必要かどうか確認して下さい。もし、必要のないテーマやプラグインが残っている場合、削除を強く推奨します。

これは、攻撃される可能性を技術的に減らすための「基本的」かつ「最も効果的」な手段です。サイトの攻撃対象領域(アタックサーフェス)を最小化することが、持続的なセキュリティ維持の第一歩となります。

仮に無効化していても、WordPressの構造上、それらのファイルはサーバー上に物理的に残っており、攻撃者によるスキャンやエクスプロイトの対象となり得ます。

無効化WordPress上で機能を停止するだけで、ファイルは残ったまま。
削除サーバー上のファイルが完全に除去される。

テーマやプラグインを最新バージョンに更新する

テーマやプラグインに関連する脆弱性の場合、開発元がパッチをリリースしているかを確認します。WPScanによって検出される脆弱性の多くは、既知の脆弱性であり、その大部分は開発元によってすでに修正されています。

もし、すでに開発が停止していたり、対応が遅れている場合は、別の安全なテーマやプラグインへの移行、またはワークアラウンド(回避策)の検討をしましょう。

ワークアラウンドの例
  • 該当テーマ・プラグインの一時的な無効化
  • .htaccessやWAFによる特定のパスやパラメータへのアクセス制限
  • 脆弱な機能を使用しない設定への変更

ワークアラウンド(回避策)を実施することにより、攻撃リスクをある程度軽減できます。

古いテーマやプラグインの場合、バージョンアップが滞っていることが多く、深刻なセキュリティホールを抱えているケースも少なくありません。

特に注意が必要なのは、「サポートを終了したテーマ」や「更新が数年間停止しているプラグイン」です。これらは今後も修正パッチが提供される見込みがないため、使用を継続すること自体がリスクになります。

攻撃者はこうした放置されたコンポーネントをリスト化し、既知の脆弱性を狙って自動スキャンを行うため、別のテーマやプラグインに移行することを強く推奨します。

セキュリティプラグインを導入する

WordPressの脆弱性を突いた攻撃からサイトを保護する上で、セキュリティプラグインの導入は極めて有効です。WPScanの診断結果でリスクが判明した場合、その対策を自動化・補完する手段としても活用できます。具体的には、ブルートフォース攻撃の防御、ファイル改ざんの検知、不審なアクセスの遮断といった機能を、セキュリティプラグインが担ってくれます。

たとえば「Wordfence Security」は世界的に利用されており、ファイアウォール(WAF)とマルウェアスキャンの両機能を備えています。2025年現在で有効インストール数は500万件を超えており、その信頼性と実績は明らかです。加えて、WordPressのログインページに対する2段階認証を設定できる機能もあり、WPScanで発見されたようなユーザー名列挙の脆弱性に対する防御にも有効です。

また、「SiteGuard WP Plugin」も代表的なプラグインで、ブルートフォース攻撃や管理機能の保護に特化した日本製プラグインです。

注意点として、複数のセキュリティプラグインを併用すると機能が競合し、誤作動やパフォーマンス低下を引き起こす可能性があります。セキュリティプラグインを導入する場合は機能の重複を避けるため、1〜2つに絞るのが望ましいです。

レンタルサーバーのセキュリティ機能を利用する

WordPressサイトのセキュリティ対策として、レンタルサーバー事業者が提供するセキュリティ機能を積極的に活用することも重要です。近年、主要なレンタルサーバー各社は、標準サービスまたはオプションとして多層的なセキュリティ機能を備えており、これらを適切に設定することで、WordPress自体の設定やプラグインによる防御とあわせて、全体のセキュリティレベルを大きく向上させることが可能です。

例えば、WAF(Web Application Firewall)機能を提供しているサーバーであれば、SQLインジェクションやクロスサイトスクリプティング(XSS)といったWebアプリケーションに特有の攻撃をサーバー側で検知・遮断できます。エックスサーバー、さくらのレンタルサーバ、ConoHa WINGなどでは、WAF機能が無料で提供されており、管理画面からオン・オフの切り替えやログの確認が可能です。

また、IPS/IDS(不正侵入防止・検知システム)を導入しているレンタルサーバーもあり、既知の攻撃パターンに基づく不審なアクセスを検出し、自動的にアクセス制限を行います。

加えて、管理画面への国外アクセス制限や、特定のIPアドレスのみからのアクセス許可サーバー全体のウイルスチェック機能WordPress自動バックアップ機能なども、提供されている場合には積極的に活用するべきです。これらの機能は、一度設定すれば自動的に機能するものが多く、運用負荷を大幅に低減しながらセキュリティの底上げを図ることができます。

これらの機能が有効になっていないケースや、知らずに無効化してしまっているケースも少なくありません。定期的にサーバー管理画面のセキュリティ設定を確認し、意図しない設定変更がないかをチェックすることも、セキュリティ管理上の重要なポイントです。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次