Bölüm 1’de, Kali linux’tan Windows makinelerde komutları yürütmek için etki alanı kimlik bilgilerini kullanmaya yönelik bazı yaygın araç ve teknikleri listeledim. Bu yazıda, teknikleri bir Windows makinesinden yeniden oluşturarak bu araçların gerçekte nasıl çalıştığını biraz araştıracağım.
Önceki yazıda bahsedilen araçların tümü (psexec, wmiexec, vb.) esasen temel Windows işlevlerinin yeniden uygulanmasıdır ve her teknik, Windows içinden yerel olarak kullanılabilir.
Bu yazıda popüler “PsExec” yöntemini (hem Metasploit hem de Impacket’te kullanılan) inceleyeceğim. Pek çok pentester (ben de dahil) psexec tekniklerini kapsamlı bir şekilde kullandı, ancak yakın zamana kadar kaputun altında neler olup bittiğini hiçbir zaman tam olarak anlayamadım. Umarım bu yazı, yerel Windows araçlarını kullanarak tekniği manuel olarak yeniden oluşturarak PsExec’e biraz ışık tutacaktır.
Bu senaryoda, CSCOU.LAB etki alanıyla aynı dahili ağa bağlı bir Windows 7 makinem (“win7attack” adında) var. Bu Olumsuz etki alanı katılmış, yalnızca aynı ağda bulunuyor. Bir hatırlatma olarak, tek bir alan adı kullanıcısının hesabını kurtardık veya kırdık:
Kimlik Bilgilerini Test Etme ve Etki Alanını Keşfetme
Önceki yazıda, Windows makinelerindeki kimlik bilgilerini test etmek ve ele geçirilen hesabın herhangi bir makinede yerel Yönetici olup olmadığını görmek için Metasploit’in smb_login ve CrackMapExec’ini kullandım.
Kimlik bilgilerini Windows’tan bir makineye karşı test etmenin birkaç yolu vardır, ancak gösteri amacıyla temel yöntemi kullanacağım. net
komutlar. Bu, bunu yapmanın en iyi veya en gizli yolu değildir, ancak takip edilmesi ve anlaşılması kolaydır.
KOBİ Girişi
Kimlik bilgilerini test etmenin kolay bir yolu, makineye bir SMB bağlantısı başlatmayı denemektir. Metasploit modülünün yaptığı aslında budur. Windows’ta şunları kullanabilirsiniz: net use
Bir ana bilgisayarla SMB bağlantısı kurmak için kimlik bilgileriyle komut:
Başarılı bir şekilde tamamlandığını görebiliyoruz, dolayısıyla kimlik bilgileri iyi. Yönetici olup olmadığımızı görmek için yönetici paylaşımlarından birini (“C$” veya “ADMIN$”) görüntülemeyi deneyelim:
Yönetici olmasaydık erişimin reddedildiğini görürdük:
Hangi bağlantılarımızı açtığımızı bir mesaj göndererek görebiliriz. net use
emretmek:
Bu tekniğin sorunlarından biri, Windows ana bilgisayarlarıyla tespit edilebilecek bağlantılar kurmuş olmamızdır. ordws01’deki bir yönetici bir çalıştırdıysa net session
komutuyla saldıran kutumuzdan bir bağlantının açıldığını görecektir:
Saldırı kutumuzdan tüm oturumları sonlandırabiliriz. net use /delete *
Diğer bir sorun ise tüm olanakları kullanamamamızdır. net
Bir kullanıcı adı ve şifre ileterek komutları ve diğer Windows araçlarını kullanabilirsiniz. Örneğin, net view
‘/user’ seçeneği yoktur ve bunun yerine varsayılan olarak yerel oturum açma adınızı kullanır. Ancak bu sınırlamayı aşabiliriz.
Kerberos kimlik doğrulamasını almak için ‘runas’ı kullanma
Windows runas
command, komutları başka bir kullanıcının bağlamında çalıştıralım. ‘/netonly’ seçeneğiyle kullanıldığında alan adı kullanıcısı olarak kimlik doğrulaması yapabiliriz, etki alanına katılmış bir makinede olmasak bile.
“cmd.exe”yi çalıştırarak etkileşimli bir komut istemi başlatabiliriz. runas
. Bu tekniğin güzelliği, LogonID’mizin değişmesi ve aslında etki alanında Kerberos kimlik doğrulamasını kullanmaya başlayabilmemizdir. nasıl olduğuna dikkat edin whoami
çıktı aynı ancak yeni komut isteminde LogonID’miz bir işlem yaptıktan sonra değişiyor runas
:
Bu yeni komut isteminde, çalıştırmamıza gerek yok. net use
Belirtilen kimlik bilgileriyle bağlantıları açma komutu. Windows’un Kerberos kimlik doğrulamasıyla LogonId’imizi kullanacağı normal komutları kullanabiliriz:
Çalıştırarak Kerberos kimlik doğrulamasını kullandığını doğrulayabiliriz. klist
Tekrar ve TGT’nin asıl adı olan “[email protected]”a dikkat çekerek:
Bu komut isteminden aslında “etki alanındayız” ve yerel Windows komutlarını jarrieta ayrıcalıklarıyla çalıştırmaya başlayabiliriz.
PSExec
Son yazıda, kimlik bilgilerine sahip bir Windows makinesine karşı uzak komutları başlatmak için Metasploit’in “psexec” modülünü ve Impacket’in “psexec.py” modülünü kullandım. Bu araçların her ikisi de şaşırtıcı bir şekilde psexec adlı klasik bir Windows yardımcı programını temel alıyor.
TechNet makalesinden:
PsExec, istemci yazılımını manuel olarak yüklemenize gerek kalmadan, konsol uygulamaları için tam etkileşimle tamamlanan işlemleri diğer sistemlerde yürütmenize olanak tanıyan hafif bir telnet alternatifidir
Sysinternals paketine dahil olan bağımsız bir ikili dosyadır. Kimlik bilgilerini ona iletebilir ve komutları uzaktan çalıştırabilir veya etkileşimli bir komut istemine bırakabilirsiniz:
Kerberos TGT’si olan “runas” komut isteminden çalıştırırsanız kimlik bilgisi belirtmenize bile gerek kalmaz.
PsExec’i başlattığınızda aşağıdakileri söyleyen bir durum satırı görebilirsiniz:
|
|
Bu size PsExec’in gerçekte nasıl çalıştığı konusunda biraz ipucu verebilir. Yaptığı şey, hedef makinede (“PSEXECSVC” adı verilen) bir hizmeti uzaktan başlatmaktır. Aslında hedef makineye gidip komut istemi açıkken hizmetleri görüntülersek şunu görebiliriz:
Hizmet ikili dosyayı başlatır C:\Windows\PSEXECSVC.exe
. Bu dizin aslında SMB üzerindeki ADMIN$ paylaşımıdır. Böylece PsExec size bir kabuk kazandırmak için birkaç adım gerçekleştirir:
- Bir ikili dosyayı SMB üzerinden ADMIN$ paylaşımına kopyalayın
- Uzaktan işlemede ikili dosyaya işaret eden bir hizmet oluşturun
- Hizmeti uzaktan başlatın
- Çıkıldığında hizmeti durdurun ve ikili dosyayı silin
Metasploit modülü ve Impacket betiği de tam olarak bu şekilde çalışır. Ayrıca, tercih ettiğimiz herhangi bir ikili programı (örn. ölçüm yorumlayıcı yükü) uzaktan başlatmak için gerekli adımları manuel olarak yeniden oluşturabiliriz.
Manuel olarak PsExec’leme
Öncelikle, msfvenom ile oluşturduğumuz ve Veil ile kararttığımız yürütülebilir bir veri yüküne sahip olduğumuzu varsayalım (böylece AV onu işaretlemez). Bu durumda, bir sayaç yorumlayıcısı revers_http verisi oluşturdum ve buna ‘met8888.exe’ adını verdim.
İkili kopyalayın. “jarrieta” komut isteminden, ikili dosyayı ADMIN$’a kopyalamanız yeterlidir. Aslında dosya sisteminin herhangi bir yerine kopyalanıp gizlenebilir.
Hizmet oluştur. Windows sc
komutu Windows hizmetlerini sorgulamak, oluşturmak, silmek vb. için kullanılır ve uzaktan kullanılabilir. Bununla ilgili daha fazlasını buradan okuyun. Komut istemimiz üzerinden, yüklediğimiz ikili dosyaya işaret eden “meterpreter” adlı bir hizmeti uzaktan oluşturacağız:
Hizmeti başlat. Son adım hizmeti başlatmak ve ikili dosyayı yürütmektir. Not: hizmet başladığında “zaman aşımına uğrar” ve bir hata üretir. Bunun nedeni, ölçüm cihazı ikili dosyamızın gerçek bir hizmet ikili programı olmaması ve beklenen yanıt kodunu döndürmemesidir. Sorun değil çünkü ateş etmek için sadece bir kez çalıştırılmasına ihtiyacımız var:
Metasploit dinleyicimize bakarsak oturumun açıldığını görürüz:
Dağınıklığımızı temizle. Meterpreter oturumunu aldıktan sonra met8888.exe sürecinden çıkıp daha kalıcı bir sürece geçiş yapacağım. Daha sonra ikili dosyayı silmemiz ve uzak hizmeti durdurmamız/silmemiz gerekir:
Zeki bir okuyucunun fark edebileceği bir şey, normal PsExec ikili dosyasını çalıştırdığımızda ve çalıştırdığımızda whoami
kabukta “cscou\jarrieta” olarak koşuyorduk. Ancak ölçüm cihazının çalıştırılmasında getuid
bizi “NT AUTHORITY\SYSTEM” olarak gösteriyor. Neden ani ayrıcalık artışı?
Hizmetlerin nasıl oluşturulduğu ve başlatıldığıyla ilgilidir. Varsayılan olarak hizmetler SİSTEM olarak oluşturulur ve çalıştırılır. Hizmeti oluşturduğumuzda, varsayılan olarak SYSTEM olduğu için çalışması için bir kullanıcı adı belirtmedik. Hizmeti gerçekten farklı kimlik bilgileriyle çalıştırmak isteseydik, onu oluşturduğumuzda belirtebilirdik, ancak doğrudan SİSTEM’e geçebiliyorsak neden bunu isteyelim? Tersine, bir SİSTEM kabuğu elde etmek için PsExec ile “-s” seçeneğini de belirtebilirdik.
SMExec
Geçmişte yarı etkileşimli bir kabuk elde etmek için kullandığım Impacket araçlarından biri “smbexec.py”. Bu, sisteme bir ikili dosya bırakmaya gerek kalmadan komutları yürütmek ve SMB aracılığıyla çıktı almak için gerçekten akıllı bir teknikten yararlanır. Hedef tarafından bakarak smbexec çalıştırıldığında ne olacağını görelim. Açıkçası kaynak koduna bakabiliriz ama bu daha eğlenceli. Bir hatırlatma olarak, smbexec çalıştırıldığında nasıl göründüğüne bakalım:
Yani onun bir “BTOBTO” hizmeti yarattığını biliyoruz. Ancak bir işlem yaptığımızda bu hizmet hedef makinede mevcut değil sc query
. Sistem günlükleri ne olduğuna dair bir ipucu ortaya koyuyor:
Hizmet Dosyası Adı, yürütülecek bir komut dizesi içerir (%COMSPEC%, cmd.exe dosyasının mutlak yolunu gösterir). Yürütülecek komutu bir yarasa dosyasına yansıtır, stdout ve stderr’i bir Temp dosyasına yönlendirir, ardından yarasa dosyasını çalıştırır ve onu siler. Kali’ye döndüğümüzde, Python betiği çıktı dosyasını SMB aracılığıyla çeker ve içeriği “sözde kabuğumuzda” görüntüler. “Shell”imize yazdığımız her komut için yeni bir servis oluşturuluyor ve süreç tekrarlanıyor. Bu nedenle bir ikili dosyayı bırakmasına gerek yoktur, yalnızca istenen her komutu yeni bir hizmet olarak yürütür. Kesinlikle daha gizlidir, ancak gördüğümüz gibi yürütülen her komut için bir olay günlüğü oluşturulur. Etkileşimli olmayan bir “kabuk” elde etmenin hala çok akıllıca bir yolu!
Komutları hizmetler aracılığıyla yürütme
Smbexec’in gösterdiği gibi, bir ikili dosyaya ihtiyaç duymak yerine komutları doğrudan hizmet binPath’lerinden yürütmek mümkündür. Hedef Windows makinesinde yalnızca rastgele bir komut yürütmeniz gerekiyorsa, bu, arka cebinizde bulundurmanız gereken yararlı bir numara olabilir. Hızlı bir örnek olarak, uzak bir hizmeti kullanarak bir Meterpreter kabuğu alalım olmadan bir ikili.
Metasploit’i kullanacağız web_delivery
modülünü açın ve ters Meterpreter yüküne sahip bir PowerShell hedefi seçin. Dinleyici ayarlandı ve bize hedef makinede yürütülecek komutu söylüyor:
|
|
Windows saldırı kutumuzdan bir uzak hizmet (“metpsh”) oluşturuyoruz ve binPath’i veri yükümüzle cmd.exe’yi çalıştıracak şekilde ayarlıyoruz:
Ve sonra başlatın:
Hizmetimiz yanıt vermediği için hata veriyor ancak Metasploit dinleyicimize baktığımızda geri aramanın yapıldığını ve veri yükünün yürütüldüğünü görüyoruz:
Ve bir Windows hizmeti aracılığıyla, bir ikili dosyayı bırakmadan, uzaktan bir ölçüm cihazı yükünü başlattık.
Bu arada, bu devrim niteliğinde bir şey değil. Bu Kesinlikle Metasploit veri yüklerini nasıl yürütmeye çalışır? psexec
şimdi modül. Modülü kullanırken varsayılan davranış, PowerShell’in kullanılabilir olup olmadığını kontrol etmek ve ardından %COMSPEC%’den PowerShell’i çağıran bir hizmet oluşturmaktır. Yalnızca PowerShell mevcut değilse veya manuel olarak belirtirseniz, Metasploit aslında hedef sistemlere artık bir ikili dosya bırakacaktır (bu iyidir, çünkü çoğu AV artık Metasploit ikili dosyalarını algılamaktadır).
Yaklaşıyor
Bu yazıda, kimlik bilgileriniz olduğunda komutları uzaktan yürütmek için Windows hizmetlerinin nasıl kullanılabileceğini anlattım. Umarız bu, Metasploit’in psexec modülünün ve Impacket’in psexec ve smbexec komut dosyalarının ardındaki “sihrin” bir kısmını ortaya çıkarmıştır. Eğer bir pentest yapıyorsanız ve Kali’ye erişiminiz yoksa, artık bazı davranışları kopyalamak için yerel Windows araçlarını nasıl kullanacağınızı biliyorsunuz.
Daha sonra, Windows kutularında (wmiexec.py’nin arkasındaki teknik) kimliği doğrulanmış RCE elde etmek için Windows Yönetim Araçları (WMI) ve Windows Uzaktan Yönetim’i (WinRM) kullanmaya başlayacağım.
Umarım bu birine yardımcı olmuştur. Bunu yazmak ve bu araçları keşfetmek kesinlikle bana yardımcı oldu. Sorularınızla yorum yapmaktan veya nerede hatalı olduğumu söylemekten çekinmeyin.
-ropnop