Ret2lib + Printf leak - arm64
Ret2lib - NX-Umgehung mit ROP (kein ASLR)
Kompilieren ohne Canary:
Offset finden
x30 Offset
Durch das Erstellen eines Musters mit pattern create 200
, dessen Verwendung und das Überprüfen des Offsets mit pattern search $x30
können wir sehen, dass der Offset 108
(0x6c) beträgt.
Wenn wir uns die disassemblierte Hauptfunktion ansehen, können wir sehen, dass wir zu der Anweisung springen möchten, die direkt zu printf
springt, dessen Offset von dem Ort, an dem die Binärdatei geladen ist, 0x860
beträgt:
Finde system und /bin/sh
-String
/bin/sh
-StringDa ASLR deaktiviert ist, werden die Adressen immer gleich sein:
Finde Gadgets
Wir müssen in x0
die Adresse zum String /bin/sh
haben und system
aufrufen.
Mit rooper wurde ein interessanter Gadget gefunden:
Dieses Gadget lädt x0
von $sp + 0x18
und lädt dann die Adressen x29 und x30 von sp und springt zu x30. Mit diesem Gadget können wir das erste Argument kontrollieren und dann zu system springen.
Exploit
Ret2lib - NX, ASL & PIE-Umgehung mit printf-Leaks vom Stack
Kompilieren ohne Canary:
PIE und ASLR, aber kein Canary
Runde 1:
Leak von PIE vom Stack
Missbrauch von bof, um zu main zurückzukehren
Runde 2:
Leak von libc vom Stack
ROP: ret2system
Printf-Leaks
Wenn man einen Breakpoint vor dem Aufruf von printf setzt, ist es möglich zu sehen, dass es Adressen gibt, um zum Binary im Stack zurückzukehren, sowie auch libc-Adressen:
Durch Ausprobieren verschiedener Offsets kann %21$p
eine Binary-Adresse (PIE-Bypass) und %25$p
eine libc-Adresse leaken:
Wenn man die geleakte libc-Adresse von der Basisadresse von libc subtrahiert, kann man sehen, dass der Offset der geleakten Adresse von der Basis 0x49c40
ist.
x30-Offset
Siehe das vorherige Beispiel, da der bof derselbe ist.
Gadgets finden
Wie im vorherigen Beispiel müssen wir in x0
die Adresse zum String /bin/sh
haben und system
aufrufen.
Mit rooper wurde ein weiteres interessantes Gadget gefunden:
Dieses Gadget lädt x0
von $sp + 0x78
und lädt dann die Adressen x29 und x30 von sp und springt zu x30. Mit diesem Gadget können wir das erste Argument kontrollieren und dann zu system springen.
Exploit
Last updated