Control del EIP
Sobrescribir la dirección de retorno
Control del EIP es una lección gratuita de Ethical Hacking Academy en CoddyKit. Esta es la lección 3 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.
El objetivo
Ya conoce el desplazamiento, por lo que puede colocar cuatro bytes cualesquiera en EIP. La pregunta ahora es: ¿qué dirección debe colocar ahí?
Quiere que EIP apunte al shellcode. Sin embargo, no puede codificar sin más la dirección de la pila; necesita un salto fiable.
Por qué no codificar la dirección de la pila
La dirección de la pila donde se encuentra el shellcode puede cambiar entre ejecuciones y sistemas. Incluso pequeños cambios en el entorno pueden desplazarla.
En su lugar, utilizará una instrucción estable que ya esté en la memoria y redirija la ejecución a donde apunte ESP en ese momento.
El truco de JMP ESP
Si ESP apunta al shellcode en el momento del fallo, puede establecer EIP en la dirección de una instrucción JMP ESP. Cuando EIP cargue esa dirección, la CPU ejecutará jmp esp y saltará al shellcode.
Esta indirección hace que el exploit sea fiable independientemente de la dirección exacta de la pila.
jmp esp ; opcode FF E4Encontrar un JMP ESP
Busque en los módulos cargados (preferiblemente aquellos sin ASLR) los bytes de código de operación FF E4. La dirección base del módulo permanece constante, por lo que este gadget es fiable.
Herramientas como mona.py encuentran automáticamente instrucciones adecuadas.
!mona jmp -r esp -cpb "\x00"Evitar caracteres problemáticos
Algunos valores de byte corrompen la entrada antes de que llegue intacta al búfer. El más clásico es el byte nulo 0x00, que termina las cadenas de C. Otros son 0x0a (salto de línea) y 0x0d (retorno de carro).
La dirección de JMP ESP no debe contener ninguno de estos caracteres problemáticos.
Identificar caracteres problemáticos
Para descubrir qué bytes son problemáticos, envíe todos los valores de byte de 0x00 a 0xff en el búfer e inspeccione la memoria en el depurador. Los bytes que aparezcan modificados o falten son caracteres problemáticos.
Los excluirá tanto de la dirección de retorno como del shellcode.
!mona bytearray -cpb "\x00"Construir la sobrescritura de EIP
Ahora construya la entrada: primero el relleno hasta el desplazamiento y después la dirección de JMP ESP en orden little-endian.
Si JMP ESP se encuentra en 0x625011AF, los bytes escritos se invierten.
buf = "A"*offset + "\xaf\x11\x50\x62" # 0x625011AF, little-endianVerificar el salto
Establezca un punto de interrupción en la dirección de JMP ESP en el depurador y ejecute el exploit. Cuando EIP llegue a ella y avance hasta ESP, habrá confirmado que la redirección es fiable.
En este punto, EIP apunta al lugar donde irá el shellcode.
Hacer espacio para el shellcode
Después de la dirección de retorno, el búfer restante (al que apunta ESP) contiene el shellcode. Si el espacio es limitado, quizá necesite un salto corto o reubicarlo.
Un tobogán de NOP (una secuencia de bytes no operativos 0x90) antes del shellcode proporciona margen, de modo que el salto pueda aterrizar en cualquier punto de la secuencia.
buf = "A"*offset + ret + "\x90"*16 + shellcodeIntegrarlo todo
La estructura completa del exploit ya está clara:
- Relleno hasta el desplazamiento.
- La dirección de JMP ESP (sin caracteres problemáticos y en formato little-endian).
- Un tobogán de NOP.
- El shellcode.
Está a un paso de obtener un shell.
Alternativas a JMP ESP
JMP ESP es la redirección clásica, pero no es la única. Si otro registro apunta al búfer, puede utilizar jmp eax, call esp o un gadget push esp; ret.
El principio es el mismo: encontrar una instrucción estable que transfiera el control al lugar donde se encuentra el shellcode.
Comprobación rápida
Recuerde por qué se prefiere JMP ESP a una dirección de pila codificada.
Recapitulación
Ahora controla el flujo de ejecución:
- Sobrescriba EIP con la dirección de un gadget JMP ESP en lugar de utilizar una dirección de pila poco fiable.
- Encuentre el gadget en un módulo sin ASLR y evite caracteres problemáticos como
0x00. - Escriba la dirección en formato little-endian y añada un tobogán de NOP antes del shellcode.
A continuación, generará el shellcode y abrirá un shell.
Preguntas frecuentes
¿La lección «Control del EIP» es gratis?
Sí — el texto completo de «Control del EIP» 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 «Control del EIP»?
Sobrescribir la dirección de retorno 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 3 de 4.
¿Cuánto tiempo toma la lección «Control del EIP»?
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.