Samstag, 31. Juli 2010 |
In About Security #158 erfuhren Sie, wie einfache Fälle von XSS-Schwachstellen gefunden werden können: Wenn es keinerlei Prüfung der Eingaben gibt, reicht die übliche Alertbox oder auch ein einfaches Testmuster zum Finden der Schwachstellen aus. Öffnet sich die Alertbox bzw. erscheint das Testmuster in der Ausgabe, ist XSS möglich. Schwieriger wird es, wenn die Eingaben auf eingeschleusten Code geprüft und/oder vor der Ausgabe gefiltert werden.
Die einfachste Möglichkeit, eine Prüfung oder Filterung zu
erkennen, besteht in einer Änderung des Testmusters. Ein Testmuster
wie das in About Security #158
vorgeschlagene ##XSS-Test## in der Ausgabe
zeigt nur, dass der
entsprechende Parameter in der erzeugten Webseite erscheint. Selbst bei
einer Prüfung und/oder Filterung sollte diese Zeichenkette unversehrt
in der Ausgabe erscheinen, da sie nichts Verdächtiges bzw.
(potenziell) Gefährliches enthält. Trotzdem ist diese
Zeichenkette ein guter Ansatz für die Suche nach möglichen
XSS-Schwachstellen: Überall, wo sie in der Ausgabe erscheint,
könnte HTML- oder Skriptcode eingeschleust werden. Die Parameter,
über die das Testmuster erfolgreich eingeschleust wurde, müssen
dann genauer untersucht werden.
N E U ! Security
aktuell
Täglich aktuelle Security-Infos!
Als nächster Test wird das Testmuster um potenziell
gefährliche
Zeichen, also insbesondere <, >, / und :, erweitert. Das
könnte
z.B. folgendes Testmuster ergeben: ##<XSS-:-Test/>##.
Wie reagiert die Webanwendung auf diese Zeichen? Im Prinzip gibt es nur folgende Möglichkeiten:
Liegt der Quelltext der Webanwendung vor, entweder weil es die eigene ist oder weil es sich um Open-Source-Software handelt, ist ein Blick auf die entsprechenden Funktionen zum Prüfen und Filtern der Eingaben hilfreich. Ansonsten bleibt nur das systematische Ausprobieren aller Möglichkeiten zum Umgehen der Schutzfunktionen. Das XSS Cheat Sheet enthält eine umfangreiche Sammlung von Möglichkeiten, Filter zu umgehen. Systematisches Ausprobieren aller Möglichkeiten klingt nach einer stupiden Arbeit, und für sowas ist ja eigentlich ein Computer prädestiniert. In der Tat ist das eine Aufgabe, für die ein Scanner gut geeignet ist. So gibt es z.B. auch das Cheat Sheet als XML-Datei zur Nutzung durch Tools wie das aus dem CAL9000-Projekt des Open Web Application Security Project (OWASP). Um diese und viele andere Tools wird es in zukünftigen Folgen von About Security gehen, vorerst geht es primär um die manuelle Suche.
Bei der Suche nach Schwachstellen, bei denen Benutzereingaben manipuliert werden, reicht es nicht, nur die von der Webanwendung verwendeten Methoden zur Übertragung der Parameter zu testen. Jeder Parameter kann über drei Methoden übertragen werden: Über die GET- oder die POST-Methode oder als Cookie. Es kommt immer wieder vor, dass die verwendete Methode in der Webanwendung nicht oder falsch beachtet wird. Wird der eine Parameter geprüft, aber ein anderer verwendet, kann der Angreifer seinen Schadcode an der Schutzfunktion vorbeischmugglen. Dazu ein Beispiel:
In PHP gibt es verschiedene Arrays für die über GET, POST und
Cookies übertragenen Parameter sowie das Array , in das
der Reihe nach erst die GET-, dann die POST- und danach die
Cookie-Parameter geschrieben werden. Wird das GET-Array verwendet, aber
das
REQUEST-Array geprüft, kann ein Angreifer seinen Schadcode über
einen GET-Parameter einschleusen und durch einen gleichnamigen
POST-Parameter tarnen: ["name"]
enthält den XSS-Code, ["name"] einen
harmlosen Wert. Im zusammengeführten Array
überschreibt der POST-Parameter den gleichnamigen GET-Parameter und
die Anwendung prüft den harmlosen Wert.
Einige Möglichkeiten, komplizierteren XSS-Schwachstellen auf die Spur zu kommen, werden in der nächsten Folge vorgestellt.
Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!
About Security – Übersicht zum aktuellen Thema "Schwachstellensuche – III. Angriffe über vom Benutzer gelieferte Daten: XSS"