Fuzzing para encontrar fallos
Encontrar el desplazamiento
Fuzzing para encontrar fallos es una lección gratuita de Ethical Hacking Academy en CoddyKit. Esta es la lección 2 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.
¿Qué es el fuzzing?
El fuzzing consiste en enviar a un programa entradas malformadas o demasiado grandes para provocar un comportamiento inesperado, especialmente fallos. Un fallo suele indicar un error de corrupción de memoria.
En los desbordamientos de búfer, el primer objetivo es provocar el fallo del objetivo para confirmar que existe un desbordamiento.
El flujo de trabajo
El flujo de trabajo clásico de explotación es el siguiente:
- Hacer fuzzing para provocar el fallo del programa.
- Encontrar el desplazamiento exacto hasta la dirección de retorno.
- Controlar EIP.
- Redirigir la ejecución al shellcode.
Esta lección cubre los dos primeros pasos.
Conectar un depurador
Para observar los fallos, conecte un depurador (como Immunity Debugger o x64dbg en Windows, o GDB en Linux) al objetivo.
Cuando el programa falla, el depurador muestra el estado de los registros, especialmente EIP, lo que revela si se sobrescribió la dirección de retorno.
Enviar entradas cada vez mayores
Un fuzzer sencillo envía cadenas cada vez más largas hasta que el programa falla. Un punto de partida habitual es enviar muchos caracteres «A» (0x41).
Si EIP muestra 41414141 después del fallo, habrá confirmado que controla la dirección de retorno.
python -c 'print("A"*2000)' | ./vulnConfirmar el fallo
Cuando la aplicación falla y EIP es igual a 41414141, el desbordamiento ha alcanzado la dirección de retorno guardada.
Sin embargo, todavía no sabe exactamente cuántos bytes preceden a EIP. Enviar siempre el mismo byte indica que EIP se puede controlar, pero no dónde se encuentra.
Encontrar el desplazamiento: patrones cíclicos
Para encontrar el desplazamiento exacto, envíe un patrón único no repetitivo en lugar de usar solo «A». Cada ventana de 4 bytes es distinta, por lo que el valor que llega a EIP identifica el desplazamiento.
Metasploit incluye pattern_create.rb para esto.
msf-pattern_create -l 2000Leer el desplazamiento
Después de provocar el fallo con el patrón, anote el valor de EIP. Páselo a pattern_offset.rb y devolverá el número exacto de bytes anteriores a EIP.
Este desplazamiento es el tamaño del relleno que debe colocar antes de los bytes de la dirección de retorno.
msf-pattern_offset -l 2000 -q 39654138Verificar el desplazamiento
Verifique siempre el resultado. Construya una entrada con offset bytes de «A» seguidos de cuatro bytes «B» (0x42). Si EIP se convierte en 42424242, el desplazamiento es exacto.
Esta confirmación evita perder horas depurando más adelante un error de desplazamiento de unos pocos bytes.
"A"*offset + "B"*4 # EIP should become 42424242Identificar ESP
Después de controlar EIP, anote también dónde apunta ESP en el momento del fallo. ESP suele apuntar justo después de la dirección de retorno sobrescrita, dentro del búfer restante.
Ese espacio es donde colocará posteriormente el shellcode.
Recapitulación de herramientas
Entre las herramientas útiles para fuzzing y patrones se incluyen:
- Spike y boofuzz: fuzzers de protocolos de red.
- pattern_create / pattern_offset: localizan el desplazamiento de EIP.
- mona.py en Immunity: automatiza las tareas relacionadas con patrones, desplazamientos y caracteres problemáticos.
!mona pattern_create 2000La reproducibilidad es importante
Un fallo útil debe ser reproducible. Guarde la entrada exacta que lo provoca y vuelva a ejecutarla desde un estado limpio para confirmar que el desplazamiento es estable.
Los fallos incoherentes suelen indicar que el error no es un desbordamiento de pila limpio o que alguna condición (tiempo, longitud o contenido) varía entre ejecuciones.
Comprobación rápida
Recuerde por qué un patrón cíclico es mejor que una cadena de bytes idénticos.
Recapitulación
Ahora sabe cómo encontrar el desplazamiento hasta el fallo:
- Haga fuzzing con entradas cada vez mayores para provocar un fallo; confírmelo con
41414141en EIP. - Utilice un patrón cíclico con
pattern_create/pattern_offsetpara encontrar el desplazamiento exacto. - Verifique el resultado con relleno seguido de cuatro bytes «B» (42424242).
- Anote dónde apunta ESP para colocar posteriormente el shellcode.
A continuación, controlará completamente EIP y redirigirá la ejecución.
Preguntas frecuentes
¿La lección «Fuzzing para encontrar fallos» es gratis?
Sí — el texto completo de «Fuzzing para encontrar fallos» 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 «Fuzzing para encontrar fallos»?
Encontrar el desplazamiento 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 2 de 4.
¿Cuánto tiempo toma la lección «Fuzzing para encontrar fallos»?
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