O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

272.6 Datei-Altlasten
In diese SQL-Query wird eine ungeprüfte GET-Variable "id" eingefügt
und an die Datenbank gesendet. Diese SQL-Abfrage ist somit anfällig
für eine SQL-Injection, und das bedeutet, dass ein Angreifer eigene,
schädliche SQL-Befehle direkt in eine SQL-Abfrage einschleusen kann.
In unserer SQL-Abfrage gibt eine Eingabe von
?id=0/*!xxxxx%20s*/
bei korrekter Versionsnummer keinen Fehler »Unknown column« aus.
xxxxx steht hierbei für die Versionsnummern.
Um die Version 4.0.18 zu erkennen, würde ein Kommentar
?id=0/*!40018%20s*/
den gewünschten Erfolg bringen (die mittlere Versionsnummer muss
zweistellig sein). Handelt es sich bei der installierten Version tatsäch-
lich um eine MySQL-Datenbank 4.0.18, so gibt der PHP-Interpreter
keinen Fehler auf dem Bildschirm aus. Aber auch alle Versionen nach
4.0.18 ergeben keine Fehlermeldung, und deshalb müssen die verschie-
denen MySQL-Versionen von »oben nach unten erraten« werden.
Dies ist kein Fehler, sondern eine gewollte Implementierung der
MySQL-Entwickler, denn mithilfe dieser Funktionalität ist es möglich,
versionsabhängige SQL-Statements zu schreiben.
SELECT name FROM users WHERE id=0 /*!40100 OR (SELECT id FROM
tabelle2)*/
Der Kommentar in diesem Statement wird nur bei MySQL-Servern mit
einer Versionsnummer höher 4.1.0 ausgeführt, sonst wird der Kom-
mentar ignoriert.
Das Erfragen der MySQL-Versionsnummer ist eine SQL-Injection-
Attacke. Mit einem Angriff dieser Art können Sie jedoch noch sehr viel
umfangreichere Schäden anrichten, daher haben wir dem Thema ein
eigenes Kapitel gewidmet. Wenn Sie eine Datenbank installiert haben,
legen wir Ihnen Kapitel 5 besonders ans Herz.
2.6 Datei-Altlasten
Bei der Entwicklung von Webapplikationen werden häufig temporäre
Dateien angelegt – sei es als Sicherheitskopie, bevor der Entwickler
einen neuen Programmieransatz ausprobiert, aus administrativen
Gründen oder zu Testzwecken. Diese Altlasten werden dann häufig
zusammen mit der Anwendung auf den produktiven Server kopiert
und warten dort auf einen findigen Angreifer, der die Dateien entdeckt.
Neben temporären Sicherheits- oder Arbeitskopien der verwendeten
PHP-Skripte liegen auch Include- oder Backup-Dateien oft unge-
2 Informationsgewinnung28
schützt – und mit falschen Dateiendungen – auf dem Webserver und
können so ausgelesen werden.
Sie erweisen sich ebenso einen Bärendienst, wenn Sie eine Datei
mit der PHP-Funktion
phpinfo() für jeden zugänglich auf dem Server
gespeichert haben.
In den folgenden Abschnitten erfahren Sie, um welche Dateien es
sich handelt und wie man diese – sofern ihre Anwesenheit auf dem
Webserver überhaupt notwendig ist – schützen kann.
2.6.1 Temporäre Dateien
Durch Unachtsamkeiten des Programmierers beim Hochladen der
Dateien oder bei der Entwicklung befinden sich bisweilen im Docu-
ment Root, also im Hauptverzeichnis des Webservers, Dateien, die
dort nichts verloren haben. Viele Entwicklungswerkzeuge, wie FTP-
Programme oder Entwicklungsumgebungen, generieren sie ohne Wis-
sen des Benutzers. Diese Dateien können uns Aufschluss über instal-
lierte Software, Datenbankverbindungsdaten oder versteckte Include-
Dateien geben, die ein normaler Benutzer der Applikation oder Webs-
eite nicht entdecken kann. Besonders beliebt sind Sicherungskopien
mit der Endung
.bak oder andere temporäre Dateien.
Dateien, die eine Endung besitzen, die der Webserver nicht inter-
pretieren kann, werden als Klartext an den Client ausgeliefert. In den
Dateien können sich sensible Informationen wie Usernamen, Passwör-
ter oder Administrationspfade befinden, die für einen weiteren Angriff
benutzt werden können.
Gerade ältere Windows-Anwendungen hatten oft die unange-
nehme Eigenschaft, temporäre Dateien im aktuellen Arbeitsverzeichnis
abzulegen. Spätestens mit der Einführung von Windows XP hat jedoch
der Pfad
%TEMP%, der jeder Anwendung zur Verfügung steht, als Stan-
dardverzeichnis für temporäre Dateien Einzug gehalten.
Auch Programme unter Unix-basierten Systemen zeigen häufig ein
solches Verhalten – allen voran der beliebte Texteditor vi. Beim Öffnen
einer Datei mit einem Editor entstehen dadurch Dateien mit der Datei-
endung
.tmp, .php~, .php.swp oder einfach nur .~ . Je nachdem, wie die
Datei benannt ist, entstehen dann Dateien, die z.B.
index.php~ oder
index.php.swp heißen.
Der Apache-Webserver parst jedoch alle Dateien, bei denen sich
ein
.php. im Dateinamen befindet, egal ob am Ende oder anderswo.
Hierfür ist das Modul
mod_mime verantwortlich, das es jedoch nur beim
Apache-Webserver gibt. Dieses Modul sorgt u.a. dafür, dass verschie-
dene Sprachversionen einer Datei automatisch anhand der Browser-

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required