10 Eylül 2011

Metasploit meterpreter uygulamaları

Posted by: Fırat Celal Erdik 10 Eylül 2011
Metasploit Framework’ünü meterpreter payloadunu kullanarak uzak sistemler üzerinde pentest amaçlı nasıl işlemler gerçekleştirilebileceğini  örnekler ile anlatacağım.
Open source bir araç olan Metasploit , Perl programlama dilinde yazılmaya başlanmış fakatdaha sonra Ruby dili ile sil baştan tekrar geliştirilmiş bir zafiyet tesbit ve exploit aracıdır.Hackerlar,antivürüs geliştiricileri ve pentest uzmanlarının olmazsa olmaz araçlarının başında gelmektedir. Metasploit, set edilen payloadların encode edilerek sistemlere gönderilebilme özelliği ile IPS/IDS gibi saldırı tespit ve engelleme sistemlerini atlatarak,Antivirüs ve personal firewallara takılmadan uzak sistemler üzerinde çalıştırabilme özelliğine de sahiptir.
Metasploit ile çalışmak için temel olarak şu 3 adım gerçekleştirilmelidir:
·         Hedef sistem işletim sistemi üzerinde çalışacak uygun exploitin tesbiti ve gerekli konfigrasyonunun yapılması
·         Uygun payload’un belirlenmesi ve konfigrasyonunun yapılması
·         Exploit işleminin gerçekleştirilmesi.
Meterpreter ise, Metasploit Frameworkü’nün sahip olduğu bir çok payloaddan yalnızca biridir. Komplex bir yapısı olmasına rağmen en yararlı payload olduğu kanaatindeyim .Genellikle uzak sistemler üzerinde download ve upload işlemleri ve uzak sistemlerin ekranlarını VNC gibi kontrol sistemleri ile kontrol etmek için kullanılır.Fakat tabi ki meterpreterin yetenekleri bunlarla sınırlı değildir.
Aşağıda meterpreter ile yapılabilecek bir çok çalışmanın nasıl yapılabileceğine değindim. Ayrıca  daha iyi anlaşılması ve ne ile karşılaşılacağının görülebilmesi  açısından verilen komutların, çıktılarını da makaleye ekledim.

Biz tüm makalemiz boyunca psexec exploitini ve meterpreter payloadunu kullanacağız.Psecec exploitini sistemi ele geçirmek için meterpreter payloadunu ise ele geçirilen uzak sistem üzerinde kontroller ve önemli bilgilerin ele geçirilmesi için kullanacağız.Psexec exploiti, Windows işletim sistemine sahip uzak bir sistem üzerinde bilinen bir kullanıcı adı ve şifre ile oturum açma işlemini gerçekleştirmektedir.Bunun için 445 SMB portunun açık olması gerekmektedir.

Bu kadar bilgininin ardından vakit işe koyulma vakti : ) Şimdi metasploit frameworkünü consoldan çalıştırmak ile işe başlayalım.Bunun için aşağıdaki komutu sistemimize verelim.




Metasploiti çalıştırdıktan sonra aşağıdaki gibi use komutu ile,belirtilen path’deki psexec exploitini kullanarak,uzak bir sisteme erişim sağlayamak istiyoruz. Psexec ile ilgili kullanılacak ve değer atanmış/atanacak parametreler show options komutu ile metospoloit üzerinde görülebilir.Aynı şekilde info ve show advanced komutları da aynı işi görecektir.




Görüleceği üzere RHOST,SMBUser ve SMBPass parametrelerinin current setting kısımları şuan boş duruyor,bunlara gerekli değerleri atamalıyız.

Uzak bağlantı yapacağımız sunucunun IP'sini  RHOST parametresine atıyoruz.Aynı şekilde SMBUser  ile sistem üzerindeki  bir accounta ait kullanıcı adı ve SMBPass parametresi ile de uzak sistem üzerinde aktif accounta ait parola bilgisini atıyoruz.Accountun hesap bilgilerinin nasıl ele geçirildiği bu yazımın konusu olmadığı için oralara değinmiyorum.
 
İlgili parametrelere değerleri belirtildikten sonra sıra bu exploiti çalıştırmaya geldi.Exploit komutu ile psexec exploitini çalıştırıyoruz.Run komutu da exploit komutu yerine aynı amaç için kullanılabilirdi.

Not: Metasploitde bir exploit kullanılmak isteniyorsa use komutundan sonra exploitin path’ini belirtmemiz ve daha sonra uygun parametreler ile gerekli ayarları yapmamız yeterlidir.Exploiti çalıştırmak için ise run veya exploit komutlarının biri koşturulmalıdır.


 
Evet artık meterpreter satırına kavuştuk. Farkettiyseniz yukarıda payload set etmedik.Bunun sebebi psexec zaten bizim yerimize meterpreter payload’unu uzak sisteme uploat etti.Fakat bunu yaparken default olarak 4444 local portunu kullandı.Bu ve bazı default değerleri manuel girmek isterseniz payload’u set etmek için set PAYLOAD windows/meterpreter/reverse_tcp şeklinde bir komut verdikten sonra yukarıda yaptığımız gibi LHOST,LPORT v.s  gibi parametrelere değerleri atamanız gerekecektir. Bundan sonra bir sonraki adıma geçebilirsiniz.

Bundan sonrası uzak sistem üzerindeki atraksiyonlardan oluşan oldukça zevkli bir bölüm.Şimdide uzak sistem üzerindeki networksel ( interfaceler ,IP,Netmask , Gateway v.s) ayarları görmek için ipconfig –a komutunu koşturmakla işe başlayalım.
Meterpreter ile uzak sistem üzerinde sysinfo komutu ile uzak sistem üzerindeki sistem bilgilerini özetle alabilirsiniz.
Sistem üzerinde hangi yetkilerde erişim yaptığınızı görebilmek için getuid komutu koşturulabilir.Görüldüğü üzere System yetkilerinde erişim sağlanmış görünüyoruz.
 Getpid komutu ile ise mevcut sistem PID değeri alınabilir. 
 
Uzak sistem üzerinde etkin Process privilegets görebilmek için getprivs komutu koşturulabilir.


 Uzak sistem üzerinde herhangi bir komut çalıştırmak istiyorsak bunu execute komutu ile gerçekleştirebiliriz.Basit kullanımı aşağıdaki gibidir.
Uzak sistemde bu komutla aynı anda aşağıdaki gibi bir ekran görüntüsü alacaktır.

































Burada iletiyi görüntüle  derseniz , başlat/çalıştıra "cmd" yazmışsınız gibi bir  adet komut satırı görüntüleyecektir .Bu da komutun uzaktan sistemimiz de çalıştırılabildiğini bize gösteriyor.

Execute komutunu biraz daha profesyonel kullanıp aşağıdaki gibi uzak sistem üzerinde komut koşturulup ve çıktısının yani komut satırının bizim ekranımızda görüntülenmesi ve buradan çalışmalar yapılabilmesini  sağlayalım.
Görüldüğü üzere uzak sistemde execute komutu bir komut koşturarak mevcut sistemin command promtunu elde ettik.


Uzak sistemdeki Event logları silmek için aşağıdaki komut koşturulabilir.
 
Veya mevcut tüm event loglarının silinmesi için aşağıdaki komutu da kullanabiliriz.Aşağıdada görüleceği üzere çeşitli kategorilerdeki(application,hardware event,internet explorer,key management service,event log media center,Odiag ,Security v.s) tüm event loglarını silmektedir.Bu da bir pentestçinin veya hackerların sistemlere sızdıktan sonraki son aşamalarından olan Clear track aşamasındaki izlerin silinmesi için kullanılabilir. 
Meterpreter ile uzak sistemin mevcut masaüstü görüntüsünün bir screenshotu kolaylıkla alınabilir.Bu işlem için screenshot komutu bizim işimizi görecektir.Kullanımı aşağıdaki gibidir.
-p ile kaydedilmesi gereken path bilgisini belirtiyoruz  ve  -q ile jpeg resmimizin kalite değerini giriyoruz.Kaydettiğimiz uzak makinanın screenshot görüntüsü ise aşağıdaki gibi olacaktır.



























Meterpreter ile ele geçirilen uzak sistemler üzerinde etkin olan mikrofonun kontrolü kolaylıkla ele geçirilebilir.Mevcut ortam dinlemesi yapılabilir.Buna örnek olarak uzak sistemdeki mikrofondan bir dakikalık sesin nasıl  kaydedilebileceğini gösterdim. 
 
-d parametresi ile kaç saniye kayıt yapılacağını belirttik ve -f ile ise yapılan kaydın hangi isimde nereye kaydedileceğini belirttik.
 
Görüldüğü gibi seskaydi.wav dosyamız root dizini altındadır.Herhangi bir wav oynatıcı programı ile kayıt dinlenebilir.

Sistem üzerindeki mevcut web kameraların belirlenmesi ve etkin olan kameradan belli bir miktar görüntü(snapshot) alınması için ise aşağıdaki gibi bir komut verilmelidir.Bizim sistemimizde kamera olmadığı için çıktısını göstermeden geçiyorum.
Kameradan snapshot görüntü almak için ise aşağıdaki gibi komut koşturulabilir.
Burada "-p /root/" görüntünün kaydedileceği path bilgisi, "-q 60" kaydın jpeg olarak kalitesini ifade eden bilgi, " -v  false" ise kaydın komut durur durmaz otomatik olarak açılmaması için verilen parametre değeridir.

Uzak sistemdeki çalışılan dizin bilgisini öğrenmek için pwd komutu kullanılabilir.


Uzak sistem üzerinde dizin değiştirmek için ise cd komutu kullanılabilir.




Local sistemdeki çalıştığımız dizini öğrenmek için local pwd anlamında lpwd kullanılabilir.
Yine local sistemde dizin değiştirmek için ise lcd  komutu kullanılabilir.

Sistemi keylogger ile adım adım izlemek için  run keylogrecorder komutu verilebilir.Bu arada run, meterpreter scriptlerini çalıştırmak için kullanılan bir komuttur.Meterpreter scriptlerini  /opt/framework/msf3/scripts/meterpreter altında bulabilirsiniz.Şimdi ele geçirdiğimiz sistemde keylogger çalıştıralım.
 Belirtilen dosyaya neler kaydedildiğine bakalım:
Görüldüğü gibi klavyeden basılan her tuş kaydedilmiştir.Burada ile belirtilen enter tuşuna basılması durumudur. isminden belli olduğu üzere  tab tuşu ile bir geçiş yapıldığını göstermektedir.


Ele geçirilmiş sistem eğer windows ise bu sunucuyu enumurate etmenin en güzel yolu winenum.rb scriptini kullanmakdır.Bu meterpreter scripti kullanılarak bir çok windows komutunu aynı anda sistem üzerinde koşturulması ve bunun sonuçlarının bir dosyaya yazdırılması sağlanabilir.Komutun verilmesi,sistemde koşturulan komutlar ve sonuçların kaydedildiği dosya ile birlikte sonuçların belirtildiği ekran görüntüsü aşağıdaki gibidir:
Yukarıda belirtilen text dosyasında belirtilen tüm komutların çıktısı görülebilir.Tek komutla sistem üzerinde bir çok konuda bilgi sahibi olunması açından çok değerli bir script.

Uzak sunucuya dosyayı veya tüm bir klasörü upload etmek için,upload komutu aşağıdaki gibi kullanılabilir.Yukarıda aldığımız ekran görüntüsünü(screen.jpg) uzak sistemin  D:\hacked\ dizini altına upload edelim.





Uzak sistemi kontrol edelim bakalım gerçekten screen.jpeg resmimiz başarılı bir şekilde upload edilmişmi.

































Görüldüğü üzere mevcut resmimiz D:\hacked dizini altına gelmiş.

Şimdi ise uzak sistemden bir dosyayı veya klasörü local sistemimize nasıl download edebiliriz ona bakalım.














Şimdi de dosya bize ulaşmış mı kontrol edelim.
Görüldüğü gibi white_list_ip.xls isimli dosyayı download ettik.Aynı yöntemle belli bir klasör ve altındaki tüm dosyaları da download edebilirsiniz.

Uzak sistem üzerinde çalışan tüm uygulamaların ve bu uygulamaların versiyon bilgilerini elde edebilmek için aşağıdaki meterpreter scripti kullanılabilir.


Sistemdeki tüm uygulamaları ve bunların versiyonlarını tesbit eden oldukça hoş bir scripttir.Ben tüm sonuçlarını yukarıdaki ekran görüntüsünde göstermedim,fakat bu script sistemde ne var ne yok her programı versiyon bilgileri ile birlikte önümüze döküyor.
Uzak sisteme RDP yapmak için yeni bir account oluşturabilmek için aşağıdaki script kullanılabilir .Scripte parametre olarak verdiğimiz kullanıcı adı ve şifre ile artık uzak sisteme RDP bağlantısı da yapabiliriz.Mevcut bağlantıyı artık kullanmak istemediğinizde aşağıda belirtilen komut koşturulup oluşturulan account devre dışı bırakılabilir.


Sistem üzerindeki tüm kullanıcıları ve bunların parolalarının hashlerinin ele geçirilmesi için aşağıdaki komut koşturulabilir.


Burada dikkatten kaçmayan,ele geçirilen sistem üzerinde SysKey parolası aktif olmasına rağmen onun da hash bilgisini tesbit edebilmiş olması önemli.Bu özellikleri ile meterpretere aşık olmamak elde değil :)

Yukarıda görüldüğü üzere sistemdeki tüm kullanıcı adları ve şifrelerin hashli halleri dump edildi.Ele geçirilen bu NTLM hashleri JTR benzeri toollarla kırılarak şifrelerde ele geçirilebilir.Veya şifreye ihtiyaç duymadan mevcut kullanıcı adı ve şifrelerin hashli halleri ile de sistemlere login olunabilir.

Uzak sistemin host dosyasını zehirleyerek,bu sistem üzerinden internette çıkan kullanıcının gerçek DNS sunuculara gitmeden localdeki zehirlenen host dosyası ile isim çözümlemesine maruz bırakılıp, kullanıcıyı başka sahte sayfalara yönlendirilebilir. Bizim örneğimizde kullanıcı facebook.com sitesine gitmeye çalışırken cnn.com sitesine gidecektir.
Kötü amaçlı kullanımlarla phishing saldırıları ile account bilgileri veya bankacılık erişim bilgileri ele geçirilebilir.

Uygulamamıza öncelikle fakehost.txt isimli bir dosya oluşturup içerisine aşağıdaki gibi iki satırı ekleyerek başlayalım. Burada 157.166.224.25 IP'si cnn.com sitesine ait IP adresidir.Kullanıcının host dosyasını değiştirerek facebook yerine kullanıcının cnn web sitesine gitmesini sağlayalım.

Şimdi de bu fakehost.txt dosyasının içeriğini uzak sistemdeki windows sunucunun host dosyasına inject edelim.Script öncelikle  mevcut host dosyasının yedeğini alıyor daha sonra bizim verdiğimiz satırları host dosyasına ekliyor.
 
Evet hepsi bu kadar.Şimdi ele geçirilen sunucuda facebook sayfasına login olmaya çalışalım bakalım ne ile karşılaşacağız.
 
Görüldüğü üzere ele geçirilen uzak sistemin host dosyası başarı ile değiştirilmiştir ve kullanıcı facebook.com sitesine gitmek istediğinde bu domaine ait isim çözümlemesi DNS sunucudan önce host dosyası tarafından çözüldüğü ve host dosyasını da biz zehirlediğimiz için kullanıcı facebook.com yerine cnn.com web sitesine girmiştir.

Host dosyasının içeriği ise aşağıdaki gibidir.Host dosyasına C:\Windows\System32\drivers\etc\ dizininden erişebilirsiniz.































Buradan da görüleceği üzere gerçekten host dosyası hostedit ismindeki meterpreter scripti ile değiştirilmiştir.

Meterpreter çoklu script çalıştırılmasına izin vermektedir.Bunun için multiscript isimli bir scripte bir  dosyadan okutularak  script listesi  verilerek,bu listedeki tüm komutların tek komut ile execute edilmesi sağlanmış olur. Örnek ile anlatmaya çalışayım.Öncelikle içerisinde icra edilmesi gereken scriptlerin isimlerinin olduğu commands.txt isimli bir text dosyası oluşturuyorum.
Şimdi bu commands.txt dosyasını parametre olarak alıp işleyecek multiscript isimli scriptimizi çalıştıralım.Böylece  tek seferde listedeki tüm scriptleri çalıştırmış olacağız.Sonuçlarına birlikte bakalım.
 
Listemizdeki 3 adet scripti dosyadan okutarak tek seferde execute ettirmiş olduk.
Bir sonraki makalemizde görüşmek üzere.
Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.