Utilizar Fuzzing para Encontrar Desbordamientos de Buffer

  • Posted on: 25 March 2015
  • By: ReYDeS

El Fuzzing implica enviar datos deformados hacia las entradas de una aplicación, para luego vigilar por comportamientos anómalos como una caída o mal funcionamiento. Esto indicaría el incorrecto filtrado de las entradas hacia la aplicación, lo cual podría conducir a descubrir vulnerabilidades explotables.

Para la siguiente demostración se utilizará la aplicación vulnerable de nombre "vulnserver" en un sistema Windows 7.

Ejecutar vulnserver desde una consola en un Sistema Windows. En caso se requiera definir otro puerto diferente al 9999 por defecto, escribirlo a continuación del comando.

C:\> vulnserver.exe

Desde Kali linux se establece una conexión hacia la dirección IP y Puerto TCP donde vulnserver está en funcionamiento, utilizando la herramienta netcat.

# nc -nvv 192.168.0.X 9999

Sugiero revisar la sección “Fuentes” al final del presente escrito para obtener más información sobre vulnserver.

El objetivo es tratar de identificar desbordamientos de buffer en algunos de los comandos incluidos en vulnserver, y para esto se utiliza un script hecho en Python.

El script en Python crea buffers de diferentes tamaños y para cada comando de vulnserver se utiliza una letra diferente para la creación de los diferentes buffers. De esta manera es factible identificar cual de los comandos ha originado un desbordamiento de buffer en la aplicación vulnerable.

Se procede a ejecutar el script en python.

En el Sistema Windows se muestra una ventana con el mensaje “vulnserver.exe dejó de funcionar”.

Para identificar cual de los comandos generó este comportamiento anómalo en vulnserver se utiliza Immunity Debugger.

Con vulnserver en funcionamiento, nuevamente se ejecuta el script en python.

En la ventana superior derecha se puede visualizar el contenido de los Registros ESP y EIP definidos a 4A4A4A4A. Es decir estos registros han sido sobrescritos con el buffer enviado por el script.

El valor 4A en hexadecimal corresponde a la letra “J”, lo cual nos indica la existencia de un desbordamiento de buffer utilizando el comando “GTER” de vulnserver. Ello no implica sea el único comando vulnerable, sino ser el primero el cual generó un desbordamiento de buffer.

Lo siguiente sería identificar el tamaño exacto del buffer a sobrescribir, y de esta manera definir una dirección válida en la cual se encuentre un payload o carga útil para aprovechar o explotar esta vulnerabilidad.

Fuentes:

http://www.reydes.com/d/?q=Vulnserver
http://www.reydes.com/d/?q=Immunity_Debugger
http://www.thegreycorner.com/2010/12/introducing-vulnserver.html
http://www.immunityinc.com/products/debugger/

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