Sonntag, 31. Oktober 2010


Topthema

Donnerstag, 16. Oktober 2008 | Topthema

About Security #177: Schwachstellen-Suche: Directory-Traversal

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/045550)

Bei der Suche nach Schwachstellen in Webanwendungen geht es ab dieser Folge um Schwachstellen, die den Zugriff auf normalerweise nicht zugängliche Dateien erlauben. Den Anfang macht dabei die Directory-Traversal-Schwachstelle.

Einführung

Jede Webanwendung besteht aus mehr oder weniger vielen verschiedenen statischen oder dynamisch erzeugten Seiten, die vom einem Webserver an den Benutzer ausgeliefert werden. Dabei sind die Seiten im wesentlichen Dateien auf dem Server, die vom Webserver und der Webanwendung beim Aufruf ggf. mit dynamischen Inhalten erweitert und dann ausgeliefert werden. Da nicht alle auf dem Server gespeicherten Dateien für den Aufruf durch den Benutzer gedacht sind, ist der Webserver auch dafür zuständig, nur die für die Benutzer vorgesehenen Dateien auszuliefern und Zugriffe auf alle anderen Dateien zu unterbinden. Dazu werden die Dateien im wesentlichen in zwei Kategorien unterteilt: Zum einen die für die Ausgabe an den Benutzer bestimmten Dateien, die in einem eigenen Verzeichnis und dessen Unterverzeichnissen gespeichert sind, und zum anderen alle anderen Dateien, die außerhalb dieses sog. Webroot-Verzeichnisses gespeichert sind. Ein Spezialfall sind dabei Dateien, die zwar unterhalb des Webroot-Verzeichnisses gespeichert sind, auf die aber nur bestimmte Benutzer zugreifen dürfen.

Verzeichnis wechsle dich

Security aktuell
T�glich aktuelle Security-Infos!

Bei einem Directory-Traversal-Angriff ermittelt der Angreifer den Speicherort eines für ihn eigentlich nicht zugänglichen Verzeichnisses oder einer eigentlich nicht zugänglichen Datei und greift dann darauf zu. Je nach Art der Datei können die Folgen von der Preisgabe sensitiver Informationen (Zugriff auf z.B. eine Datei mit Zugangsdaten) bis zur Ausführung unerwünschten Codes (Zugriff auf ein Programm oder eine Skriptdatei) reichen.

Wo angreifen?

Ein Directory-Traversal-Angriff kann am einfachsten durch eine Änderung der URL in der Adresszeile des Browsers des Angreifers erfolgen. Weitere Angriffspunkte sind Parameter, die von der aktuellen Seite einzubindende Dateien wie z.B. Header, Footer oder Erweiterungen festlegen. Diese Parameter können wieder überall gespeichert sein: Als GET-Parameter in der URL, als POST-Parameter in einem evtl. versteckten Eingabefeld oder als Cookie-Wert.

Direkte Zugriffe

Für die folgenden Beispiele soll sich die Webanwendung im Verzeichnis /anwendung/programm befinden, Daten wie z.B. eine Datei mit den Zugangsdaten der Benutzer befindet sich im Verzeichnis /anwendung/daten. Ein normaler Benutzer ruft z.B.

http://www.server.example/anwendung/programm/start.asp

auf, um die Webanwendung zu starten. Der Angreifer könnte z.B. über

http://www.server.example/anwendung/programm/../daten/benutzer.dat

oder

http://www.server.example/anwendung/daten/benutzer.dat

auf die Datei mit den Zugangsdaten der Benutzer zugreifen. Ist der Webserver entsprechend konfiguriert, gibt er daraufhin die angeforderte Datei an den Angreifer aus. Wurde beim Entwickeln der Webanwendung darauf geachtet, das ein Benutzer nicht auf die Dateien im Verzeichnis /anwendung/daten und/oder solche mit der Endung .dat zugreifen kann, geht der Angreifer leer aus.

Ausgabe über ein Programm
About Security: Die komplette Serie

Das Skript start.asp soll nun einen Parameter erhalten, über den vor der Ausgabe einzufügende Daten festgelegt werden:

http://www.server.example/anwendung/programm/start.asp?daten=impressum

zeigt dann z.B. das Impressum der Website an. Vielleicht gibt es ja eine Datei impressum, impressum.html oder ähnlich im gleichen Verzeichnis? Im Beispiel soll die entsprechende Datei in der Tat vorhanden sein und der Einfachheit halber impressum heißen: Beim Aufruf von

http://www.server.example/anwendung/programm/impressum

werde die Daten des Impressums ausgegeben, aber unformatiert und ohne das Aussehen der anderen Seiten der Anwendung. Das Skript start.asp wandelt also (Text-)Dateien in optisch am die Anwendung angepasste Webseiten um. Ob das Skript weitere Funktionen hat, ist zur Zeit uninteressant. Was passiert denn, wenn für den Parameter daten eine andere Datei als die im Rahmen der Anwendung üblichen angegeben wird? Ein Standardbeispiel für solche Fälle ist für Windows-Systeme die Datei boot.ini und für Unix-artige Systeme die Datei /etc/passwd, die zwar keine Passwörter mehr enthält, aber immerhin noch die Liste der existierenden Benutzer. Jetzt versuchen wir es aber erst mal eine Nummer kleiner und geben uns mit der Benutzerdatenbank der Webanwendung zufrieden:

http://www.server.example/anwendung/programm/start.asp?daten=../daten/benutzer.dat

führt entweder zu einer Fehlermeldung (prima, die Anwendung ist zumindest an dieser Stelle nicht angreifbar), oder zur Ausgabe der Zugangsdaten der Benutzer. Je nachdem, ob das Skript den Zugriff auf Dateien und/oder Verzeichnisse einschränkt, kann darüber also jede beliebige Datei angezeigt werden.

Welche Möglichkeiten sich einem Angreifer durch die Ausnutzung einer Directory-Traversal-Schwachstelle eröffnen erfahren Sie in der nächsten Folge.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

Kommentare

Folgende Links könnten Sie auch interessieren