filthyHacker@home:~$

Devel - Hack The Box

Info Card

En esta ocasión vamos a resolver la máquina Devel de Hack The Box. Es una máquina Windows de nivel de dificultad fácil tanto en la intrusión como en la escalada de privilegios.

Fase De Reconocimiento

Primeramente vamos a lanzar una traza ICMP para saber si la máquina está activa.

ping -c 1 10.10.10.5

2

Una vez comprobamos que la máquina está activa (pues nos devuelve una respuesta), podemos también determinar a que tipo de máquina nos estamos enfrentando en base al valor del TTL; en este caso el valor del TTL de la máquina es 127, por lo que podemos intuir que estamos ante una máquina Windows. Recordemos que algunos de los valores referenciales son los siguientes:

Sistema Operativo (OS) TTL
Linux 64
Windows 128
Solaris 254

Si nos damos cuenta, en esta ocasión, el valor del TTL es 127 y no 128 como indica la tabla anterior, esto se debe a que en el entorno de máquinas de Hack The Box, no nos comunicamos directamente con la máquina a vulnerar, sino que existe un nodo intermediario, por lo que el TTL disminuye en una unidad.

ping -c 1 10.10.10.5 -R

3

Posteriormente, vamos a utilizar la herramienta Nmap para determinar que puertos están abiertos, así como identificar la versión y servicios que corren en el activo. Para determinar que puertos están abiertos podemos realizar lo siguiente:

nmap -p- --open -T5 -v -n 10.10.10.5

En caso de que el escaneo tarde demasiado en completar, tenemos esta otra alternativa:

sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.5

A continuación se explican los parámetros utilizados en el escaneo de puertos con Nmap:

Parámetro Explicación
-p- Escanea todo el rango de puertos (65535 en total)
--open Nos indica todos aquellos puertos que están abiertos (o posiblemente abiertos)
-T5 La plantilla de temporizado nos permite agilizar nuestro escaneo, este valor puede ir desde 0 hasta 5, cabe aclarar que a mayor sea el valor de la plantilla, “generaremos más ruido”, pero no pasa nada ¿no? Al fin y al cabo estamos practicando en un entorno controlado y aquí somos todos White Hat
-v Verbose, reporta lo encontrado por consola
-n No aplicar resolución DNS
-sS Escaneo TCP SYN
-min-rate Emitir paquetes no más lentos que <valor> por segundo
-vvv Triple verbose, para obtener mayor información por consola
-Pn No aplicar host discovery

Una vez hemos detectado los puertos que se encuentran abiertos en el activo, podemos pasar a determinar la versión y servicios que corren bajo estos puertos.

nmap -sC -sV -p 21,80 10.10.10.5

A continuación se explican los parámetros utilizados en el escaneo de versiones y servicios con Nmap:

Parámetro Explicación
-sC Scripts básicos de enumeración
-sV Versión y servicios que corren bajo los puertos encontrados
-p Especificamos que puertos queremos analizar (los que encontramos abiertos en el paso anterior)

Basándonos en la información que nos reporta Nmap, podemos darnos cuenta que la máquina víctima tiene abiertos puertos relacionados con HTTP y FTP (File Transfer Protocol).

Fase De Explotación

Podemos empezar por enumerar el servicio HTTP. Para ello, podemos hacer uso de WhatWeb, una herramienta que se encarga de identificar las tecnologías web que se están utilizando. Esto incluye gestores de contenido (CMS), librerías, plugins, o incluso el sistema operativo en el que se está alojando el servidor web.

whatweb http://10.10.10.5

4

No hay nada que llame especialmente nuestra atención, salvo que la página está montada con IIS (Internet Information Services), un servidor web desarrollado por Microsoft para alojar sitios en sistemas Windows, así como que la página parece estar bajo construcción.

Dado que no podemos obtener más información útil desde la terminal, tendremos que visitar la página desde nuestro navegador. Únicamente veremos el logo de IIS versión 7, por lo que no parece haber mucho que hacer aquí de momento.

5

Lo siguiente que podemos hacer es enumerar el servicio FTP. Para esto, utilizaremos un null session, ya que no contamos con credenciales.

ftp anonymous@10.10.10.5

Al conectarnos, podemos observar lo que parece ser la estructura de archivos del sitio web alojado en IIS. Encontramos un directorio aspnet_client y archivos como iisstart.htm y welcome.png.

6

Esto lo podemos corroborar descargando alguno de estos archivos y visualizándolos en nuestro equipo. Podemos, por ejemplo, probar con la imagen welcome.png. Dado que se trata de un archivo que no es de texto, cambiaremos el modo de transferencia a binary, lo que garantiza que el archivo se transfiera sin modificaciones, manteniendo su integridad byte por byte.

binary
get welcome.png

7

8

Confirmamos que estamos frente a la misma imagen que habíamos visto desde nuestro navegador, lo que sugiere una posible vía de subida de archivos al servidor web. A modo de prueba, podemos subir un archivo a través del FTP y ver si se muestra en el sitio web. En mi caso, probé con una imagen.

put <nombreArchivo>

9

Vemos que la imagen se muestra correctamente en la página web, así que podemos probar subir una reverse shell al servidor. Algo que debemos tener en cuenta es que IIS utiliza ASP/ASP.NET para ejecutar scripts del lado del servidor. ASP.NET es la versión más moderna del framework ASP y se basa en el framework .NET, que es la plataforma de desarrollo de Microsoft para crear aplicaciones. Por lo tanto, la reverse shell que subiremos deberá estar en formato .aspx para que el servidor la interprete y ejecute correctamente.

Dicho esto, podríamos generar la reverse shell con MSFvenom o buscar una disponible públicamente en GitHub. En mi caso, utilizaré la shell del usuario borjmz. Solo deberemos cambiar nuestra IP y puerto donde se indica, y luego subir la shell.

put shell.aspx

Podemos dirigirnos a http://10.10.10.5/shell.aspx o, desde la propia consola, ejecutarla con:

curl http://10.10.10.5/shell.aspx

De todos modos, conseguiremos una shell dentro de la máquina víctima como el usuario IIS APPPOOL\web, por lo que tendremos que escalar privilegios.

10

Escalada De Privilegios

Podemos comenzar enumerando el sistema operativo utilizando systeminfo para conocer su versión y verificar si tiene parches aplicados.

systeminfo

11

Encontramos que la versión del sistema operativo es 6.1.7600 Build 7600, y no tiene ningún parche aplicado. Al buscar más información sobre esta versión, descubrimos que es vulnerable a MS11-046, una vulnerabilidad causada por el Microsoft Windows Ancillary Function Driver (AFD.sys), que al ejecutarse en modo kernel privilegiado, no valida correctamente el input proporcionado por usuarios de bajos privilegios.

Podemos buscar en línea algún exploit para aprovechar esta vulnerabilidad. Hay una versión ya compilada que es la que usaremos. Recordemos que tenemos una vía potencial para subir archivos a través del servicio FTP, y podemos aprovecharla buscando en qué ruta se encuentran los archivos que vimos anteriormente. Por ejemplo, podemos realizar una búsqueda recursiva en el sistema para verificar dónde está almacenada la imagen welcome.png que habíamos visualizado previamente.

dir /s welcome.png

12

13

Sabiendo que los archivos se encuentran en la ruta C:\inetpub\wwwroot, podemos subir el exploit mediante FTP, y una vez que el archivo esté dentro de la máquina víctima, podremos ejecutarlo directamente desde ahí.

binary
put MS11-046.exe

14

Al ejecutarlo, obtendremos privilegios elevados, convirtiéndonos en NT AUTHORITY\SYSTEM, lo que nos permitirá listar las flags de los dos usuarios en el sistema.

15