Erklärung zu XSS (Cross-Site -Scripting)
Bei Cross-Site Scripting handelt es sich um eine Art der HTML Injection. Cross-Site Scripting tritt dann auf, wenn eine Webanwendung Daten annimmt, die von einem Nutzer stammen und diese Daten dann an einen Browser weitersendet, ohne den Inhalt zu überprüfen. Damit ist es einem Angreifer möglich auch Skripte indirekt an den Browser des Opfers zu senden und damit Schadcode auf der Seite des Klienten auszuführen.
Ein klassisches Beispiel für Cross-Site Scripting ist die Übergabe von Parametern an ein serverseitiges Skript, das eine dynamische Webseite erzeugt. Dies kann etwa das Eingabeformular einer Webseite sein, wie in Webshops, Foren, Blogs und Wikis üblich. Die eingegebenen Daten werden auf der Webseite wieder als Seiteninhalt ausgegeben, wenn die Seite von Benutzern aufgerufen wird. So ist es möglich, manipulierte Daten an alle Benutzer zu senden, sofern das Serverskript dies nicht verhindert. Diese Daten sind oft Code einer clientseitigen Skriptsprache (meist JavaScript).
Häufige Szenarien eines Angriffs sind das Entführen von Benutzer-Sessions, Website Defacements, das Einstellen von negativen Inhalten, Phishing-Angriffe und die Übernahme der Kontrolle des Benutzerbrowsers.
Besonders gefährlich wird dies, wenn die Webseite, auf der der Schadcode untergebracht wurde, im lokalen Browser mit besonderen Sicherheitsrechten (Privilegien) ausgestattet ist. Der Schadcode kann dann in Abhängigkeit von der Mächtigkeit der Skriptsprache verschiedene Dinge tun, die mit den Rechten des lokalen Benutzers möglich sind. Da aus Bequemlichkeitsgründen auf Microsoft-Windows-Systemen der lokale Benutzer häufig mit Administrator-Rechten ausgestattet ist, ist dies bereits eine potenziell sehr gefährliche Konstellation. Aber auch ohne Administrator-Rechte kann der Angreifer versuchen, durch Ausnutzung von Sicherheitslücken bei der Ausführung der betreffenden Skriptsprache diese Rechte zu erlangen.
In der Regel wird XSS etwa in Foren breit gestreut und nicht zielgerichtet an ausgewähle Personen gerichtet. Dies ist jedoch ebenfalls möglich. Neben dem klassischen XSS im Webbrowser, interpretieren häufig auch E-Mail-Programme Scriptcode, was einen Angriff per E-Mail ermöglicht. Dazu schiebt der Angreifer dem Opfer ein von ihm präpariertes HTML-Dokument unter, das per E-Mail verschickt wird. Oder der Angreifer lässt dem Opfer einen Hyperlink zukommen, der auf eine vom Angreifer präparierte Webseite weist oder selbst den Schadcode enthält. Häufig werden dazu auch Kurz-URLs, URL-Spoofing-Techniken und andere Kodierungsverfahren eingesetzt, um den Link zu verschleiern oder vertrauenswürdig erscheinen zu lassen.
Angriffsarten
Es gibt drei grundlegende Arten[1] von Cross-Site-Scripting-Angriffen: Reflektive, Persistente und DOM-basierte. Diese werden im Folgenden erläutert.
In den Beispielen wird zur Anschauung der einfache JavaScript-Code alert(„XSS“) verwendet, der mithilfe des script-Elements in ein HTML-Dokument eingebunden wird:
<script type=“text/javascript“>alert(„XSS“);</script>
Dieser JavaScript-Code beschreibt zwar nur einen harmlosen Warnhinweis-Dialog mit dem Text „XSS“. Doch auf gleiche Weise kann auch jeder andere JavaScript-Code eingeschleust werden.
Nicht-Persistent oder Reflektiv [Bearbeiten]
Beim nicht-persistenten (non-persistent) oder reflektiven (reflected) Cross-Site Scripting handelt es sich um einen Angriff, bei dem eine Benutzereingabe direkt vom Server wieder zurück gesendet wird. Enthält diese Eingabe Skriptcode, der vom Browser des Benutzers anschließend interpretiert wird, kann dort Schadcode ausgeführt werden.
Hierbei wird der Umstand ausgenutzt, dass dynamisch generierte Webseiten ihren Inhalt oft über URL (HTTP-GET-Methode) oder Formulare (HTTP-POST-Methode) übergebene Eingabewerte anpassen. Nicht-persistent heißt dieser Typ, da der Schadcode nur temporär bei der jeweiligen Generierung der Webseite eingeschleust wird, nicht aber gespeichert. Ruft man die Seite danach ohne die manipulierte URL oder das manipulierte Formular auf, ist der Schadcode nicht mehr enthalten.
Beispiel:
Eine Suchfunktion soll das Durchsuchen sämtlicher Dokumente einer Website ermöglichen. Dabei wird auf der Ergebnisseite der Suchbegriff nochmals gesondert angezeigt („reflektiert“). Der Funktion kann der Suchbegriff entweder per URL-Argument oder über ein Formular übergeben werden. Eine solche Anfrage sieht damit etwa so aus: Example Web Page
Die übergebenen Suchbegriffe werden nun von einer serverseitigen Webapplikation ungeprüft auf der Ergebnisseite wieder ausgegeben:
Sie suchten nach: Suchbegriff</p>
Würde nun hier folgender Suchbgriff verwendet: <script type=“text/javascript“>alert(„XSS“)</script>
würde dann folgender HTML-Code erzeugt:
Sie suchten nach: <script type=“text/javascript“>alert(„XSS“)</script></p>
Nach dem gleichen Prinzip kann auch über manipulierte Formulare oder Formulareingaben Schadcode eingeschleust werden. Dies ist schwieriger, da hierbei das Opfer zuerst auf eine Webseite mit manipuliertem Formular gelockt werden muss, das das Opfer dann auch nutzen muss.
Persistente oder beständige Angriffe [Bearbeiten]
Persistentes (persistent) oder beständiges (stored) Cross-Site Scripting unterscheidet sich vom reflektiven XSS prinzipiell nur dadurch, dass der Schadcode auf dem Webserver gespeichert wird, wodurch er bei jeder Anfrage ausgeliefert wird. Dies ist bei jeder Webanwendung möglich, die Benutzereingaben serverseitig speichert und diese später wieder ausliefert, solange keine Prüfung der Benutzereingaben bzw. eine geeignete Kodierung der Ausgabe stattfindet.
Beispiel:
Eine Webseite bietet ein Gästebuch, in dem Besucher Nachrichten oder Grüße hinterlassen können. Die eingetragenen Daten werden serverseitig in einer Datenbank gespeichert und bei jedem Aufruf wieder ausgegeben.
Wird nun hier als Nachricht Folgendes eingegeben:
Eine wirklich sehr informative Website!<script type=“text/javascript“>alert(„XSS“)</script>
Würde diese bei jedem Aufruf ausgeliefert und das Skript vom Browser des Benutzers ausgeführt.
DOM-Basiert oder Lokal [Bearbeiten]
Diese Art des Angriffs wird DOM-basiertes (Dom Injection) oder lokales (local) Cross-Site Scripting genannt.[2] Im Gegensatz zu den oben genannten gängigen XSS-Varianten, ist hier die Webapplikation auf dem Server gar nicht beteiligt. Somit sind auch an sich statische HTML-Seiten mit JavaScript-Unterstützung anfällig für diesen Angriff. Der Schadcode wird direkt an ein clientseitiges Skript zur Ausführung übergeben. Dies kann beispielsweise ein JavaScript sein, das einen URL-Argumentwert zur Ausgabe von Daten verwendet ohne diesen ausreichend zu prüfen. Ein solcher Angriff bedarf des gezielten Aufrufs einer kompromittierten URL.
Neuerdings werden auch Webspider missbraucht, um XSS- und SQL-Injection-Attacken auszuführen. Hierzu wird ein präparierter Link auf einer Webseite veröffentlicht. Sobald ein Webspider diesem Link folgt, löst er die Attacke aus. Dadurch taucht die IP-Adresse des Spiders und nicht die des eigentlichen Angreifers in den Protokollen des angegriffenen Systems auf. Der Angreifer kann somit anonym agieren. In schwerwiegenden Fällen wäre es darüber hinaus aber dennoch möglich, die IP-Adresse des Computers, der den manipulierten Link veröffentlicht hat, herauszufinden.
Beispiel:
Eine clientseitige Skriptsprache wie etwa JavaScript liest ein Argumentwert aus der URL aus: http://example.com/foobar.html?arg=Argumentwert
Und fügt diesen nach folgendem Schema ungeprüft in das HTML-Dokument ein:
Sie haben an die URL diesen String angehängt: Argumentwert
Wird nun die aufrufende URL folgendermaßen manipuliert: http://example.com/foobar.html?arg=<script type=“text/javascript“>alert(„XSS“)</script> würde der durch das serverseitige Skript erzeugte HTML-Code wie folgt aussehen:
Sie haben an die URL diesen String angehängt: <script type=“text/javascript“>alert(„XSS“)</script>
Somit würde obiges Skript im Kontext der aufrufenden Seite ausgeführt werden.
Dieses einfache Beispiel funktioniert in Firefox nicht ohne weiteres, da dieser die Zeichen einer URL in einem Link implizit kodiert. Es sind aber DOM-Injections bekannt, für die auch Firefox anfällig ist[/code]Quelle: Wikipedia
Credits: nrxpro
MfG