Stack Shellcode
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Stack shellcode es una técnica utilizada en binary exploitation donde un atacante escribe shellcode en la pila de un programa vulnerable y luego modifica el Instruction Pointer (IP) o Extended Instruction Pointer (EIP) para apuntar a la ubicación de este shellcode, causando que se ejecute. Este es un método clásico utilizado para obtener acceso no autorizado o ejecutar comandos arbitrarios en un sistema objetivo. Aquí hay un desglose del proceso, incluyendo un ejemplo simple en C y cómo podrías escribir un exploit correspondiente usando Python con pwntools.
Comencemos con un ejemplo simple de un programa C vulnerable:
Este programa es vulnerable a un desbordamiento de búfer debido al uso de la función gets()
.
Para compilar este programa deshabilitando varias protecciones (para simular un entorno vulnerable), puedes usar el siguiente comando:
-fno-stack-protector
: Desactiva la protección de pila.
-z execstack
: Hace que la pila sea ejecutable, lo cual es necesario para ejecutar shellcode almacenado en la pila.
-no-pie
: Desactiva el ejecutable independiente de posición, facilitando la predicción de la dirección de memoria donde se ubicará nuestro shellcode.
-m32
: Compila el programa como un ejecutable de 32 bits, a menudo utilizado por simplicidad en el desarrollo de exploits.
Aquí te mostramos cómo podrías escribir un exploit en Python usando pwntools para realizar un ataque ret2shellcode:
Este script construye una carga útil que consiste en un NOP slide, el shellcode, y luego sobrescribe el EIP con la dirección que apunta al NOP slide, asegurando que el shellcode se ejecute.
El NOP slide (asm('nop')
) se utiliza para aumentar la probabilidad de que la ejecución "deslice" hacia nuestro shellcode independientemente de la dirección exacta. Ajusta el argumento p32()
a la dirección de inicio de tu buffer más un desplazamiento para aterrizar en el NOP slide.
ASLR debe estar deshabilitado para que la dirección sea confiable a través de ejecuciones o la dirección donde se almacenará la función no siempre será la misma y necesitarías alguna filtración para averiguar dónde se carga la función win.
Stack Canaries también deben estar deshabilitados o la dirección de retorno EIP comprometida nunca será seguida.
La protección de stack NX impediría la ejecución del shellcode dentro de la pila porque esa región no será ejecutable.
64bit, ASLR con filtración de dirección de pila, escribir shellcode y saltar a él
32 bit, ASLR con filtración de pila, escribir shellcode y saltar a él
32 bit, ASLR con filtración de pila, comparación para prevenir la llamada a exit(), sobrescribir variable con un valor y escribir shellcode y saltar a él
arm64, sin ASLR, gadget ROP para hacer la pila ejecutable y saltar al shellcode en la pila
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)