Máquina de dificultad baja - intermedia. El objetivo es comprometer completamente el sistema siguiendo la metodología clásica de un pentest, comenzando con la identificación de servicios expuestos en la red, el análisis de una aplicación web vulnerable y, finalmente, la obtención de privilegios de administrador en el sistema.
Comenzaremos realizando un reconocimiento de red para localizar la máquina objetivo.
netdiscover -r 192.168.50.0/24
Con la herramienta Netdiscover, realizamos un escaneo de red para identificar la máquina objetivo. En este caso, la máquina objetivo tiene la dirección IP 192.168.50.86. Recuerden que la MAC-Vendor para la máquina de la plataforma VulnHub siempre es "PCS Systemtechnik GmbH".
MASSCAN
masscan -p 0-65535 192.168.50.86 --rate 5000
Nmap es, por excelencia, la herramienta favorita de los pentesters para enumerar puertos abiertos, filtrados o cerrados. Sin embargo, hoy he querido utilizar una herramienta distinta para identificar los puertos abiertos en nuestra máquina objetivo.
En la imagen anterior la herramienta masscan identifico tres puertos abierto 22,21,80. Ahora con la misma herramienta realizare una enumeración de servicios esta técnica es llamada banner grabbing, es una técnica utilizada para obtener información detallada de los servicios que se están ejecutando en nuestra máquina objetivo.
En este punto, ya conocemos los puertos abiertos y los servicios en ejecución. Utilizaremos Nmap para ejecutar un conjunto de scripts básicos de reconocimiento (
-sC) con el fin de obtener información más detallada sobre cada uno de ellos.NMAP
sudo nmap -n -Pn -p 21,22,80 -sC 192.168.50.86
La autenticación anónima en servicios FTP, especifica los valores para acceso anónimo. Esta forma de autenticación permite el acceso a sitios FTP sin una cuenta de usuario en el servidor y dominio, se usa con frecuencias en sitios FTP público.
Los usuarios inician sesión normalmente con la cuenta de usuario anonymous y como contraseña usan su cuenta de correo electrónico, aunque esto no es necesario.
Ahora analizare el servicio HTTP.
Al acceder al servicio HTTP, se despliega una página web sencilla con un botón central etiquetado como 'Troubleshoot'. Al interactuar con este, se solicita una autenticación mediante usuario y contraseña.
Este mecanismo de autenticación se conoce como autenticación http, es una mecanismo estándar para proteger recursos web, Existen varios tipos:
- Basic Auth: El más simple envia usuario y contraseña codificado en Base64 en el header. No es seguro sin HTTPS ya que Base64 es fácilemte decodificable.
- Digest Auth: Mejora Basic Auth enviando un hash MD5 de las credenciales en lugar de texto plano. Más seguro pero igualmente obsoleto hoy en día.
- Bearer Token (JWT): Muy común en APIs modernas.
- API Key: Envia una clave en el header o como parámetro.
Al no haber obtenido credenciales de acceso, procederé a analizar el servicio FTP, el cual permite una autenticación mediante el usuario 'anonymous'.
Como se muestra en la imagen anterior, al conectarnos al servidor FTP, el servicio devuelve el código 220 junto con una dirección de correo electrónico. Tras ingresar el usuario
anonymous, el servidor no solicita contraseña (basta con presionar Enter). Finalmente, ejecutamos el comando dir para listar los directorios y archivos disponibles.Como se observa en la imagen anterior, no hay ningún directorio o archivo alojado en servidor FTP.
En este punto, utilizaré la dirección de correo electrónico obtenida como posible contraseña o usuario para autenticarme en el servicio web anteriormente mencionado. Primero, comenzaré probando el correo como contraseña junto con un diccionario de usuarios.
Mediante la herramienta Hydra, realicé un ataque de fuerza bruta sobre el servicio de autenticación HTTP. En esta ocasión, utilicé el diccionario rockyou.txt para generar los posibles nombres de usuario, empleando
Security@hackNos como contraseña fija. Como se observa en la imagen anterior, la herramienta identificó correctamente al usuario admin.Ahora me autenticare con las credenciales antes mencionada.
Como se observa en las imágenes anteriores, al ingresar una dirección IP en el formulario web, este ejecuta un
ping y despliega los resultados obtenidos por el comando.Llegados a este punto, debemos verificar si el formulario web es vulnerable a una inyección de comandos (OS Command Injection). Antes de realizar las pruebas, revisaré el HTML del formulario para analizar cómo se procesan los datos de entrada.
En la imagen se muestra que el formulario web procesa los datos utilizando el método POST y lo envia a la ruta http://192.168.50.86/5ecurity/out.php
Ahora creare un script en Python para interactuar con el formulario web de manera más comoda.
Ahora realizaré la primera prueba inyectando el comando
|id. Como resultado, espero que la aplicación devuelva el ID del usuario actual junto con la información de los grupos a los que pertenece.Tal como se observa en la imagen, obtuvimos los resultados esperados: la identificación del usuario actual junto con la información detallada de los grupos a los que pertenece.
¿Qué está sucediendo exactamente? El operador
| (pipe) redirige la salida estándar del primer comando hacia la entrada estándar del segundo. En nuestro caso, al inyectar el pipe, logramos que la aplicación web ejecute el comando id tras procesar la dirección IP, devolviéndonos el resultado del sistema directamente en la respuesta HTTP.Aunque ya hemos identificado un punto de entrada, el servicio SSH sigue activo. Por lo tanto, aprovecharé las credenciales obtenidas para verificar si han sido reutilizadas en dicho servicio.
Como se observa en la imagen, las credenciales obtenidas no fueron reutilizadas en el servicio SSH; por lo tanto, esta vía de acceso no es válida.
A continuación, analizaré el archivo
/etc/passwd para enumerar los usuarios existentes en el sistema e identificar posibles objetivos adicionales.Posteriormente, crearé un diccionario de usuarios personalizados y utilizaré la herramienta Hydra para realizar un ataque de fuerza bruta contra el servicio SSH, empleando la contraseña previamente identificada:
Security@hackNos.La herramienta Hydra identificó un segundo usuario válido,
recon, confirmando que la contraseña Security@hackNos también fue reutilizada para este perfil en el servicio SSH.Ahora me conectaré mediante SSH a la máquina objetivo utilizando las credenciales obtenidas (
recon:Security@hackNos) para obtener una terminal interactiva.Como se muestra en la imagen anterior, hemos obtenido la primera flag, correspondiente al usuario actual. El siguiente paso consiste en elevar privilegios en el sistema para acceder a la flag del usuario root.
Para realizar la escalada de privilegios, utilizaré el comando
sudo -i, verificando si el usuario actual posee los permisos necesarios para realizar esta acción.Como se observa en la imagen anterior, el usuario
recon tiene permisos de sudo habilitados. Al ejecutar el comando sudo -i, logramos obtener acceso directo como usuario root sin restricciones.Nota: El comando sudo -i en Linux se utiliza para iniciar una sesión interactiva como superusuario (root). Al ejecutarlo, ocurren los siguientes cambios:
- Privilegios: Se asume la identidad del usuario root, obteniendo todos sus permisos en el sistema.
- Variables de entorno: Se carga el entorno completo del superusuario, como si este hubiera iniciado sesión directamente.
- Directorio de trabajo: El sistema cambia automáticamente al directorio personal de root (/root).
Una vez en el directorio personal del administrador, localizamos la flag root, lo que confirma el compromiso total del sistema.
Happy hack!!!
























Comentarios
Publicar un comentario