Desbordamientos de búfer en la pila
Comprenda la disposición de la pila, desborde EIP/RIP y escriba un exploit funcional para un binario C vulnerable.
Desbordamientos de búfer en la pila es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.
¿Qué es un desbordamiento de búfer?
Un desbordamiento de búfer ocurre cuando se escriben más datos en un búfer de los que este puede contener. El exceso de datos sobrescribe la memoria adyacente, lo que puede corromper estructuras de control y redirigir la ejecución del programa.
Disposición de la memoria de la pila
La pila de llamadas contiene: variables locales (búferes), el puntero de marco guardado (SFP) y la dirección de retorno (RIP/EIP), que indica dónde continúa la ejecución después de que la función retorna. Desbordar un búfer local puede sobrescribir la dirección de retorno.
Corrupción clásica de la pila
Si un programa llama a gets() o strcpy() sin comprobar la longitud, un atacante puede introducir suficientes bytes para llenar el búfer y sobrescribir la dirección de retorno con la dirección de un shellcode o de un gadget útil.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}Encontrar el desplazamiento
Determine cuántos bytes se necesitan para alcanzar la dirección de retorno mediante la generación de patrones:
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"Protecciones: canarios de pila
Un canario de pila es un valor aleatorio situado entre las variables locales y la dirección de retorno guardada. Antes de retornar, se comprueba el canario; si ha sido sobrescrito, el programa termina. Es necesario evadirlo para explotar un desbordamiento clásico.
Protecciones: ASLR
Aleatorización de la disposición del espacio de direcciones (ASLR) aleatoriza la dirección base de la pila, el heap y las bibliotecas en cada ejecución. Sin una filtración de una dirección actual, adivinar dónde saltar resulta inviable en sistemas de 64 bits.
Protecciones: NX/DEP
NX (No-Execute) / DEP (Data Execution Prevention) marca la pila como no ejecutable. El shellcode inyectado en el búfer no puede ejecutarse directamente. Esto obliga a los atacantes a utilizar la programación orientada a retornos (ROP).
Filtración de direcciones
Para evadir ASLR, los atacantes necesitan una filtración de información: vulnerabilidades de cadenas de formato, lecturas excesivas del heap (como Heartbleed) o un puntero legible en la función explotada. Una dirección filtrada revela el desplazamiento y permite calcular otras direcciones.
Escritura de un exploit básico
Un desbordamiento básico de la pila en 32 bits sin protecciones:
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()Técnica ret2libc
ret2libc evade NX retornando a funciones de libc (como system()) en lugar de utilizar shellcode. El atacante sobrescribe la dirección de retorno con la dirección de system y pasa "/bin/sh" como argumento.
Herramientas para desarrollar exploits
Herramientas esenciales:
- pwntools — biblioteca de exploits para Python
- GDB + pwndbg/peda — depurador con asistentes para exploits
- checksec — muestra las protecciones del binario
- ROPgadget / ropper — encuentra cadenas ROP
checksec --file=./vulnComprobación rápida: desbordamiento de pila
¿Qué mitigación coloca un valor aleatorio entre las variables locales y la dirección de retorno guardada, y termina el programa si se sobrescribe?
Resumen de la lección
Los desbordamientos de búfer de la pila sobrescriben la dirección de retorno al llenar un búfer más allá de sus límites. Entre las protecciones se incluyen los canarios de pila (detectan sobrescrituras), ASLR (aleatoriza las direcciones) y NX/DEP (pila no ejecutable). ret2libc evade NX. Las filtraciones de información permiten evadir ASLR. pwntools agiliza el desarrollo de exploits.
Preguntas frecuentes
¿La lección «Desbordamientos de búfer en la pila» es gratis?
Sí — el texto completo de «Desbordamientos de búfer en la pila» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Desbordamientos de búfer en la pila»?
Comprenda la disposición de la pila, desborde EIP/RIP y escriba un exploit funcional para un binario C vulnerable. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cyber Security Academy?
No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Desbordamientos de búfer en la pila»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?
Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Desbordamientos de búfer en la pila
- Programación orientada al retorno (ROP)
- Vulnerabilidades de cadenas de formato
- Explotación del heap: Use-After-Free y heap spraying