XSS Keylogging

XSS-Lücken werden oft unterschätzt, obwohl sich damit viele interessante Dinge anstellen lassen wie seitenübergreifendes Keylogging.

Die Lücke

Werden Benutzereingaben nicht genügend überprüft und anschliessend wieder ausgegeben, entstehen oft Sicherheitslücken. Triviales Beispiel:

Der Code sieht harmlos aus, wird jedoch etwas wie  <script type="text/javascript">alert('XSS');</script>  in die Suchmaske eingegeben, gibt das Skript anschliessend folgenden Code aus:

Keylogging: Das Skript

Natürlich könnte man über die XSS-Lücke einfach JavaScript Code einschleusen, der alle Tastatureingaben an den Angreifer schickt. Manchmal kommt es jedoch vor, dass XSS-Lücken nur auf “unwichtigen” Seiten auftreten. Beispiel: Ein Angreifer interessiert sich für die Logindaten, findet jedoch nur eine Lücke im Suchformular.

Um trotzdem auf das Loginformular zugreifen zu können, kann man auf iFrames zurückgreifen. Man schleust also ein Skript ein, welches ein iFrame mit dem Loginformular über der Seite anzeigt und loggt die Eingaben in diesem iFrame.

Moderne Browser versuchen, XSS-Lücken zu erkennen und führen JavaScript Code, der sich in der URL befindet, nicht aus. Um diese Sicherheitsmassnahmen zu umgehen, kann man über die Lücke einfach ein externes JavaScript einbinden.

Das JavaScript erzeugt dann zuerst ein passendes iFrame:

Sobald das iFrame die Loginseite geladen hat, fügen wir die Events an:

Die aufgezeichneten Daten kann man im Sekundentakt und beim Absenden einer Form an seinen eigenen Server übermitteln. Das fertige Skript könnte so aussehen: