spammerからPukiWikiを奪還する

以前からちょくちょくMCRN(mcrn.jp)のPukiWiki(MCRNWiki)にspamが来ていたけど、今回はひどくて、メニューバー全体が乗っ取られてた。

以下、取り戻すまでの一部始終。

まず、最初はメニューバーが乗っ取られたことに気づかず、普通のspamページが大量に作られたのだと思ってリンクをクリックして削除しようとしたら、いきなり他のサイトに飛ばされる。
この時点で異常に気付き、さくら鯖にSSHログイン。PukiWiki設置ディレクトリに移動してファイルを調べる。


$ ls -talF

-rw-rw-rw- 1 mcrn users 43632 8 6 03:41 4D(略)2.txt ←こいつがspam
-rw-rw-rw- 1 mcrn users 3207 8 6 03:41 52(略)3.txt ←何故か元のメニューバーの内容(元の「ソース」ではない)
(略)

とりあえずspamのファイルを消してみたけど、メニューバーは戻らず真っ白。
そこで、元のメニューバーの内容を復帰(mvでリネーム)。でもなんか見た目が違う。
どうやら元の内容ではあるが元のソースではないのが原因らしい。最新の変更も反映されない。
そこで、バックアップから元のソースを書き戻す。これでやっと元通りになった。

しかし、このまま放置していてはまたいつか餌食になってしまう。
そこでメニューバーを凍結してしまうことに。
だが、なんということでしょう、凍結パスワードを忘れてしまいました。
OperaのCtrl+Enterには残っているものの、それではOperaが使えない時に困る。
そこで、新しいパスワードにしてしまうことに。

といっても、SCPでダウンロード→編集→アップロードするのが面倒だったので少々強引な方法で変更。
(追記:emacsでターミナルから編集してもよかったけど、このときは気がつかなかった@2015/9/26)


$ echo -n 新しいパスワード | md5

新しいパスワードのMD5

$ cat pukiwiki.ini.php | grep "pass"

// Admin password for this Wikisite
//$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72'; // md5('pass') ←これはデフォで書かれてるサンプル
$adminpass = '{x-php-md5}元のパスワードのMD5';
//$adminpass = '{CRYPT}$1$AR.Gk94x$uCe8fUUGMfxAPH83psCZG/'; // CRYPT 'pass' ←これもデフォのサンプル
(略)

$ cp pukiwiki.ini.php pukiwiki.ini.bkup.php
$ rm pukiwiki.ini.php
$ sed -e "s/元のパスワードのMD5/新しいパスワードのMD5/g" pukiwiki.ini.bkup.php > pukiwiki.ini.php

sedとか使うの何年振りかな。大学の課題で使ったっきり。
最近すっかりLinux/UNIX系はご無沙汰だし(さくら鯖はFreeBSDなのでUNIXだけど、sedなんて使わないし)。
本格的な対策としてはPukiWiki自体のバージョンアップやアンチスパム系プラグインの導入などがあるけど、ちょっと今は時間がないので小手先対策で延命。
自鯖閉鎖してそっちの管理コストがなくなったら本格的に手を入れたい。