Kendi yetkimiz öğrenmek için : “getprivs” kullanabiliriz.
Mantıken anlaşılacağı üzere bazı post-exploitation komutları admin yetkileri istiyor , tabi Cobalt Strike kendi içerisinde yetki yükseltmek için bazı seçenekler içeriyor tek tek inceleyelim şimdi.
Cobalt Strike da yetki yükseltmek için kullanılan komut : “elevate” komutudur.
- elevate[yetki_yükseltmek_için_kullanacğımız_exploit] [listenerimiz]
Yada istersek GUI üzerinden direkt olarak Beacon Menu -> Access -> Elevate ile de ilerleyebiliriz.
Tabi Cobalt Strike’ın kendi içerisinde dahil ettiği kit’lerden biri olan Elevate Kit’i de load ederek bazı exploitleri kullanabiliriz.
Birde güzel bir komut olan runasadmin var bu da bizim yetki yükseltmek için exploitimizi runasadmin yani admin olarak çalıştır komutunu dener.
Runasadmin komutunda belirttiğimiz exploiti yetkisi yükseltilmiş bir contexte dener. 😀
Şimdi başka bir konuya değinelim eğer ki elimize credential geçirdiysek user hakkında biz şu komutları deneyebiliriz :
- runas [DOMAIN\user] [password] [command]
Bunu başka bir user’ın credentialsları kullanarak çalıştırabiliriz.Tabi output olarak bir şey vermez herhangi bir komut çalıştırmak yada uygulama çalıştırmak istediğimiz zaman bunu kullanabiliriz.
- spawnas [DOMAIN\user] [password] [listener]
Bu komutu kullandığımızda bize temporary bir process oluşturur ve bizim payloadımızın stage’ini bu process’e injecte ederek bize yeni bir session açar bu sayede o session ile artık yeni bir beacon elde etmiş oluruz.
- getsystem – bu komut ile SYSTEM hesabının tokeni çalmaya çalışılır.Token çalındığı an NT AUTHORITY/SYSTEM oluruz ve bu sayede Administrator hesabının erişiminin olmadığı işlemleri yapabiliriz.
System’e ulaşmak için diğer yol ise :
- elevate svc-exe [listener], bu komut sayesinde bir servis çalıştıran payload oluşturulur. Bir payloadı çalıştıran bir executable dosyayı drop eder ve onu çalıştırmak için bir service oluşturacak, payloadın kontrolünü üstlenecek ve servisi ve executable dosyayı temizleyecektir.
UAC Bypass
Microsoft Windows Vista'dan itibaren UAC (User Account Control) tanıttı.Bunu linux kullandıysanız eğer bilirsiniz , bir nevi UNIX sistemlerde bulunan “sudo” komutu gibidir.Olayı şudur , siz eğer ki normal user olarak çalışıyorsanız sıkıntı yok kendi yetkinizdeki programları çalıştırabilirsiniz ama bir dosyayı admin yetkisinde çalıştırmak istiyorsanız bunu “sudo” komutuyla yaparsınız windowsta ki UAC da bunun gibidir sağ tıkla -> Run As Administrator olayı da budur.
Cobalt Strike UAC Bypass için birkaç option sunar bize tabi bunlar da Administrator privilege değilsek çalışmaz.Şuan ki user’ımız Administrator grubunda mı değil mi bunu öğrenmek için :
$ run whoami /groups
$ elevate uac-token-duplication [listener] : Bu komut yükseltilmiş yetki haklarıyla temporary bir process oluşturur ve payload stage’mizi buraya inject eder.Bu atakla, yetkisi yüksek bir processten çalınmış bir tokenla isteğe bağlı olarak bir yetkilendirilmemiş process başlatmak için UAC-loophole kullanır bu sayede yetkimiz yükseltilmiş olur. Tabi bu loophole için yetkili token’a ait bazı hakların silinmesi gerekir.Bizim yeni sessionumuz kısıtlı haklara sahiptir.Eğer ki “Always Notify” en yüksek ayardaysa , bu atak current desktop da (bizim usermizin çalıştığı) yetkisi yükseltilmiş bir process gerektirir.Windows 7 ve Windows 10 (2018) yılı öncesinde çalışır.
$ runasadmin uac-token-duplication [command] : Üstteki atağın aynısıdır sadece bizim verdiğimiz bir komutu çalıştırır.
$ runasadmin uac-cmstplua [command] Bu komut uac bypass edip komutu yetkisi yükseltmiş bir context’de çalıştırmayı dener.Mimikatz
Beacon kendi içerisinde mimikatz’i entegre eder.Syntax’ı şu şekildedir :
- mimikatz [pid] [arch] [modu::command] <args>
Belirtilen process’e mimikatz injecte ederek kullanılır.Fakat biz pid ve arch kullanmak istemezsek eğer , mimikatz komutunu çalıştırmak için temp. Bir process oluşturulur.
Tabi bazı mimikatz komutları lsass.exe’ye erişmek isteyeceğimiz için SYSTEM komutları gerektirir.Eğer ki biz (!) kullanırsak mimikatz komutundan önce , çalıştırılacak mimikatz komutunu SYSTEM yetkisine önce elevate et sonra çalıştır şeklinde vermiş oluruz örneğin :
- !lsa::cache (system tarafından cache’lenmiş passwordları getirir önümüze)
- mimikatz [pid] [arch] [!module::command] <args>
- mimikatz [!module::command] <args>
Eğer ki üzerinde çalıştığımız Beacon’un access tokeniyle çalıştırmak istiyorsak (@) kullanabiliriz :
- mimikatz @lsadump::dcsync (dcsync komutunu üzerinde çalıştığımız beaconun access tokeniyle çalıştırır.)
- mimikatz [pid] [arch] [@module::command] <args>
- mimikatz [@module::command] <args>
Eğer ki mimikatz de tek satırda birden fazla komut çalıştırmak istiyorsak bu komutları (; ) ile ayırabiliriz.Maksimum karakter uzunluğu 511’dir.
- mimikatz crypto::capi ; crypto::certificates /systemstore:local_machine /store:my /export
Credential and Hash Harvesting
Hash’leri dump etmek için : beacon sessiona sağ tıklayıp -> Access -> Dump Hashes yada
- hashdump (komutunu kullanabiliriz , yazdığımızda temporary bir process oluşturulur , rundll32.exe, ve bu komut inject edilir.)
- hashdump [pid] [x86|x64] , belirtilen process içerisine hashdump toolu inject edilip çalıştırılır.
Hashdump komutu LSASS içerisine yeni bir job inject edecek ve çalışılan system üzerindeki Local User’ların password hashlerini dump eder.Tabi Administrator yetkileri gereklidir bunun için.
Logonpasswords : bu komut mimikatz kullanır ve administrator yetkisinde çalıştırılması gerekir.
- logonpasswords : plaintext credentiallar ve NTLM hashlerini almak için kullanılır. (Temporary bir process oluşturur ve logonpasswords komutunu içerisine inject ederek çalıştırır.)
- logonpasswords [pid] [x86|x64] credentialları dump etmek için belirtilen process içerisinde inject edilir.
Dcsync komutunu da kullanabiliriz.
NTLM password hashlerini DC’den extract etmek için kullanabiliriz.Kullanmak için
- dcsync [pid] [arch] [DOMAIN.fqdn] <DOMAIN\user> credentialları dump etmek için belirtilen process içerisinde inject edilir.
- dcsync [DOMAIN.fqdn] <DOMAIN\user> (Temporary bir process oluşturur ve dcsync komutunu içerisine inject ederek çalıştırır.)
Tabi dcsync komutu da tahmin edeceğiniz üzere eğer ki aşinaysanız , mimikatz kullanır.
User eğer ki google chrome kullanıyorsa , o zaman chrome dan user’ın kaydettiği passwordları dump etmek için ise chromedump komutunu kullanabiliriz :
- chromedump [pid] [arch]
- chromedump
Elde ettiğimiz Credential ve hashleri görüntülemek için :
View -> Credentials kısmına gidip görüntüleyebiliriz.
Port Scanning : Beacon kendisine ait built-in gelen port scanner’a sahiptir.Eğer ki belirli bir process içerisine inject edip bir port tarama işlemi yapmak istiyorsak :
- portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections]
Pid ve arch belirtmeden temporary bir process oluşturup bunun içerisine inject edip çalıştırmak istiyorsak :
- portscan [targets] [ports] [arp|icmp|none] [max connections]
Yukarıda targets için targetlarımızı belirliyoruz :
Targets : 192.168.1.12-255 arası yazabiliri yada 192.168.1.0/24 gibi
Ports : Port listesi verip taratabiliriz şöyle ki : 1-65535
arp|icmp|none : Taradığımız target aralığındaki bir hostun nasıl ayakta olup olmadığını öğrenmesini istersek birini yazabiliriz.Arp kullanırsak,ARP protocolü kullanılarak bir sistem up mı değil mi öğrenilir.ICMP kullanarak ICMP echo request atılır.None de direkt olarak bütün hostların ayakta olduğunu varsayar.
Max Connections : Default’u 1024’tür port tarama aracının herhangi bir kerede deneyeceği bağlantı sayısını sınırlar.Bu tool asynchronous I/O kullanır ve bir kerede birden fazla connection sağlayabilir.Daha fazla değer verirsek daha hızlı tarama işlemi yapar.
GUI Üzerinden View ->Targets -> Beacon’a Sağ Tıklayıp Scan ile yapılabilir.