Самый изящный PHP-shell из попадавшихся мне в последнее время

Что-то мне в последнее время везёт на инфицированные сайты (наверное, помните про вирус в .htaccess). Вот и ещё один клиент пришёл в наше агентство взломанным. Его похоже бахнули через подбор FTP-пароля (он у него лишь из цифр состоял), но, кстати, и этот взломанный сайт тоже крутился (и пока крутится) под управлением Joomla 🙂 В общем, в подарок клиенту закинули один из самых лаконичных PHP-шеллов, который только можно себе представить. Не удержусь от того, чтобы процитировать «зловредный» код…

Толсто, да? Выполняй всё, что душе угодно, передавая закодированный PHP прямо через POST-запрос.

Всё это напомнило код самого компактного в мире PHP-фреймворка из фольклора:

Что касается шелла, то по логам видно, что трафик между шеллом и хозяином неслабый: по половине мегабайта ежесуточно. Я решил поставить почтовый логгер, чтобы посмотреть, чего ж они там такое вытворяют удалённо 🙂 Заодно протестировал, проверяется ли целостность шелла при его запуске.

Вредный код начинается примерно вот так:

set_time_limit(0);
ignore_user_abort(1);
echo "zzzzzzz";
...
// Далее рекурсивно ищутся все php-файлы, их массив отдаётся злой ф-ции
function makechange ($path){
  $code='
    error_reporting(0);
    ...
    if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
      header("Location: http://piopo.25u.com/");
      exit();
    }
  ';
  ...
  // Далее весь вредный код из переменной $code кодируется
  // через base64_encode($code) и внедряется в начало файлов
}

Код целиком приводить не буду, дабы не искушать скрипт-кидди. Понятно, что в качестве Location: удалённый скрипт каждый раз (приходя раз в 2-3 дня) подставляет разные сайты (скорее всего, трафиком с подобных редиректов полулегально торгуют).

Целостность скрипта никак не проверяется, хотя, подозреваю, что заводчик куда-то себе в логи сохраняет вывод скрипта, т.е. если скрипт не скажет «zzzzzzz» с кодом 200, то, возможно, хакерская система поймёт, что её накрыли, и как-то запаникует в ответ. Так что, полечив скрипт, думаю, стоит оставить ответ в виде «zzzzzzz» (можно будет следить за тем, какие «рекламные площадки» станут присылать в будущем).

Кстати, для тех, кто вынужден самостоятельно проходить курс молодого бойца с PHP-шеллами сразу в условиях ожесточенных военных действий, могу порекомендовать годную статью на английском языке с типовыми подходами к поиску шелла: http://25yearsofprogramming.com/blog/2010/20100315.htm

Если вдруг меня более трёх живых людей попросят в комментариях статью перевести на русский, то обязательно переведу и опубликую в этом блоге.

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

  1. Алексей
    Июл 16, 2012 @ 10:13:46

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

    Reply

    • kostin
      Июл 17, 2012 @ 22:04:58

      Смотрите дату последнего изменения файлов, чтобы понять, когда их последний раз перезаписывал троян. Потом смотрите access логи вокруг соответствующей даты, часа, минуты и секунды. Так и поймёте, в каком файле у вас лежит php-shell через которой повторно запускают заражение.

      Но ваше пожелание принято 🙂 Ждём других нуждающихся в переводе товарищей.

      Reply

  2. Стас
    Июл 17, 2012 @ 14:01:53

    при заходе на сайт всё нормально, но из посиковой выдаче попадаем чёрти куда
    http://yandex.ru/yandsearch?text=%D1%81%D0%BF%D0%B5%D1%86%D0%BB%D0%B5%D1%81%D0%BE%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0&lr=213

    Reply

    • kostin
      Июл 23, 2012 @ 01:34:31

      Стас, у вас разновидность вот этой гадости с редиректами: http://kostin.su/2012/07/htaccess-rewrite-redirect-virus/

      В конце того поста я описал, как такое лечить. Правда, лечить — мало, надо ещё найти как внедряли, чтобы снова через шелл не принесли эту заразу.

      Reply

  3. Дмитрий
    Авг 29, 2012 @ 11:37:13

    Пока не взломали, но прошу чтобы перевели для профилактики

    Reply

  4. Вячеслав
    Сен 10, 2012 @ 17:14:45

    Присоединяюсь к просьбе перевести и опубликовать статью. Заранее спасибо.

    Reply

  5. Журавль дракона
    Сен 19, 2012 @ 14:05:12

    Буду третьим попросившим перевести статью на русский язык. Так гораздо приятнее читать.

    Reply

Leave a Reply

*