環境準備#
wordpress#
前回の記事(リンク:Ubuntu に Docker をインストールしてテスト環境を迅速に構築する)で述べた公式の Docker イメージ:wpscanteam/vulnerablewordpress を使用して迅速に構築します:
docker pull wpscanteam/vulnerablewordpress
docker run --name vulnerablewordpress -d -p 80:80 -p 3306:3306 wpscanteam/vulnerablewordpress
アカウントとパスワードを設定します:
アカウント名は admin、パスワードは password123、標準的な弱いパスワードです。
次に、サイトの管理画面に入り、WordPress のバージョンを更新するように促されます:
その流れで、すべてのプラグインとテーマを更新し、さらに 2 つのプラグインをインストールしました:
いくつかのユーザーを作成しました:
testadmin:123456haha:著者
soapffz:abc123456:管理者
wpscan#
WPScan は Kali Linux にデフォルトで搭載されている脆弱性スキャンツールで、Ruby で書かれており、WordPress サイト内のさまざまなセキュリティ脆弱性をスキャンできます。これにはテーマの脆弱性、プラグインの脆弱性、WordPress 自体の脆弱性が含まれます。最新バージョンの WPScan のデータベースには、18000 以上のプラグイン脆弱性と 2600 以上のテーマ脆弱性が含まれており、最新の WordPress バージョンをサポートしています。特に、robots.txt のような敏感なファイルをスキャンできるだけでなく、現在有効なプラグインやその他の機能も検出できます。
Kali には wpscan がプリインストールされていますが、スキャンを開始すると「Updating the Database」で止まってしまい、しばらくするとタイムアウトエラーが発生しました。
Kali でもツールのホームページにアクセスできます:https://wpscan.org/、しかし VPN を使用しても更新できません。ここでは Docker を使用して wpscan を取得します。チュートリアルは wpscan の GitHub にもあります:https://github.com/wpscanteam/wpscan
- wpscan を取得する:
docker pull wpscanteam/wpscan
docker run -it --rm wpscanteam/wpscan --url https://yourblog.com [options]
後ろの [options] はオプションで、空の場合はデフォルトのスキャンが行われます。もちろん、これでは毎回 docker コマンドを実行する必要がありますが、直接この wpscan の docker イメージに入って wpscan を実行するには、以下のコマンドを使用できます:
docker run -it --entrypoint /bin/sh wpscanteam/wpscan
この--entrypoint /bin/sh
は何を意味するのでしょうか?文字通りに解釈すると、/bin/sh をエントリポイントとして使用するということです。これは、/bin/sh、すなわちシェルを使用して後続のスクリプトを実行することを意味します。
ペネトレーションサイト#
ここでは、あなたがすでにこの docker イメージに入っていると仮定しますので、wpscan で始まるコマンドを使用できます:
wpscan --url 192.168.2.18
でサイト全体をスキャンします。
サーバーと PHP のバージョン情報が表示され、以下にいくつかの敏感なディレクトリやファイルのバックアップ、テーマやプラグイン情報のスキャンが行われました。
情報が多すぎるので、一つずつ見ていきますが、後の各コマンドのスキャン結果には以下の内容が含まれます:
[+] URL: http://192.168.2.18/
[+] Started: Wed Jan 30 10:12:18 2019
Interesting Finding(s):
[+] http://192.168.2.18/
| Interesting Entries:
| - Server: Apache/2.4.7 (Ubuntu)
| - X-Powered-By: PHP/5.5.9-1ubuntu4.24
| - SecretHeader: SecretValue
| - via: Squid 1.0.0
| Found By: Headers (Passive Detection)
| Confidence: 100%
[+] http://192.168.2.18/robots.txt
| Found By: Robots Txt (Aggressive Detection)
| Confidence: 100%
[+] http://192.168.2.18/searchreplacedb2.php
| Found By: Search Replace Db2 (Aggressive Detection)
| Confidence: 100%
| Reference: https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
[+] http://192.168.2.18/xmlrpc.php
| Found By: Link Tag (Passive Detection)
| Confidence: 100%
| Confirmed By: Direct Access (Aggressive Detection), 100% 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
[+] http://192.168.2.18/readme.html
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] http://192.168.2.18/wp-content/debug.log
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
| Reference: https://codex.wordpress.org/Debugging_in_WordPress
[+] Upload directory has listing enabled: http://192.168.2.18/wp-content/uploads/
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] WordPress version 5.0.3 identified (Latest, released on 2019-01-09).
| Detected By: Rss Generator (Passive Detection)
| - http://192.168.2.18/index.php/feed/, <generator>https://wordpress.org/?v=5.0.3</generator>
| - http://192.168.2.18/index.php/comments/feed/, <generator>https://wordpress.org/?v=5.0.3</generator>
[+] WordPress theme in use: twentyfifteen
| Location: http://192.168.2.18/wp-content/themes/twentyfifteen/
| Latest Version: 2.3 (up to date)
| Last Updated: 2019-01-09T00:00:00.000Z
| Readme: http://192.168.2.18/wp-content/themes/twentyfifteen/readme.txt
| Style URL: http://192.168.2.18/wp-content/themes/twentyfifteen/style.css?ver=5.0.3
| Style Name: Twenty Fifteen
| Style URI: https://wordpress.org/themes/twentyfifteen/
| Description: 私たちの2015年のデフォルトテーマはクリーンで、ブログに焦点を当て、明確さのために設計されています。Twenty Fifteenのシンプルなスタイル...
| Author: WordPressチーム
| Author URI: https://wordpress.org/
|
| Detected By: Css Style (Passive Detection)
|
| Version: 2.3 (80% confidence)
| Detected By: Style (Passive Detection)
| - http://192.168.2.18/wp-content/themes/twentyfifteen/style.css?ver=5.0.3, Match: 'Version: 2.3'
これにより、wpscan がデフォルトで毎回敏感ファイル
、バックアップファイル
、アップロードディレクトリ
、WordPressバージョン情報
、テーマ情報
をスキャンすることがわかります。
次に、いくつかの比較的敏感な情報をスキャンします:
wpscan --url 192.168.2.18 --enumerate u
でユーザー名を列挙します。
簡単にユーザー名を取得できました。
wpscan --url 192.168.2.18 --enumerate t
でテーマをスキャンします。
テーマの名前とバージョンを取得しました。
wpscan --url 192.168.2.18 --enumerate p
でプラグインをスキャンします。
wpscan --url 192.168.2.18 --enumerate vp
でプラグインの脆弱性をスキャンします。
プラグインの脆弱性は見つかりませんでした。同様に、脆弱なテーマをスキャンするには、後のパラメータ t を vt に変更すればよいです。
wpscan --url 192.168.2.18 --enumerate tt
で TimThumb ファイルをスキャンします。
TimThumb は、画像をトリミングするための非常にシンプルで便利な PHP プログラムで、いくつかのパラメータを設定するだけでサムネイルを生成できます。現在、多くの WordPress テーマで TimThumb という PHP ライブラリを使用してサムネイルの処理を行っています。TimThumb の脆弱性を利用すると、サイトの root 権限を簡単に取得できます。
見つかりませんでした。
wpscan --url 192.168.2.18 --passwords /mnt/passwd.txt --username admin –-threads 100
で admin パスワードをブルートフォース攻撃します。
ここでファイルが読み取れないことがわかりました:
ホストマシンのディレクトリをイメージにマウントする必要があるため、コンテナを削除して再作成します:
exit
docker ps -a (wpscanコンテナのIDを確認)
docker stop [id] まず停止します
docker rm [id] 次に削除します
docker run -it -v /mnt:/tmp --entrypoint /bin/sh wpscanteam/wpscan -vオプションを追加し、ホストマシンのディレクトリとイメージのディレクトリを:で区切ります
イメージ内のマウントディレクトリに関する詳細は、こちらを参照してください:https://www.cnblogs.com/ivictor/p/4834864.html
その後、ブルートフォース攻撃を行います:
アカウントパスワードには--passwords/--usernamesオプションがあり、どちらもsがありますが、辞書を指定することも、単一のユーザー名を指定することもできます:
wpscan --url 192.168.2.18 --passwords /tmp/passwd.txt --usernames admin –-threads 100
wpscan -hのヘルプにある説明:
-P, --passwords FILE-PATH パスワード攻撃中に使用するパスワードのリスト。
--username/sオプションが指定されていない場合、ユーザー列挙が実行されます。
-U, --usernames LIST パスワード攻撃中に使用するユーザー名のリスト。
100 スレッドを開くと、結果は以下の通りです:
ブルートフォースの効果と速度は辞書とスレッドのサイズに依存します。admin パスワードのブルートフォース結果は以下の通りです:
パスワードは 16878 行目にあり、35 分 20 秒かかりました。速度は、ええと、ブルートフォースは世界で最も非効率的な方法です。
他のパラメータは wpscan -h で確認できます。
- wpscan の GitHub アドレス:https://github.com/wpscanteam/wpscan#wpscan-arguments
- GitHub の Readme.md の日本語翻訳:https://www.test404.com/post-1627.html?wafcloud=1
searchreplacedb2.php を利用してメールアドレスを変更し、管理者アカウントのパスワードをリセットします。
これは、WordPress サイトのドメイン名を変更した後にデータベースの内容を一括で置き換えるためのツールです。しかし、数回使用した後、置き換えのみが可能で、データを検索する方法は見つかりませんでした。
さらに、searchreplacedb2.php は wp-config.php を自動的に読み取り、返されるフォームにはデータベースのユーザー名とパスワードも含まれています。searchreplacedb2.php には残されたバックドアが存在し、これを利用して管理者 admin の予約メールアドレスを変更し、パスワードリセットリンクを送信するために「パスワードを忘れた」をクリックし、パスワードをリセットします。
このファイルの利用方法については、こちらの記事を参照してください:https://blog.csdn.net/t91zzh5f/article/details/55805438
防止策#
- WordPress サイトが管理者パスワードをブルートフォース攻撃されないようにするにはどうすればよいですか?
ブルートフォース攻撃を防ぐ最良の方法は、1 つの IP アドレスのログイン試行回数を制限することです。WordPress にはこの機能を実現するための多くのプラグインがあります。例えば:
- Login Security Solution
- Brute Force Login Protection
- 個人のパスワードが漏洩するのを防ぐためにスクリプトを書くこともできます。
- プラグイン、テーマ、TimThumb ファイルのスキャンを防ぐ方法
Block Bad Queries (BBQ) プラグインを使用すると、このようなスキャンをブロックおよび禁止できます。