Dienstag, 19. August 2008

News

präsentiert von: entwickler.com
Donnerstag, 19. Juni 2008

About Security #160: Schwachstellen-Suche: XSS finden

In dieser Folge geht es um kompliziertere XSS-Schwachstellen im Vergleich zu den einfachen Fällen, die in About Security #158 vorgestellt wurden. In About Security #159 erfuhren Sie, wie man genauer zu untersuchende Parameter in einer Webanwendung findet. Ab dieser Folge dreht sich alles um die Frage, ob die gefundenen Parameter XSS-Angriffe erlauben oder nicht.

Beispiel 1: Normaler Text

Das eingegebene Testmuster, z.B. ##XSS-Test##, erscheint im normalen Text der Seite:

<p>
Die Suche nach '##XSS-Test##' lieferte 0 Ergebnisse.
</p>

In diesem Fall kann der gewünschte Schadcode, z.B.

<script>alert('XSS')</script>

direkt eingegeben werden:

<p>
Die Suche nach '<script>alert('XSS')</script>' lieferte 0 Ergebnisse.
</p>

Beim Rendern der Seite wird die Alertbox geöffnet.

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Der Angriff wird schwieriger, wenn z.B. script-Tags ausgefiltert werden. Dann muss entweder ein Angriff gewählt werden, der ohne script-Tags auskommt, oder die script-Tags müssen an der Filterfunktion vorbeigeschleust werden.

Oft reagieren Filter nur auf "normale" Tags wie <script> und <SCRIPT>, während z.B. <sCrIpT> nicht ausgefiltert wird. Den Webbrowsern ist die Schreibweise egal, die führen auch den in <sCrIpT>...</SCrIPt> eingeschlossenen Code aus. Vielleicht kann der Filter auch durch ein eingefügtes Leerzeichen (<script >) oder URL-codierte Zeichen (%3cscript%3e) ausgetrickst werden.

Auch die Schachtelung von Tags kann einfache Filter überlisten: Wird die Eingabe nur einmal durchsucht und dabei jeder gefundene script-Tag gelöscht, würde eine Eingabe wie z.B.

<scr<script>ipt>alert('XSS')</scr</script>ipt>

nach der Filterung, bei der die zur Tarnung eingefügten vollständigen Tags <script> und </script> gelöscht wurden, ausführbaren Code ergeben.

Das XSS Cheat Sheet enthält eine ganze Reihe möglicher Alternativen, um Filter zu umgehen.

Beispiel 2: input-Tags

Das eingegebene Testmuster erscheint in einem input-Tag:

<input type="text" name="foo" value="##XSS-Test##">

Einfach nur den XSS-Code, z.B.

<script>alert('XSS')</script>

zum Öffnen einer Alertbox, einzuschleusen, funktioniert an dieser Stelle nicht. Trotzdem ist ein XSS-Angriff möglich: Die doppelten Anführungszeichen um das Testmuster sowie das input-Tag werden geschlossen und der gewünschte XSS-Code angehängt:

"><script>alert('XSS')</script><!--

Die abschließende Zeichenkette <!-- leitet einen Kommentar ein und verhindert Probleme durch die folgenden Zeichen ">:

<input type="text" name="foo" value=""><script>alert('XSS')</script><!--">

Werden < und > oder auch komplette script-Tags ausgefiltert, ist das auch kein Problem. Dann kann einfach ein Event-Handler in das input-Tag eingefügt werden:

"onfocus="alert('XSS')

als eingeschleuster XSS-Code ergibt

<input type="text" name="foo" value=""onfocus="alert('XSS')">

Wenn der onfocus-Event ausgelöst wird, wird der eingeschleuste Code ausgeführt.

About Security: Die komplette Serie
Beispiel 3: img-Tags

Das eingegebene Testmuster erscheint im src-Attribut eines img-Tags:

<img src="##XSS-Test##">

In einigen Browsern darf das Attribut eine URL mit dem javascript:-Protokoll enthalten, sodass die Schwachstelle direkt ausgenutzt werden kann:

javascript:alert('XSS');

ergibt

<img src="javascript:alert('XSS');">

wodurch der eingeschleuste Code beim Auswerten des img-Tags ausgeführt wird. Soll der Angriff in jedem Browser funktionieren, kann ein nicht existierendes Bild angegeben und ein onerror-Eventhandler mit dem gewünschten Code eingefügt werden:

gibtesnicht.gif"onerror="alert('XSS')

ergibt

<img src="gibtesnicht.gif"onerror="alert('XSS')">
Beispiel 4: JavaScript

Das Testmuster erscheint in einem JavaScript-Skript der Webseite:

<script>
  var a=123;
  var b='##XSS-Test##';
  var c='abc'
  ...
</script>

Um darüber Code einzuschleusen, wird das einfache Anführungszeichen und danach mit einem Semikolon der Ausdruck beendet und dann der Schadcode eingefügt:

'; alert('XSS'); var nix='

Das angehängte var nix=' ist notwendig, da die Syntax des Skripts trotz der Manipulation korrekt sein muss. Eingesetzt ergibt sich damit

<script>
  var a=123;
  var b=''; alert('XSS'); var nix='';
  var c='abc'
  ...
</script>

Der Schadcode wird zusammen mit dem Skript ausgeführt.

Zusammenfassung

Um mögliche XSS-Schwachstellen zu finden, müssen zuerst die Parameter ermittelt werden, die in der von der Webanwendung erstellten Seite ausgegeben werden. Dazu wird für jeden Parameter ein Testmuster eingegeben und dies in der erzeugten Seite gesucht. Jedes Auftreten des Testmusters in der Webseite muss dann daraufhin überprüft werden, ob darüber Scriptcode eingeschleust werden kann. Dabei sind zwei Punkte zu beachten: Ist an der jeweiligen Stelle das Einschleusen von Code prinzipiell möglich und wenn ja, können eventuell vorhandene Schutzfunktionen umgangen werden?

Während bei der Suche nach XSS-Schwachstellen alle Parameter geprüft werden müssen, reichen zur Verhinderung von XSS-Angriffen wenige Schritte aus. Wie Sie XSS-Angriffe verhindern, 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

Ihre Meinung ist uns wichtig!
Mobile Computing Heute & Morgen!
Nehmen Sie an unserer Umfrage zum Thema Mobile Computing in Deutschland teil und nutzen Sie die Chance eine Casio Exilim EX-Z1050-Digitalkamera zu gewinnen!

Konferenzen

BASTA! 2008

BASTA! 2008

22.-26. September 2008
Rheingoldhalle, Mainz

SQLCON 2008

SQLCON 2008

22.-26. September 2008
Rheingoldhalle, Mainz

IPC 2008

IPC 2008

27.-31. Oktober 2008
Rheingoldhalle, Mainz

AJAX IN ACTION 2008

AJAX IN ACTION 2008

28.-31. Oktober 2008
Rheingoldhalle, Mainz

EKON 12

EKON 12

28.-31. Oktober 2008
Congress Centrum, Mainz

W-JAX 2008

W-JAX 2008

3.- 7. November 2008
ArabellaSheraton Hotel München

SOACON 2008

SOACON 2008

3.- 7. November 2008
Arabella Sheraton Hotel, München

JAX Asia 2008

JAX Asia 2008

25.-28. November 2008
Singapore, Kuala Lumpur, Jakarta

Werbung
Top-Jobs

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Gebit Solutions

Java Profis gesucht (m/w)

Hueber Verlag GmbH & Co. KG

Webdesigner/ Webprogrammierer (m/w)

OLYMPUS EUROPA Holding GmbH

Web-Entwickler (m/w)

Magazine

Entwickler Magazin - Enterprise Technologies & Business Solutions

Entwickler Magazin

Enterprise Technologies & Business Solutions

dot.net magazin - die unabhängige Quelle für .NET-Technologien

dot.net magazin

Die Quelle für .NET-Technologien

Eclipse Magazin

Eclipse Magazin

Weltweit erstes Magazin für Eclipse-Entwickler

Java Magazin - Internet & Enterprise Technology

Java Magazin

Internet & Enterprise Technology

CREATE OR DIE - Ein Leben für die Kreativität

CREATE OR DIE

Ein Leben für die Kreativität

Business Technology - Management Magazin

Business Technology

Management Magazin

PHP Magazin - Professional PHP Development

PHP Magazin

Professional PHP Development

Bücher


hosted by HostEurope