DOM XSS > Erkennen + abwehren [Cross-Site-Scripting]

Hacker Manipulieren Steffen Lippke Hacking Series

Was ist DOM XXS?

Die Hacker manipulieren Deine Webseite, sodass alle Deine Besucher infiziert werden.

Wie funktioniert das? Wie kann ich mich schützen?

Dieser Guide klärt auf!

Was ist DOM Based XSS?

Die DOM Based XSS ist eine Art des Cross Site Scripting, welches Dein Webseiten-Grundgerüst (DOM) temporär verändert. Dabei bleibt der grundlegende HTML-Code gleich, während der Angreifer versucht die DOM zu manipulieren.

Schadfunktionen integriert!

Die DOM Based XSS versucht bösartigen Code auf einer fremden Webseite auszuführen, um eine schädliche Funktion im Browser jedes Webseiten-Besuchers ausführen zu lassen.

Einige Hacker haben in der Vergangenheit auf bekannten Webseiten Bitcoin-Mining Algorithmen eingefügt. Während der Nutzer den Browser nutzt, hat der Browser für die Kriminellen im Hintergrund Bitcoins geminet.

Die Bitcoin-Stromkosten mussten die Opfer tragen!

Steffen Lippke

Häufige Schwachstellen auf Deiner Webseite

Mögliche Schwachstellen für DOM Based XSS können Hacker über …

… auf Deiner Webseite integrieren. Ein JavaScript-Schadcode kann bis zu den Datenbanken vordringen und dort die Daten verändern oder löschen. Wenn andere Webseiten-Besucher die gleiche Webseite aufrufen, führt Deine eigene Webseite den Schadcode aus.

Injection über die GET Parameter
Injection über die GET Parameter

Zusammengefasst: Hacker können viel Mist mit XSS betreiben.

Grundlagen XSS + DOM einfach erklärt

DOM – Document Object Model

… ist die API zwischen HTML und Deinem JavaScript-Code.

Die DOM besitzt eine baumartige Struktur für die HTML-Objekte wie …

  • p (Testabsatz)
  • img (Bild)
  • a (Link)
  • form (Formular)
  • input (Eingabefeld)

Der Zugriff auf die DOM ermöglicht die Adressierung, Veränderung, Löschung und Erstellung von einzelnen HTML-Objekten.

Exemplarische DOM in HTML
Exemplarische DOM in HTML

Das W3C definiert den Aufbau der DOM so, dass wir heute eine einheitliche Struktur auf allen gültigen Webseiten haben.

Der Begriff DOM ist unzureichend: Das W3C müsst DOM in „Webseiten-Interface“ umbenennen.

Steffen Lippke

Du kannst Deine DOM mit dem W3C-Validatior bestätigen lassen. Eine „gut aussehende“ Webseite muss nicht zwangsläufig 100 % korrekt geschrieben sein, aber die Browser müssen die Fehler ignorieren.

Persistente und nicht-Persistente XSS

Das Persistente XSS basiert darauf, dass der Server in einer Datenbank permanent die Script-Datei speichert und bei Aufruf der richtigen Webseite führt das XSS-Script sich selbst aus.

Persistente XSS ist findbar in Datenbanken
Persistente XSS ist findbar in Datenbanken

Das führt dazu, dass andere ahnungslose Nutzer ungewollte Aktionen bei Aufruf ausführen. Nicht-persistente XSS ist direkt in einem Link oder in der HTML-Seite eingebettet.

DOM XSS selbst bauen

Die Programmiersprache JavaScript ermöglicht es Hackern Deine Webseite in Form und Inhalt zu ändern.

Z. B. kann JavaScript ganze HTML-Elemente wie Bilder, Texte oder Videos mit der DOM-Methode document.write() hinzufügen.

Das Kommando document.getElementById("") kann ein bestimmtes Objekt auf der Webseite adressieren und verändern. Hacker können mit diesen Werkzeugen z. B. gezielt einen Login mit einer Attrappe überblenden.

Dieser Login kann mit XSS generiert sein
Dieser Login kann mit XSS generiert sein

Das Kommando document.write() generiert auf der Seite des Opfers ein HTML-Formular. Die eingegebenen Login-Daten vergleicht das Formular nicht mit den echten Passwörtern, sondern speichert die Passwörter in Klartext auf unserer Hacking-Datenbank.

Wenn der Nutzer auf einer komprimierten Webseite den Nutzernamen und das Passwort im Fake-Login absendet, gibt unser Fake Login die Nachricht aus:

„Wir sind im Wartungsmodus! Versuchen Sie die Anmeldung später noch einmal.“

… auf einer gehackten Webseite

Die Zugangsdaten sind im Besitz des Hackers, falls der User sich nicht beim ersten Versuch vertippt hat.

Der Fake-Logins gehen noch besser

Eine Steigerung des Fake-Logins ist das Auslesen des „echten Logins“.

Ein JavaScript Keyup-Listener erkennt jeden Tastenschlag und übermittelt diesen per XHR-Anfrage an den Hacker.

Der Nutzer merkt davon nichts, weil er sich in das bekannte System einloggen konnte.

Mehr Traffic von Hackern

Auf manchen Plattformen kannst Du Dir Traffic für Deine Webseite „einkaufen“. Viel Traffic sollte nach Google nur die Webseitenbesitzer erhalten, die guten Content produzieren. Die Black-Hat-SEO forciert Click-Jacking, um die Nutzer von den infizierten Webseiten auf andere Webseiten weiterzuleiten.

Ein paar Zeilen JavaScript Code leitet den gesamten Traffic von der Opfer-Seite direkt auf die Kundenseite um. Dazu legen wir über die gesamte Seite einen durchsichtigen Button.

Der Nutzer möchte auf einen darunterliegenden Link klicken, landet aber auf einer völlig andere Webseite.

Nach Google ist diese Art von Traffic nicht vorteilhaft für das Ranking, weil der verwirrte Nutzer die ungewünschte Webseite schnell wieder verlässt (die Absprungquote).

Sicherung: JavaScript Segen und Fluch

Im Jahr 1995 entwickelte Brendan Eich den Vorläufer von JavaScript.

Seitdem diskutiert die Online-Community, ob diese Client-Sprache eine riesige Sicherheitslücke im Web ist oder ob die Sprache unverzichtbar ist.

Einzelne Internet Explorer Versionen deaktivierten JavaScript ganz.

Internet Explorer akzeptiert inzwischen JavaScript
Internet Explorer akzeptiert inzwischen JavaScript

Heute basieren viele Homepages, Web-Apps, Progressive Webs und Single Page Apps auf JavaScript zu 100 %. Programmierer entwickeln auf der Grundlage eines JavaScript-Frameworks die Webseiten!

Steffen Lippke

Ohne JavaScript läuft hier nichts mehr.

Umwandlung von Code in Text

Viele Foren unterdrücken die Kompilierung von JavaScript bei der Erstellung von Beiträgen komplett.

Die meisten Eingabefelder und URL-Parameter wandeln „bösen“ JavaScript Code in einen encodierten Klartext um. Das erhöht die Sicherheit vor XSS.

Formulare sind der XSS Klassiker
Formulare sind der XSS Klassiker

Die Umwandlung von Script-Code in harmlossen Zeichensalat basiert auf der Encodierung von typischen JavaScript Symbolen:

  • Alle & ändern zu &
  • Alle < ändern zu &lt;
  • Alle > ändern zu &gt;
  • Alle " ändern zu &quot;
  • Alle ' -- ändern zu > &#x27; (SQL-Injection)

Ein PHP-Befehl fügt die Zeichenkette innerhalb eines div oder span Tags. Das PHP-Script sollte immer HTML-Tags und JavaScript in den Eingaben encodieren, um der XSS vorzubeugen.

Das Gleiche gilt bei URLs. Die POST / GET-Parameter kann ein Hacker für JavaScript-Injections missbrauchen.

<script>var eineVarible = “BOSER CODE KANN HIER REIN?!“;:</script>

Ein aufmerksamer Programmierer sollte auch bei CSS vorsichtig sein. Wenn Daten von außerhalb kommen, kann der Aufruf der CSS den JavaScript-Code ausführen:

  • { background-url : "javascript:alert(‘Das ist boese XSS’)"; }
  • { text-size: "expression(alert(‘Das ist boese XSS’))"; }
XSS in CSS ist etwas spezieller
XSS in CSS ist etwas spezieller

Maximale Sicherheit mit Header

Eine Content Security Policy erstellt eine Whitelist mit den Ressourcen, die auf einer Domain aufgerufen werden dürfen. Entfernte Scripts haben somit keine Chance.

Der Browser lädt nur die Ressourcen, die sich auf Deiner Webseite befinden.

Credits

Icons made by Gregor Cresnar from www.flaticon.com is licensed by CC 3.0 BY  – Icons made by dDara from www.flaticon.com is licensed by CC 3.0 BY – Icons made by Icomoon from www.flaticon.com is licensed by CC 3.0 BY –Icons made by Those Icons from www.flaticon.com is licensed by CC 3.0 BY

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Jeden Monat teile ich mit Mitgliedern
4 neue praxisnahe Tutorials (je 1000+ Wörter).


Trage Deine Mail, damit Du
Deine Coding + Hacking Skills erweitern kannst!

Die Webseite nutzt nur technisch notwendige Cookies.