Nibbles
✍️ Autor: Hack The Box🔍 Dificultad: Fácil 📅 Fecha de creación: 13/01/2018
Last updated
✍️ Autor: Hack The Box🔍 Dificultad: Fácil 📅 Fecha de creación: 13/01/2018
Last updated
En primer lugar, tras conectarnos a la máquina, utilizamos el comando:
para verificar la conectividad de red.
A continuación, realizamos el comando:
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.
Se utiliza el comando:
para que nos proporcione más información sobre esos puertos específicamente.
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:
Hay dos archivos interesantes como admin.php
y 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.
Al revisar nuevamente todos los directorios expuestos, encontramos un archivo config.xml.
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.
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.
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.
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.
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
.
Al estar dentro y ejecutar:
aún no somos root, por lo que hacemos:
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:
Con estos pasos, obtendremos acceso root. Luego, al ir a /root/root.txt
, podremos ver la bandera ROOT.
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.