
In diesem Artikel erinnern wir uns an Kollisionen in Hash-Funktionen und lösen die zweite Aufgabe von der Site
pwnable.kr .
OrganisationsinformationenSpeziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit entwickeln möchten, werde ich über die folgenden Kategorien schreiben und sprechen:
- PWN;
- Kryptographie (Krypto);
- 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
Kanal und eine
Gruppe eingerichtet, um alle Probleme im Bereich ICD
zu diskutieren . Außerdem werde ich Ihre persönlichen Anfragen, Fragen, Vorschläge und Empfehlungen
persönlich prüfen
und alle beantworten .
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 durch das Studium dieses Dokuments erworben wurden.
Hash-Funktionskollisionen
Eine Hash-Funktionskollision ist ein solches Paar von Blöcken
x und
y , das Ergebnis der
Hash () -Hash- Funktion, aus der der gleiche Block
z resultiert.
Hash (x) = Hash (y) = zKollisionen sind für absolut jede Hash-Funktion möglich, da der Satz von Eingaben viel größer ist als der Satz von Hash-Funktionsausgängen.

Daher wird die Stabilität der Hash-Funktion durch drei Eigenschaften bestimmt:
- Irreversibilität - die Unfähigkeit, eine Nachricht durch Hash wiederherzustellen;
- Widerstand gegen Kollisionen der ersten Art - für eine einzelne Nachricht ist es unmöglich, eine zweite Nachricht zu finden, die den gleichen Hash wie die erste gibt;
- Widerstand gegen Kollisionen der zweiten Art - Sie können kein Nachrichtenpaar abrufen, dessen Hash identisch ist.
Kollisionsjoblösung
Wir klicken auf das zweite Symbol mit der Signaturkollision und es wird uns mitgeteilt, dass wir uns über SSH mit dem Passwort Gast verbinden müssen.

Wenn verbunden, sehen wir das entsprechende Banner.

Lassen Sie uns herausfinden, welche Dateien sich auf dem Server befinden und welche Rechte wir haben.
ls -l

Auf diese Weise können wir den Quellcode des Programms lesen, da für jeden ein Leserecht besteht, und das col-Programm mit den Rechten des Eigentümers ausführen (das Sticky-Bit ist gesetzt). Schauen wir uns das Ergebnis des Codes an.

Aus dem Code folgt, dass das Programm eine Zeichenfolge mit 20 Zeichen als Parameter verwendet, diese an eine Funktion übergibt, die den Hash berechnet und mit dem Referenzwert vergleicht.


Innerhalb der Funktion ist unsere Zeichenfolge in 5 Blöcke zu je 4 Bytes unterteilt, die in Zahlen umgewandelt werden. Danach werden diese Zahlen addiert. Wir brauchen also 5 Zahlen, die insgesamt 0x21dd09ec ergeben. Erfüllen Sie die Bedingung: 0xd1d905e8 und 0x01010101.

Jetzt müssen Sie nicht druckbare Zeichen als Parameter für das Programm an die Befehlszeile übergeben. Dazu verwenden wir die Bash-Syntax und den Python-Interpreter. Es ist wichtig zu beachten, dass diese Nummern im Speicher des Computers in umgekehrter Reihenfolge gespeichert werden, sodass wir sie umdrehen.
./col $(python - “print('\x01\x01\x01\x01'*4 + '\xe8\x05\xd9\x1d')”)

Als Ergebnis erhalten wir drei Punkte.

Jetzt haben wir ein sehr einfaches Beispiel für eine Kollision untersucht. Im nächsten Artikel werden wir die dritte Aufgabe lösen und eine Sicherheitsanfälligkeit wie einen Pufferüberlauf auf dem Stapel analysieren. Wir sehen uns in den folgenden Artikeln.
Wir befinden uns in einem Telegrammkanal: einem
Kanal im Telegramm .