Samstag, 31. Juli 2010 |
Ab dieser Folge geht es um Angriffe über vom Benutzer gelieferte Daten. Den Anfang macht die Suche nach Cross-Site-Scripting-Schwachstellen.
Cross-Site-Scripting-Schwachstellen wurden bereits in About Security #14 und #15 vorgestellt und dann ab #129 vertieft. Was Cross-Site Scripting ist und wie entsprechende Angriffe funktionieren, erfahren Sie dort. Im Folgenden dreht sich alles um die Frage, wie man solche Schwachstellen findet.
Die erste Voraussetzung für Cross-Site-Scripting-Angriffe ist eine fehlende oder mangelhafte Prüfung von Benutzereingaben: Immer, wenn HTML- oder JavaScript-Code eingegeben werden kann, besteht Gefahr. Unerwünschte Tags müssen ausgefiltert werden, bevor die eingegebenen Daten ausgegeben oder von der Webanwendung gespeichert werden. Und damit sind wir schon bei der zweiten Voraussetzung: Benutzereingaben müssen an Benutzer ausgegeben werden. Ob das der gleiche Benutzer oder ein anderer ist, ist dabei erst einmal unerheblich. Diese Unterscheidung wird erst dann interessant, wenn es um die Durchführbarkeit eines Angriffs geht. Dann gibt es einige mögliche Kombinationen:
N E U ! Security
aktuell
Täglich aktuelle Security-Infos!
Potenziell sind alle Benutzereingaben für Cross-Site Scripting brauchbar. Außer den klassischen Fällen wie Suchwörtern, 404-Fehlermeldungen, Kommentaren und Forenbeiträgen kann der XSS-Code z.B. auch über Benutzernamen, SQL-Fehlermeldungen oder manipulierte HTTP-Header eingeschleust werden. Alles Daten, die vom Client geliefert und daher vom Benutzer manipuliert werden können, müssen auf eingeschleusten XSS-Code geprüft werden, bevor sie direkt an den Benutzer zurückgegeben oder für eine spätere Verwendung von der Webanwendung gespeichert werden. Dabei ist mit Benutzer nicht nur der eigentliche Benutzer der Webanwendung gemeint. Auch Administratoren, die für normale Benutzer nicht zugängliche Daten wie z.B. Logfiles in einem Webbrowser betrachten, können das Opfer von XSS-Angriffen werden.
Finden keinerlei Prüfungen statt, können potenziell gefährliche Parameter durch das simple Eingeben eines Testcodes wie z.B. des altbekannten
<script>alert('XSS')</script>
überprüft werden. Werden mehrere Parameter auf einmal getestet, kann zur Unterscheidung der Parameter deren jeweiliger Name in die Meldung übernommen werden:
http://www.beispiel.example/index.php?name=<script>alert('XSS über name')</script>
&password=<script>alert('XSS über password')</script>
Außer Formularfeldern (einschließlich versteckten) und URL-Parametern müssen auch Cookies und, sofern von der Webanwendung verwendet, HTTP-Header geprüft werden.
Außer der klassischen Alertbox können auch einfach erkennbare Testmuster eingegeben und die ausgegebenen Seiten darauf überprüft werden. Die Zeichenkette ##XSS-Test## fällt beispielsweise relativ gut auf und lässt sich auch leicht über eine Suchfunktion finden. Außer auf dieser Seite kann ich mir jedenfalls keine Seite vorstellen, die dieses Muster in der normalen Seite enthält.
Mit diesen Methoden findet man die einfachen Fälle von XSS-Schwachstellen. Wie man kniffligere Versionen erkennt, 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!
About Security – Übersicht zum aktuellen Thema "Schwachstellensuche – III. Angriffe über vom Benutzer gelieferte Daten: XSS"