Format Strings - Arbitrary Read Example
Lernen Sie & üben Sie AWS-Hacking: HackTricks Training AWS Red Team Expert (ARTE)
Lernen Sie & üben Sie GCP-Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Binärstart lesen
Code
Kompilieren Sie es mit:
Ausnutzen
Der Offset beträgt 11, weil das Setzen mehrerer As und das Brute-Forcing mit einer Schleife ergab, dass bei Offset 11 und mit 5 zusätzlichen Zeichen (senkrechte Striche
|
in unserem Fall) die Steuerung einer vollständigen Adresse möglich ist.Ich habe
%11$p
mit Padding verwendet, bis ich sah, dass die Adresse komplett 0x4141414141414141 war.Die Format-String-Payload befindet sich VOR der Adresse, weil das printf beim Lesen an einem Null-Byte stoppt, daher wird, wenn wir zuerst die Adresse und dann die Format-String senden, der printf niemals die Format-String erreichen, da zuvor ein Null-Byte gefunden wird.
Die ausgewählte Adresse ist 0x00400000, weil dort das Binärprogramm startet (kein PIE)
Passwörter lesen
Kompilieren Sie es mit:
Vom Stapel lesen
Das stack_password
wird im Stapel gespeichert, da es sich um eine lokale Variable handelt. Es reicht also aus, printf zu missbrauchen, um den Inhalt des Stapels anzuzeigen. Dies ist ein Exploit, um die ersten 100 Positionen zu durchsuchen und die Passwörter aus dem Stapel auszulesen:
Im Bild ist zu sehen, dass wir das Passwort aus dem Stapel an der 10.
Position preisgeben können:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F365789996-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FoC7kdpmNTJZIcPU2vQzG%252Fuploads%252Fgit-blob-545fcdfaf85cd96714bae462c037fc088c6f8bb4%252Fimage%2520%281234%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6d545dab&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F365789996-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FoC7kdpmNTJZIcPU2vQzG%252Fuploads%252Fgit-blob-49c6c459edceb803ac56d89f84335da98d3f277f%252Fimage%2520%281233%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=56925a29&sv=1)
Daten lesen
Wenn wir denselben Exploit ausführen, aber %p
anstelle von %s
verwenden, können wir eine Heap-Adresse vom Stapel bei %25$p
preisgeben. Darüber hinaus können wir durch Vergleich der preisgegebenen Adresse (0xaaaab7030894
) mit der Position des Passworts im Speicher dieses Prozesses den Adressunterschied ermitteln:
Jetzt ist es an der Zeit herauszufinden, wie wir eine Adresse im Stapel kontrollieren können, um darauf über die zweite Format-String-Schwachstelle zuzugreifen:
Und es ist möglich zu sehen, dass im Versuch 14 mit der verwendeten Übergabe wir eine Adresse kontrollieren können:
Ausnutzen
Lernen Sie & üben Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen Sie & üben Sie GCP-Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated