Hallo allerseits, ich bin
Nikita Kurtin , Kuratorin der israelischen Hochschule für IT und Sicherheit
HackerUCheckpoint , das führende israelische Unternehmen für Informationssicherheit, hat diesen Sommer eine Reihe von Cyber-Tests veröffentlicht.
Die Aufgaben wurden in sechs Kategorien unterteilt:
• Logik
• Web
• Programmierung
• Vernetzung
• Rückwärtsfahren
• Überraschung
Zwei Aufgaben für jede Richtung. In diesem Beitrag werde ich Ihnen erzählen, wie ich nur vier Tests durchlaufen habe, in den nächsten drei anderen:
Checkpoint hatte es bereits geschafft, meinerseits Respekt und Interesse zu gewinnen, und so entschied ich mich, diese Herausforderungen anzunehmen. Aufgrund der Beschäftigung konnte ich es mir jedoch leisten, nur 8 von 12 Aufgaben (aus vier verschiedenen Kategorien) zu übernehmen. Und ich habe es geschafft, 7 davon zu lösen.
Die Challenge endete offiziell Ende September 2018.

Jetzt kann ich Ihnen mit gutem Gewissen Schritt für Schritt erzählen, wie ich die folgenden Probleme gelöst habe:
• Logische Herausforderung "PNG ++"
• Web Challenge „Roboter sind zurück“
• Web Challenge "Diego Gallery"
• Programmieraufgabe „Vorsichtige Schritte“
• Die Aufgabe, "Puzzle" zu programmieren
• Netzwerk-Herausforderung „Ping Pong“
• Networking Challenge "Protokoll"
Herausforderung: PNG ++
Beschreibung:
Dieses
Bild (Link zur verschlüsselten PNG-Datei)
wurde mit einer benutzerdefinierten Verschlüsselung codiert.
Wir haben es geschafft, den größten Teil dieses Codes hier zu lesen (Link zum Python-Code).
Leider hat jemand träge Kaffee auf den gesamten key_transformator.py verschüttet.
Können Sie uns helfen, dieses Bild zu entschlüsseln?Python-Code:

Die Verschlüsselungslogik lautet wie folgt:
1. Stellen Sie die Schlüssellänge (Schlüsselgröße) auf 4 Byte ein
2. Lesen Sie die Bytes der Datei "flag.png" in der Variablen "img"
3. Fügen Sie der Datei einen Abstand hinzu, und zwar bis zum ersten nächsten Vielfachen von vier. Das Auffüllen entspricht der Anzahl der fehlenden Bytes. Wenn die Dateilänge beispielsweise 29 Byte beträgt (3 fehlen), fügen Sie drei Byte mit dem Dezimalwert 3 (ASCII 0x03) hinzu. Mit anderen Worten, Auffüllbytes dürfen nicht leer sein (ASCII 0x00), da ihr Dezimalwert Null ist, was das Auffüllen nicht impliziert.
4. Stellen Sie die Starttaste mit vier zufälligen Großbuchstaben ([AZ]) ein.
5. Machen Sie dasselbe mit allen Bytes in der Datei und verschlüsseln Sie Ketten von jeweils vier Bytes
a. Jedes Byte in der Datei wird byteweise vom Schlüssel gestrichen
b. Der Schlüssel wird ständig in einen anderen Schlüssel konvertiert, dafür ist key_transformator.transform (Schlüssel) verantwortlich
c. Enc_data werden verschlüsselte Bytes hinzugefügt
6. Geben Sie enc_data (verschlüsselte Bytes) in encrypted.png ein
Zu Beginn habe ich den PNG-Format-Header überprüft und festgestellt, dass die ersten acht Bytes wie folgt sind:
[137, 80, 78, 71, 13, 10, 26, 10]
Ich habe die ersten acht Bytes der verschlüsselten Datei genommen und sie mit diesen acht Bytes verdreht:

Der Schlüssel des ersten Blocks stellte sich wie folgt heraus:
[85, 80, 82, 81]
Und der zweite Block - so:
[86, 81, 83, 82]
Da jeder nachfolgende Schlüssel dynamisch mit dem vorherigen Schlüssel generiert wird (key = key_transformator.transform (key)), habe ich den Algorithmus verstanden: Fügen Sie jedem Byte im vorherigen Schlüssel einen hinzu:
85 -> 86
80 -> 81
82 -> 83
81 -> 82
Und dann wurde mir klar, dass der Name der Herausforderung einen kranken Hinweis verbarg.
Ich habe zwei "Hilfsfunktionen" geschrieben:
• „nextKey“, der den nächsten Schlüssel basierend auf dem letzten wiederherstellt
• „nextChar“, das den nächsten Buchstaben wiederherstellt und in den meisten Fällen einfach um eins erhöht, wenn er innerhalb der Bytegrenzen liegt (255)

Ich habe die ursprünglichen 4 Bytes [85, 80 82, 81] in Buchstaben konvertiert: "UPRQ" und den Algorithmus zurückgeführt

Das Flag wurde in der entschlüsselten Datei angegeben:
Herausforderung: Die Rückkehr der Roboter
Beschreibung:
Die Roboter sind cool, aber glauben Sie mir: Ihr Zugang sollte begrenzt sein! Schau es dir an (Link)
Nachdem Sie dem Link gefolgt sind, sehen Sie eine bestimmte Seite, die Robotern gewidmet ist. Grundsätzlich deutet alles darauf hin, dass Sie das Vorhandensein der Datei "robots.txt" überprüfen sollten.

Durch Hinzufügen von ./robots.txt zur URL erhalten wir Folgendes:

Ich habe ./secret_login.html überprüft und bin auf eine Registrierungsseite gestoßen

Als nächstes überprüfte ich den Quellcode des Formulars, um die Passwortbestätigung zu finden, und sah dieses Javascript:

Wenn der Wert bestätigt wird, wird er anscheinend an die Autorisierungsfunktion gesendet, die den übergebenen Wert mit der Funktion btoa (Base64-Decodierungsfunktion in Javascript) decodiert und dann mit der Zeichenfolge „SzMzcFQjM1IwYjB0JDB1dA ==“ vergleicht.
Ich habe diese Zeile entschlüsselt

Ich habe den resultierenden Wert in die Passwortzeichenfolge eingefügt. Bingo!
Herausforderung: Diego Gallery
Beschreibung:
Ich habe vor kurzem begonnen, eine Plattform zu entwickeln, um die Fotos meiner Katze zu verwalten und meine flag.txt zu sichern. Bitte überprüfen Sie mein System (Link zum Anmeldeformular).
Um Fehler im Sicherheitssystem zu vermeiden, wie z. B. die Möglichkeit, SQL-Code einzufügen, habe ich ein eigenes Schema entwickelt.
Die Kurzbeschreibung finden Sie hier (Link zum Diagramm)Anmeldeformular:

Voreingestellte Schaltung:

Nachdem ich den Testbenutzernamen und das Passwort festgelegt hatte, bekam ich Zugang zur öffentlichen Galerie der Katze "Diego".
Da ich mich als regulärer Benutzer registriert habe, habe ich herausgefunden, dass Sie möglicherweise einen Weg zur Eskalation von PE-Berechtigungen (Privilege Escalation) finden müssen. Beim Durchsuchen des Schemas nach registrierten Benutzern habe ich festgestellt, dass der Unterschied zwischen dem regulären Benutzer und dem Administrator im dritten Abschnitt des Schemas liegt, der durch drei Striche getrennt ist.
Nachdem geschätzt wurde, dass, wenn sich der erste Wert (Benutzername) auf den ersten Abschnitt und der zweite (Kennwort) auf den zweiten bezieht, die Rolle vom System unmittelbar nach dem Eintritt des Benutzers mit den aktuellen Rechten zugewiesen wird.
Zum Beispiel:
START ||| Erster Wert ||| Zweiter Wert ||| Benutzer (vom Webdienst hinzugefügt) ||| ENDE
Meine Nutzlast war wie folgt:
• Erster Wert: “niki ||| niki ||| admin ||| END \ nSTART ||| other“
• Zweiter Wert: "Sonstige"
Dies hat wahrscheinlich die folgenden Protokollzeilen generiert:
START ||| niki ||| niki ||| admin ||| END
START ||| other ||| other ||| user ||| END
Danach konnte ich mich als Administrator anmelden und die vollen Rechte erhalten:

Durch Drücken der Tasten wird nur eine Warnung ausgelöst, dass die Flagge sicher ist.
Innerhalb der URL können Sie jedoch lesen:
35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php ? view = log.txt
Was sehr explizit auf
LFI (Local File Inclusion) über URL anspielt
Ich habe versucht:
35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php?view=flag.txtUnd die Flagge gehörte mir.
Herausforderung: Vorsichtige Schritte
Beschreibung:
Dies (Dateilink) ist eine Reihe von Archiven, die wir gefunden haben. Wir sind sicher, dass die geheime Flagge irgendwo in ihnen versteckt ist.
Wir sind absolut sicher, dass die gesuchten Daten im Kommentarbereich jeder Datei versteckt sind.
Könnten Sie vorsichtig zwischen den Dateien wechseln und die Flagge finden?
Viel GlückNach dem Extrahieren der Datei erhalten Sie ein Verzeichnis mit dem Namen "archives" mit zweitausend darin enthaltenen Dateien mit dem Titel "unzipme. [Number]".

Ich habe das binwalk-Programm verwendet, um die erste Datei zu überprüfen. Und hier ist, was das Programm mir gab:

Ja, also im Kommentarbereich haben wir sowohl Buchstaben als auch Zahlen. Nochmal Hinweise?
Zuerst überlegte ich, ob ich die Buchstaben mit den angegebenen Indizes aus dieser Zip-Datei verbinden und die nächste Datei bereits mit Index 245 überprüfen sollte.
Aber hier kam eine Überraschung: Die zweite Datei war nicht in Zip, sondern im RAR-Format.

Deshalb musste ich es "anrarnieren", um zu den Kommentaren zu gelangen:

Meine Logik bestand darin, die Datei über binwalk auszuführen. Wenn ich auf einen RAR stieß, packen Sie ihn aus, um zu den Kommentaren zu gelangen. Andernfalls können Sie den Kommentarbereich direkt anzeigen, um weitere Aktionen zu verstehen.
Meine erste Vermutung: Die Nummer ist der Dateiindex (jeder wurde von 0 bis 1999 nummeriert). Ich habe jedoch festgestellt, dass einige Zahlen negativ sind, was bedeutet, dass sie kein Index sein können.
Zweite Vermutung: Die Zahl ist ein Sprung, der durchaus negativ sein kann. Für jede Nummer brauchte ich einen Sprung zur nächsten Datei. Ich wusste, dass wenn mein Code ständig zur nächsten berechneten Datei springt, dies eine kleine Falle in Form eines Zyklus erzeugen kann und mein Code in einer Endlosschleife stecken bleibt. Also habe ich einen Python-Code mit einem Kontolimit geschrieben. Und nach mehreren Tests stellte ich fest, dass die Zahl 120 völlig ausreichen würde:

Und die Flagge gehörte mir:

Die anderen drei, die ich im nächsten Beitrag beschrieben habe, lesen, versuchen, ich freue mich über Ihre Kommentare