Definir el valor del Registro EIP utilizando pattern_create y pattern_offset

  • Posted on: 27 March 2015
  • By: ReYDeS

El presente escrito se basa en la publicación de nombre “Utilizar Fuzzing para Encontrar Desbordamientos de Buffer”, cuyo enlace se encuentra en la parte final.

Se encontró un desbordamiento de buffer en vulnserver utilizando el comando vulnerable de nombre “GTER”, lo cual permite sobrescribir los registros EBP e EIP. El Registro EIP es de especial interés pues este registro controla la ejecución del flujo de la aplicación. Es decir, si fuese factible explotarlo adecuadamente se podría direccionar la ejecución del programa hacia otro lugar seleccionado, como un espacio en memoria donde exista un código útil o payload.

Se utiliza un script en python para enviar un buffer de 1000 bytes utilizando el comando GTER hacia vulnserver.

Se ejecuta el script.

En el Sistema Windows se ha ejecutado vulnserver utilizando Immunity Debugger. Es factible visualizar nuevamente la sobrescritura de los registros EBP e EIP.

Obtener el control del registro EIP es vital para desarrollar un exploit, por lo tanto se requiere conocer cuales son las letras A sobrescribiendo el registro EIP en el buffer. Para identificar estos 4 bytes se utiliza la herramienta “pattern_create”, la cual está incluida dentro de Metasploit Framework.

Se ejecuta la herramienta pattern_create para crear un buffer de 1000 bytes.

En el script python se incluye este nuevo buffer.

Se procede a ejecutar nuevamente el script contra vulnserver.

El Registro EIP ha sido sobrescrito con el valor "66413066". Ahora se utiliza la herramienta “pattern_offset” para descubrir el desplazamiento hacia los 4 bytes de la cadena única creada anteriormente.

El desplazamiento es de 151 bytes. Con esta información se modifica nuevamente el buffer para definir valores exactos en el registro EIP. El buffer esta constituido ahora de 151 letras “A” seguido por 4 letras “B” y 90 letras “C”.

Se ejecuta nuevamente el script en python contra vulnserver.

El registro IP se ha sobrescrito con el valor “42424242” lo cual corresponde a 4 letras “B”. Siendo esto un acierto en el cálculo realizado, ahora es factible controlar el flujo de ejecución de vulnserver. El valor del registro ESP es de "0181F9E0", en el cual se pueden encontrar valores “43” lo cual corresponde a las letras “C” del buffer.

La siguiente tarea es preparar el espacio para un shellcode o el código a ser ejecutado por vulnserver, y evaluar la manera de redireccionar la ejecución del código.

Fuentes:

http://www.reydes.com/d/?q=Utilizar_Fuzzing_para_Encontrar_Desbordamient...

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Suscribete