Memoria y la pila
Cómo funcionan los desbordamientos
Memoria y la pila es una lección gratuita de Ethical Hacking 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 Ethical Hacking Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ethical Hacking Academy incluye 4 lecciones en total.
Distribución de la memoria de un proceso
Cuando se ejecuta un programa, el sistema operativo le asigna una distribución de memoria con regiones diferenciadas: text (código), data/BSS (variables globales), el heap (asignación dinámica) y la stack.
Los desbordamientos de búfer suelen aprovechar la stack, por lo que es esencial comprenderla.
¿Qué es la stack?
La stack es una región de memoria utilizada para las llamadas a funciones. Almacena variables locales, argumentos de funciones y direcciones de retorno.
En x86, crece hacia abajo: insertar datos desplaza el puntero de la stack hacia direcciones inferiores. Esta dirección es importante cuando se produce un desbordamiento.
Marcos de la stack
Cada llamada a una función crea un marco de la stack. Normalmente, un marco contiene variables locales, el puntero base guardado (EBP) y la dirección de retorno (EIP guardado).
La dirección de retorno indica a la CPU dónde continuar cuando finaliza la función. Controlarla es el núcleo de la explotación de desbordamientos de la stack.
Registros clave
En x86 de 32 bits, los registros importantes son:
- ESP: puntero de la stack, parte superior de la stack.
- EBP: puntero base, ancla del marco actual.
- EIP: puntero de instrucciones, dirección de la siguiente instrucción.
Si controla EIP, controla el flujo de ejecución.
¿Qué es un búfer?
Un búfer es un bloque de memoria de tamaño fijo, como un array local de caracteres. El programa espera que los datos quepan en él.
Si el programa copia más datos de los que el búfer puede contener sin comprobar la longitud, el exceso se desborda hacia la memoria adyacente.
char buffer[64];
strcpy(buffer, user_input); // no bounds checkEl desbordamiento
Un desbordamiento de búfer ocurre cuando la entrada supera el tamaño del búfer y sobrescribe datos adyacentes en la pila.
Como el EBP guardado y la dirección de retorno se encuentran justo después de los búferes locales, una entrada suficientemente grande puede sobrescribir la dirección de retorno y secuestrar el flujo de control.
Funciones peligrosas
Los desbordamientos suelen deberse a funciones inseguras de C que no comprueban la longitud:
strcpy,strcat,sprintf,gets.
Las alternativas más seguras, como strncpy o snprintf, aceptan un límite de tamaño, pero el código heredado está lleno de las funciones peligrosas.
gets(buffer); // never use: no length limit at allQué permite sobrescribir EIP
Cuando la función vulnerable retorna, la CPU extrae la dirección de retorno (ahora controlada por el atacante), la carga en EIP y salta a ella.
Si se apunta EIP al código máquina inyectado (shellcode), la CPU lo ejecuta con los privilegios del programa.
Direccionamiento little-endian
x86 utiliza el formato little-endian: los valores de varios bytes se almacenan empezando por el byte menos significativo. Para sobrescribir la dirección de retorno con 0x080414C3, se escriben los bytes en orden inverso.
Equivocarse con el orden de los bytes es un error habitual de los principiantes que hace que los exploits fallen silenciosamente.
address 0x080414C3 -> bytes \xc3\x14\x04\x08Protecciones modernas
Los sistemas modernos incorporan defensas que complican la explotación:
- DEP/NX: marca la pila como no ejecutable.
- ASLR: aleatoriza las direcciones de memoria.
- Canarios de pila: detectan las sobrescrituras antes del retorno.
Este curso se centra en el caso clásico (con las protecciones desactivadas) para enseñar los fundamentos.
Por qué sigue siendo importante
Aunque las defensas modernas dificultan los desbordamientos clásicos de pila, los fundamentos siguen siendo esenciales. Los sistemas embebidos, el IoT y el software heredado a menudo carecen por completo de estas protecciones.
Dominar el caso básico también es un requisito previo para técnicas avanzadas como ROP, que evaden las mitigaciones modernas.
Comprobación rápida
Recuerde qué valor desea controlar en última instancia el atacante.
Recapitulación
Ahora comprende los fundamentos:
- La pila almacena las variables locales, el EBP guardado y la dirección de retorno, y crece hacia abajo.
- ESP, EBP, EIP son los registros clave de x86; controlar EIP permite controlar la ejecución.
- Las funciones inseguras, como
strcpyygets, provocan desbordamientos. - x86 utiliza el formato little-endian; las defensas modernas son DEP, ASLR y los canarios.
A continuación, someterá un programa a fuzzing para encontrar el desplazamiento hasta el fallo.
Preguntas frecuentes
¿La lección «Memoria y la pila» es gratis?
Sí — el texto completo de «Memoria y 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 Ethical Hacking Academy, actualiza a CoddyKit PRO. El curso de Ethical Hacking Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Memoria y la pila»?
Cómo funcionan los desbordamientos Practicas Ethical Hacking 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 Ethical Hacking Academy?
No se requiere experiencia previa. Ethical Hacking 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 «Memoria y 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 Ethical Hacking Academy?
Sí. Cada lección de Ethical Hacking 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
- Memoria y la pila
- Fuzzing para encontrar fallos
- Control del EIP
- Shellcode y explotación