viernes, 10 de junio de 2016

Reto VulnHub: Bobby

Qué pasa hackers! Hoy vengo con ganas de traeros un reto de VulnHub. Para quien no lo conozca, VulnHub es una página donde pueden encontrarse diferentes recursos para practicar y aprender acerca de seguridad, administración y redes, muchas veces en forma de reto.

Estos retos te dan un objetivo, que en materias de seguridad suele ser ganar acceso de root (o administrador) de sistema dentro de una máquina virtual, aunque puede ser otro objetivo, como el robo de información conseguir un flag o bandera, por poner ejemplos. En el caso que nos ocupa, es un reto de seguridad cuyo objetivo es conseguir dicho flag.

Un flag o bandera es normalmente un fichero, dentro de la propia máquina (más o menos escondido), que podemos conseguir cumpliendo los objetivos y consiguiendo acceso a cierta parte del sistema de archivos de la misma. Este flag es la prueba de que hemos conseguido dichos objetivos; por decirlo de alguna forma, hemos superado la prueba. 

La máquina que trataremos es Bobby. Bobby es un pobre sujeto que ha decidido comenzar un blog personal alojado en su misma máquina, publicando algunos datos personales sin prestar demasiada atención a la seguridad de la misma antes de ponerla al alcance de cualquiera en Internet.

La fuente de dicha máquina puede encontrarse aquí. Para instalar la máquina necesitaremos un software de virtualización (yo utilizo VMware Workstation, otra opción es Virtual Box). En la página encontraremos un fichero ejecutable, que al ejecutarse abrirá una utilidad para generar una imagen de Windows XP Professional SP3 vulnerable, tomando como entrada una imagen normal de dicho sistema operativo.

Este método suele utilizarse en páginas como VulnHub; modifica un sistema operativo para asegurarse que al instalarse sea vulnerable de una u otra manera (abriendo puertos, instalando servicios de red, creando usuarios, etc.) sin tener que modificar nada en la máquina posteriormente.

Una vez instalada la máquina, tenemos un equipo XP vulnerable. En mi caso, suelo configurar todas las máquinas de prueba en modo de red NAT para que no sean accesibles desde el exterior, pero sí entre ellas.

Máquina XP de Bobby funcionando en Vmware Workstation
Podemos empezar realizando una exploración de los puertos y servicios de la máquina mediante Zenmap (o nmap). Puede hacerse en la máquina anfitrión o a través de cualquier otra máquina que tengamos virtualizada en la misma red NAT. En este caso utilizaré para las pruebas una máquina Kali Linux.

Primero tenemos que conocer la dirección IP de la máquina objetivo. Aunque normalmente podemos conocerla mediante un barrido IP con nmap o Zenmap, en la página donde conseguimos la máquina podemos ver que está configurada con la IP 192.168.1.11. Por ahorrarnos problemas de direccionamiento, estableceremos nuestra red NAT dentro de la misma subred (192.168.10/24).

Conociendo ya a priori la dirección IP del objetivo, ejecutamos un escaneo IP intenso con Zenmap. Puede hacerse de forma similar en nmap, pero así tenemos resultados más visuales.

Reporte de Zenmap
Vemos ya que hay dos servicios abiertos: un servicio web tipo IIS (servidor web de Microsoft) y un servicio FTP. Ya tenemos por dónde empezar a explorar. Si accedemos al servicio mediante el explorador web, nos encontraremos un blog personal que Bobby acaba de empezar, con algunos datos acerca de su persona: su película favorita, su grupo favorito y su sistema operativo preferido.

El blog de Bobby
Siempre que nos encontremos una página web, se debería echar un vistazo al código fuente de la misma en búsqueda de pistas acerca de su naturaleza, comentarios del autor, etc. La experiencia puede decirnos que, al ser una página muy simple, probablemente programada puramente a mano, haya anotaciones y comentarios en el HTML. Efectivamente, podemos ver uno interesante.

Comentario en el código fuente
Al parecer, Bobby prefiere que le llamen Bobby, y no Bob o Robert. Este tipo de datos siempre vienen bien a la hora de recolectar información; al usuario de este sistema se le llama de tres maneras, que bien pueden ser su nombre de usuario o parte de él. Lo anotaremos para luego.

Podemos seguir explorando un poco el servicio web. Para ello podemos contar con herramientas como Nikto o WhatWeb, que realizan una serie de comprobaciones automáticas sobre el servidor web y nos arrojan datos muy valiosos acerca del mismo. Ambas herramientas se encuentran dentro de Kali Linux, pero son descargables para otras distribuciones.

Salida de Nikto sobre el servicio web
Salida de WhatWeb sobre el servicio web
Algunos datos interesantes que tenemos sobre el servicio es que es un Microsoft IIS versión 5.1 (desactualizado), y que tiene habilitados los métodos PUT y TRACE, que son considerados muy inseguros. Es sobre todo interesante este primer método, ya que nos permite subir archivos al servidor web. Además, no se ha borrado la página /localstart.asp, incluida de forma predeterminada en servidores IIS antiguos como este.

Tras una breve exploración al servicio web, comprobamos que podemos conectarnos al servicio FTP mediante una simple sesión de consola. Pero, ¿cual es el usuario y la contraseña? En este punto es interesante probar un ataque de fuerza bruta mediante diccionario sobre el servicio FTP.

Para ello, necesitamos dos diccionarios: uno para los nombres de usuario, dado que no conocemos ninguno, y otro para las contraseñas. Para el primero, podemos intentar con uno bastante simple hecho a mano, contando con los posibles nombres de Bobby: Bobby, Bob y Robert.

Lista/diccionario corto de usuarios
Los introduciremos con la primera letra tanto en mayúscula como en minúscula, solo por si acaso. Si estos usuarios no resultan, habría que probar otras opciones más avanzadas; de momento, mantengámoslo simple.

Para el diccionario de contraseñas, utilizaremos la herramienta cewl, incluida dentro de Kali Linux. Dicha herramienta lee una página web y crea un diccionario simple a partir de las palabras que encuentra en ella. Aunque no distingue mayúsculas y minúsculas, siendo el resultado un diccionario muy simple y algo inexacto, suele ser un buen punto sobre el que empezar.

Diccionario de contraseñas generado por cewl
Para el ataque por fuerza bruta mi primera opción suele ser siempre THC Hydra, incluida también en Kali Linux con una interfaz gráfica (Hydra GTK). La configuración del ataque es bastante sencilla, simplemente introduciendo la IP objetivo, el protocolo para el ataque (FTP) y los diccionarios de usuarios y contraseñas.

El resultado aparece enseguida; hemos tenido suerte. El usuario es bob, la contraseña es Matrix. ¡Hay que proteger más los servicios, hombre!

Resultado del bruteforce
Mediante una sesión de consola, podemos acceder al servicio FTP utilizando estos credenciales. ¡Bingo! Además, nos ha tocado la lotería: tenemos acceso al directorio wwwroot que contiene las páginas web accesibles mediante el servicio IIS.

Tachán, acceso al FTP via consola
Como pequeña prueba para comprobar nuestros permisos, nos introduciremos en el directorio wwwroot e intentaremos crear un directorio llamado owned para la ocasión. Efectivamente, podemos hacerlo, así que tenemos permisos de escritura sobre el directorio raíz del servicio web. Algo preocupantemente peligroso para la víctima porque, como veremos ahora, podemos vulnerar el servicio subiendo un backdoor.

Comprobamos que tenemos permisos de escritura
Al parecer, también se ha dejado una pequeña pista en el archivo hint.html que encontramos en el directorio raíz del servicio web. Tras descargarlo, podemos ver que íbamos bien encaminados:

Pequeña pista para la explotación
Ahora podemos entrar en la fase más jugosa: la explotación. Dado que podemos subir ficheros al directorio web, una buena opción es subir en el equipo víctima un backdoor o puerta trasera que al ser accedido se conecte a nuestra máquina, proporcionando acceso completo a la víctima.

El backdoor deberá ser activado mediante el servicio web; para ello, tendrá que tener un formato de página web. Sabemos que el servidor es un Microsoft IIS con tecnología ASP, así que tendrá que ser un código ejecutable en dicho entorno.

Metasploit Framework, que podemos encontrar también en Kali Linux, nos proporciona herramientas para crear backdoors de estas características. Utilizaremos la herramienta msfvenom que nos proporciona Metasploit para esta tarea.

En este caso, msfvenom creará una página tipo ASP que, al ser accedida, realizará una conexión a nuestro equipo (lo que se conoce como conexión inversa, dado que es la víctima la que se conecta a nosotros) y ejecutará el payload Meterpreter, proporcionándonos una interfaz de acceso completa e interactiva con la víctima en forma de comandos.

El primer paso será crear el propio backdoor. Puede hacerse de manera muy sencilla con msfvenom en una consola de Kali Linux. Hay que prestar especial atención a las opciones que le indicamos, que deberán proporcionar información sobre el equipo víctima a la herramienta, como la arquitectura (x86), familia del sistema operativo (Windows) y sobre nuestro equipo, indicando la IP y el puerto a la escucha al que se conectará el backdoor.


Creación del backdoor
Acto seguido dejaremos a la escucha en nuestro equipo un handler de Metasploit que recibirá la conexión desde el equipo víctima. Para no tener que desplegar todo el framework, lo haremos mediante la utilidad msfcli, que simplemente ejecuta el handler de forma directa. Tendremos que especificar, nuestra IP y puerto que queremos a la escucha, así como el payload que se ejecutará.

Handler para la conexión

Por último, subiremos al equipo víctima el archivo ASP que ejecutará el backdoor, haciendo uso de nuestra conexión FTP. La transferencia se realiza con éxito.

Subida del backdoor a la víctima
 Solo queda ir a un explorador web, ejecutar el backdoor, y cruzar los dedos...

Sesión de Meterpreter abierta
¡El ataque ha tenido éxito! En el handler que dejamos a la escucha tenemos un intérprete Meterpreter funcionando con permisos de sistema. Hemos conseguido acceso total a la máquina. Dado que el objetivo era conseguir un flag como prueba de nuestro éxito, abriremos un intérprete de comandos de Windows con nuestra conexión Meterpreter para buscarla. La encontraremos en el escritorio del usuario Administrator.

Flag o secreto de la máquina
 Con esto, el reto queda terminado y superado. Espero que os haya gustado el desafío. Para cualquier duda o reclamación, dejad un comentario e intentaré responder lo mejor que pueda. Gracias por leer.

Un saludo!
hartek

2 comentarios:

Google Analytics