Nibbles

Publicado: 12 de Mayo de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Easy

📝 Descripción

Nibbles es una máquina Linux de dificultad fácil en HackTheBox que involucra la explotación de una instalación vulnerable de Nibbleblog 4.0.3. La máquina requiere enumerar un CMS de blog, descubrir credenciales, explotar una vulnerabilidad de carga de archivos arbitrarios (CVE-2015-6967) para conseguir acceso inicial, y finalmente escalar privilegios aprovechando permisos sudo mal configurados en un script bash.

🚀 Metodología

🔭 Reconocimiento

Ping para verificación en base a TTL

💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.

Escaneo de puertos

Enumeración de servicios


🌐 Enumeración Web

80 HTTP

Enumerando el servicio web del puerto 80 de forma manual, no vemos gran cosa aparte de un mensaje de bienvenida, aunque revisando el código fuente de la página encontramos un comentario en el que se menciona un directorio llamado /nibbleblog

Al acceder a este recurso no vemos gran cosa, aunque buscando algo de información sobre Nibbleblog encontramos que es proyecto de código abierto basado en un CMS para crear blogs de forma sencilla.

Revisando el código fuente en github hay varios ficheros que nos pueden aportar información sobre la versión:

https://github.com/dignajar/nibbleblog

Gracias al fichero README enumeramos la versión(4.0.3)

http://10.10.10.75/nibbleblog/README

🕷️Fuzzing de directorios

Al realizar fuzzing de directorios usando la herramienta gobuster hallamos algunos ficheros interesantes además de algunos que ya habíamos logrado enumerar de forma manual:

En el directorio content encontramos un xml con un nombre de usuario admin http://10.10.10.75/nibbleblog/content/private/users.xml

A continuación accedemos a otro de los recursos encontrado gracias al fuzzing de directorios, el panel de administración:

http://10.10.10.75/nibbleblog/admin.php?controller=user&action=login

Antes de iniciar un ataque de fuerza bruta, probamos el usuario adminobtenido en el paso anterior con contraseñas como nibblesblog, nibbleblog, nibbles y obtenemos éxito con esta última:

💻 Explotación

Anteriormente enumeramos la versión de este CMS. Una simple búsqueda nos permite saber que vulnerable a Arbitrary FIle Upload

🔓 CVE-2015-6967

La vulnerabilidad de carga de archivos sin restricciones en el complemento My Image en Nibbleblog anterior a 4.0.5 permite a los administradores remotos ejecutar código arbitrario cargando un archivo con una extensión ejecutable y luego accediendo a él mediante una solicitud directa al archivo en content/private/plugins/my_image/image.php.

Existen varios exploits públicos que permiten explotar esta vulnerabilidad:

https://github.com/dix0nym/CVE-2015-6967

En mi caso, solo voy a usar el exploit como referencia para entender lo que está haciendo. Hay una función para login y posteriormente hay otro par de funciones, una que se encarga de crear o subir un plugin llamado "my_image" adjuntando una shell "nibbles.php" como payload y posteriormente se realiza una llamada a content/private/plugins/my_image/image.php para desencadenar la reverse shell:

En en este caso el plugin my_image ya existe, así que aprovechando que el módulo de carga de archivos es vulnerable a Arbitrary File Upload y no sanitiza ni valida el tipo de fichero que se carga, voy a subir una php reverse shell de pentestmonkey:

Después de cambiar la IP y el puerto por el de mi host local, subo la shell

A continuación inicio un listener en el puerto 1234:

Por último realizo la petición a la shell y obtengo la conexión reversa:

http://10.10.10.75/nibbleblog/content/private/plugins/my_image/image.php

Mejora de la shell

En nuestro host de ataque

En el host comprometido

Foothold

Accedemos al directorio personal del usuario nibbler y capturamos la primera flag:

👑 Escalada de privilegios

Verificamos que el usuario nibbler puede ejecutar el siguiente script como root:

En el directorio del usuario nibbler vemos que hay un archivo comprimido sobre el que el únicamente usuario nibbler tiene permisos de lectura:

Tras descomprimirlo vemos que hay un script en bash llamado monitor.sh cuyo contenido es el siguiente:

Dado que tenemos CONTROL TOTAL SOBRE el fichero:

Podemos editar el contenido y dejar simplemente una llamada a la bash:

De tal forma que cuando ejecutemos el script escalaremos privilegios a root y podremos capturar la flag:

Last updated