wivern ロゴ

サイバーセキュリティ研究所

サイバーセキュリティを中心に、軍事、防犯、サーバーの管理と監視、その他、最新技術を研究しています。


WPScan 入門

WordPress の脆弱性スキャンツール「WPScan」

WPScan

はじめに
ホームページ管理システムの中でも圧倒的なシェアを誇る WordPress ですが、脆弱性が発見されると世界中で WordPress を活用している膨大な数のサイトが危険に晒されます。
私が管理を依頼されているサイトでも、WordPress を活用しているサイトが半数を超えています。
特に最近、サイトをスマホ対応に改変する流れもあって、WordPress を導入するサイトは増加傾向にあります。
今回は私のように WordPress を管理している人に、WordPress の脆弱性スキャンツール「WPScan」を紹介したいと思います。

WPScan とは
WPScan とは、Ruby で書かれた WordPress の脆弱性スキャンツールで、オープンソースで公開されています。
公式サイトによると、Linux や OSX で動作します。
Kali Linux にはデフォルトでインストールされているので、コマンドラインから起動できます。
以下、公式サイトの英文での記述を元に、使い方を日本語に直訳して紹介します。
本稿執筆時点でのバージョンは、2.7(Released: 2015-03-16) です。

コマンドライン・オプションや実行例を見ればわかりますが、このツールは使い方次第で攻撃ツールになりえます。
自分が管理運営していないサイトに対するこのツールの使用は、違法行為に見なされる場合がありますので、くれぐれもご注意ください。

コマンドライン・オプション
--update
データベースを更新します。

--url | -u <ターゲットの URL>
スキャンしたい WordPress サイトの URLを指定します。

--force | -f
リモート・サイトで WordPress の稼働をチェックせずに WPScan を強行します。

--enumerate | -e [オプション]
列挙
 オプション:
 u     id 1 から 10 までの username を列挙します
 u[10-20] id 10 から 20 までの username を列挙します( [] が必要です)
 p     プラグインを列挙します
 vp    脆弱性のあるプラグインだけを列挙します
 ap    全てのプラグインを列挙します(時間がかかります)
 tt    timthumb を列挙します
 t     テーマを列挙します
 vt    脆弱性のあるテーマだけを列挙します
 at    全てのテーマを列挙します(時間がかかります)

 ※複数の値を指定できます:「-e tt,p」は timthumb とプラグインを列挙します。
  オプションが指定されていない場合のデフォルトは「vt,tt,u,vp」です。

--exclude-content-based "<正規表現 または 文字列>"
列挙と共に使われるオプションで、正規表現か文字列で指定された結果を除外します。
正規表現デリミタを指定する必要はありませんが、「'」か「"」を書かなければいけません。

--config-file | -c <設定ファイル>
設定ファイルを指定します。example.conf.json を参照してください。

--user-agent | -a
User-Agent を指定します。

--random-agent | -r
ランダムな User-Agent を使用します。

--follow-redirection
ターゲットの URL がリダイレクトしていた場合、確認せずにそれに従うかどうかを指定します。

--wp-content-dir
WPScan はインデックス・ページをスキャンしてコンテンツ・ディレククトリ(例:wp-content)を探そうとしますが、指定することができます。サブディレクトリでもかまいません。

--wp-plugins-dir
プラグイン・ディレクトリを指定します。指定がない場合は、WPScan は wp-content-dir/plugins を使用します。サブディレクトリでもかまいません。

--proxy <[プロトコル://]ホスト:ポート>
プロキシを指定します( conf/browser.conf.json の内のひとつを上書きします)。
HTTP、SOCKS4、SOCKS4A と SOCKS5 がサポートされています。 (ホスト:ポートの形式で)プロトコルを指定しないと、HTTP が使われます。

--proxy-auth <ユーザーネーム:パスワード>
プロキシのログイン認証を指定します。

--basic-auth <ユーザーネーム:パスワード>
HTTP の基本認証を指定します。

--wordlist | -w <ワードリスト>
パスワードのブルート・フォース攻撃のためのワードリストを指定します。

--threads | -t <スレッド数>
マルチ・スレッド・リクエストを使う場合のスレッド数を指定します。

--username | -U <ユーザーネーム>
指定されたユーザーネームでブルート・フォース攻撃をします。

--usernames <ファイルのパス>
指定したファイルのユーザーネームでブルート・フォース攻撃をします。

--cache-ttl <キャッシュ TTL>
Typhoeus( Ruby 用高速並列HTTPライブラリ) のキャッシュ TTL を指定します。

--request-timeout <リクエスト・タイムアウト>
リクエスト・タイムアウトを指定します。

--connect-timeout <接続タイムアウト>
接続タイムアウトを指定します。

--max-threads <最大スレッド数>
最大スレッド数を指定します。

--help | -h
このヘルプ画面を表示します。

--verbose | -v
詳細を表示するように指定します。

--batch
ユーザーに入力を求めず、デフォルトの動作を使用します。

--no-color
出力に色を使いません。

--log
標準出力を log.txt に保存します。


実行例
侵入せずにチェック
wpscan --url www.example.com
50 スレッドを使って列挙されたユーザーにパスワードのワードリストでブルート・フォース
wpscan --url www.example.com --wordlist darkc0de.lst --threads 50
ユーザーネーム「admin」だけに対してパスワードのワードリストでブルート・フォース
wpscan --url www.example.com --wordlist darkc0de.lst --username admin
インストールされているプラグインを列挙
wpscan --url www.example.com --enumerate p
全てを列挙
wpscan --url www.example.com --enumerate
カスタム・コンテンツ・ディレクトリを使用
wpscan -u www.example.com --wp-content-dir custom-content
WPScan のデータベースを更新
wpscan --update
デバッグ情報を出力
wpscan --url www.example.com --debug-output 2>debug.log


記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。


→「WPScan 入門」
←「ネットで丸見えのデジタル複合機を検証」


« 戻る