Плагин и вирусы

Добрый день.

Попадается второй взломанный сайт на modx evo, где есть плагин в базе с кодом шелла, но не отображается в админке этот плагин. Подскажите как так делают.


36 комментариев

avatar
Сделал поиск «base64_decode» по БД и обнаружил такую же фигню только в плагине TransAlias
avatar
Плагин может быть вообще любой, скрываются под стандартные. Посмотрите папку assets/media на наличие шелла

И как удалите этот плагин, обновите кеш сайта
avatar
насколько я заметил — дублируют в базе строку — получается две строчки с плагином, последняя заражена — ее можно просто удалить. однако в админке видна только первая найденная — поэтому только напрямую через базу (phpmyadmin и др инструменты в помощь)
Комментарий отредактирован 2016-11-24 14:47:19 пользователем swed
  • swed
  • 0
avatar
Обнаружил такой же вирус.
На сайте перестали работать несколько ссылок.
Если ничего не предпринимать, то через некоторое время перестают работать все ссылки. Просто обновляется главная страница и всё. Переходов по прямым урлам тоже нет.

Кто-нибудь сталкивался с подобным?
Где копать?
Комментарий отредактирован 2016-11-25 09:29:19 пользователем sergge
avatar
да, было на этой неделе. Смотри файл .htaccess в корне сайта, вот его вирус и изменил
avatar
У меня такое было. Ну я откатил копию сайта.

А вообще смотрите htaccess, его явно изменили. И залили куча файлов своих и папок.
avatar
Первое, на что подумал, это .htaccess.
Но изменений в нём нет. Пробовал залить его из дистрибутива — не помогает.
Что-то более хитрое.
avatar
Очень хитрое. Уже 5-й день чищу и 5-й день подряд снова лезет.
Менял пароли от хостинга и от базы, перезаливал файлы, проверял айболитом и т.д. Полный комплекс. Сайт абсолютно чистый. Но утром захожу — и снова в корне посторонние объекты. Правда теперь в базе нет задвоенных плагинов и .htaccess без изменений. Каким-то образом заливается в корень посторонний архив, раскрывается и уже через него начинают идти вот такие запросы:
168.62.226.23 — - [25/Nov/2016:00:03:48 +0300] «GET /old/wp-admin/ HTTP/1.0» 404 40623 "-" "-"
Конкретно этот айпишник принадлежит Microsoft Corp. Также по левым урлам, которые создавал вирус валят недуром поисковики типа гугла, яхо и множество остальных преимущественно американских. Я стараюсь проглядывать логи, но во-первых, так себе специалист, во-вторых, в логах реально заспанено поисковыми ботами…
avatar
Я ещё подключил сервис https://virusdie.ru ссылка реферальная =))))))
А то на этой неделе три раза приходилось оживлять сайт. Сейчас уже стоит evo 1.1RC. На htaccess, index и т.д. выставил права только чтение. Ещё в базе данных в плагинах вычистил вирус, и теперь антивирус не ругается на siteCache.idx.php
avatar
и ещё на корневую папку сайта на хостинге /httpdocs убрал права записи на всякий случай
avatar
index.php ещё пробуйте заменить из дистрибутива.
avatar
Обнаружил, что на телефоне все ссылки открываются корректно.
Похоже, какой-то js-скрипт на событие onclick прописан или что-то вроде того.
avatar
У меня скрипт сканирует каждый 5-10 минут все файлы на наличие изменений и правок и новых файлов и пишет на мыло если что. Это помогает.

Если ваш сайт атакуют каждый день, заливают шеллы. Нужно искать как они это делают. Следить за всеми post запросами которые поступают на сайт. Я написал себе скрипт который ловит все post запросы и словил пару запросов. И было сразу понятно как заливают.
  • qsl
  • 0
avatar
Поделитесь скриптом? =)
avatar
Вот скрипт который мне на почту шлёт все запросы к сайту. Я создал правило на яндекс почте и в папку летят письма. У меня было что гугл слал post запросы и тем самым спамил мне почту, пришлось сделать условие. !strstr(strtolower($_SERVER['HTTP_USER_AGENT']), «googlebot»)

if (!empty($_POST) || !empty($_FILES)){
$w = '<pre>$_POST '.print_r($_POST, true).'</pre>';
$w .= '<pre>$_FILES '.print_r($_FILES, true).'</pre>';
$w .= '<pre>$_GET '.print_r($_GET, true).'</pre>';
$trace =  debug_backtrace();  
$w .= '<hr>FILE: '.$trace[0]['file'];
$w .= '<hr>'.$_SERVER["REMOTE_ADDR"].' = '.$_SERVER["HTTP_USER_AGENT"].'<hr>';
$subject = '=?utf-8?b?'. base64_encode($_SERVER['HTTP_HOST']) .'?=';
$headers = 'Content-type: text/html; charset="utf-8"'. PHP_EOL;
$headers .= 'From: <****@ya.ru>'. PHP_EOL;
$headers .= 'MIME-Version: 1.0'. PHP_EOL;
$headers .= 'Date: '. date('D, d M Y h:i:s O') . PHP_EOL;
mail('****@ya.ru', $subject, $w, $headers);
}


Укажите своё мыло в скрипте два раза. Я его всунул в файл config.inc.php

И наблюдайте
avatar
спасибо
avatar
avatar
Поскольку стали выявляться «плохие» IP-адреса, можно расширить функциональность указанного выше скрипта, добавив в него код:
$badIP = array('88.99.37.173');
if (in_array($_SERVER['REMOTE_ADDR'], $badIP)) {
	// ничего хорошего с этого адреса не ждём, поэтому:
	$zero = array();
	$_POST = $zero;
	$_FILES = $zero;
}
avatar
а не подскажите, пожалуйста, можно ли тут еще и получить результат этого запроса? 200й, 404й или может 500й? в этом письме.
avatar
Как заливают?
avatar
нашел где сидят… assets/media/styles.php Айболит их не определил.
avatar
У меня на трех сайтах такая беда. Удаление не помогает. Боты шлют пост запросы на сниппеты eform и search и после запроса снова лежит файл в этой папке. Закладку залили?
avatar
prntscr.com/dbod4b эту поставил сразу после того как обновил движок, еще во вторник. А файлы в папке media пропустил и каждое утро в корне сайта появлялись новые файлы. Подожду утра, там видно будет. На хостинге включил логи, буду по логам искать все POST запросы. Эти файлы так и нашел. Найду и остальные, если появятся.
avatar
Тоже за последние несколько дней такие вирусы попали на 4 сайта (при том что все на разных хостинг аккаунтах
avatar
Серьезна за нас взялись хакеры))
avatar
При этом на каждом в районе 10-14 файлов по всему сайту раскиданы, на одном было еще в index.php в корне и в manager, на 1 в плагине также сидел. и два сайта 503 ошибку выдавали. и с каждого шла массовая рассылка
avatar
Взялись не конкретно за нас, я имею ввиду не за EVO. Вирусами перебираются все движки и все файлы, а MODX на что-то из этого откликается. Первый тревожный звонок — пользователь admin заблокирован, ну это у тех, кто такого пользователя еще держит и папку manager не переименовывал. На этом сайте как раз такая фигня была, я тогда тоже поизучал лог с ошибками и там было видно, что запросы шли по разным движкам с разными вариантами. Было летом. Пользователя admin я удалил. Вирусов не нашел и успокоился. Но скорее всего заражение произошло в тот период. А сейчас это все активировали.
avatar
yadi.sk/i/kdMAuzdszUTN7
судя по отчетам на многих сайтах зараза проникла в 7-9 месяце, а эксплуатировать начали только сейчас
Комментарий отредактирован 2016-11-25 18:27:48 пользователем gtx59
avatar
В протоколе событий у всех сайтов было:

Подробнее

и на всех сайтах стояла евогалери
avatar
если заливают шэлы в папки с картинками, то первым делом запретите запуск пхп-скриптов из таких и подобных папок. для этого внутри создайте файлик (если нет) .htaccess и внутрь добавьте следующие правила:

<FilesMatch "\.([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll])\.?.*">
   Order allow,deny
   Deny from all
</FilesMatch>

RemoveHandler .php .phtml .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .py
AddType application/x-httpd-php-source .php .phtml .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .py
php_flag engine 0
avatar
У меня в бд дублем появился плагин Inherit Parent Template, содержащий base64_decode.
Появился под последним id, то есть был следующим после того, который, я точно помню, ставили последним.
В админке сайта посмотреть не успел виден он или нет.
это я в подтверждение вышесказанному)
Комментарий отредактирован 2016-11-30 21:12:17 пользователем fesky
avatar
Да. ID действительно проставляется следующий после того, который был последним. То есть в моем случае появился «клон» плагина CodeMirror, который прописался в базу под номером 17. Но ID самого CodeMirror был 14. То есть название плагина скорее всего выбирается случайным образом. А «следующий» id после последнего плагина получается по той простой причине, что в базе данных auto_increment срабатывает при операции insert.
avatar
В воскресенье почистил сайт, удалил index-ajax.php и с понедельника тишина. Может атаки прекратились, может все дело именно в index-ajax.php.
avatar
А я index-ajax.php оставил. Но уже свой :) Который логирует обращения к нему в файлик.
avatar
Выложите, если не сложно, выложите код логирования.
avatar
Скрипт переделал из уже приведенного тут ранее скрипта, отсылающего запросы на мыло.
Кустарно, на надо было сделать быстро :)
Кроче, есть у меня папка /assets/MYLOG, в ней у меня есть .htaccess, который требует пароль при обращени к файлам папки через http.
(это на тот случай, чтобы чрез этот «лог» не внедрили какой-нибудь очередной исполняемый код)
Соответственно, в любой момент времени я проверяю, ломился ли кто на мои сайты, открывая адреса вида мой_сайт/assets/MYLOG/post_data.html.
А сам файл этот создается вот таким простеньким скриптом:

if(!strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
if (!empty($_POST) || !empty($_FILES))
{
	$LOGPATH='/assets/MYLOG/post_data.html';//эта папка у меня защщена паролем через .htaccess+.htpasswd
	$w = '<html><body>';
	$w .= '<h2 style="background:#c0c0c0;">Date: '. date('D, d M Y h:i:s O') . PHP_EOL. "</h2>";
	$w .= '<pre>POST: '.print_r($_POST, true).'</pre>';
	$w .= '<pre>_FILES: '.print_r($_FILES, true).'</pre>';
	$w .= '<pre>_GET: '.print_r($_GET, true).'</pre>';
	$trace =  debug_backtrace();  
	$w .= '<hr>FILE: '.$trace[0]['file'];
	$w .= '<hr>'.$_SERVER["REMOTE_ADDR"].' = '.$_SERVER["HTTP_USER_AGENT"].'<hr>';
	$w .= '</body></html>';

	$fp = fopen($_SERVER['DOCUMENT_ROOT'].$LOGPATH, 'a');
	fwrite($fp, $w);
	fclose($fp);
	echo "OK";//отдаем какой-то код, "похожий" на типовые ответы, которые иногда отдают подобные файлы-обработчики ajax. 
}

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.