Blog

Metasploitable İle Sızma Testleri 5

Bu yazımızda Sql injection ve Samba hizmetinin üzerinden sızma testleri gerçekleştireceğiz . İlk olarak Sql injection zafiyetinden başlayacağız daha sonra Samba dan devam edeceğiz.

Kullanacaklarımız:

Metasploitable(dvwa) : 192.168.21.143

Kali Linux : 192.168.21.128

SQLMAP (kali linux içerisinde bir araç)

Metasploit

Samba

 

SQL Nedir?

Structured Query Language, Türkçesi Yapılandırılmış Sorgu Dili. Veritabanlarını yönetmek için kullanılan bir sorgu dilidir. Dinamik web siteleri üzerindeki veriler basit olarak bir veritabanların da tutulmaktadır. Bu veriler SQL dili kullanılarak çağırılır veya üzerlerinde çeşitli işlemler yapılır. En basit örnekle bir foruma login olduğumuz da kullanıcı adı ve şifre gireriz. Bu bilgiler veritabanın da tutulur ve eğer veritabanın da ki bu girdiğimiz veriler doğruluğu kanıtlanırsa yani eşleşirse login oluruz. Veritabanların da yalnızca şifreler tutulmaz. Adres bilgileri, telefon numaraları, kimlik bilgileri vs hizmete göre veriler bulunabilir. Bu verilerin bulunmasına, değiştirilmesine, silinmesine veya hariçten veri eklenmesine SQL sorgu dili olanak sağlar.  SQL dilini kullanan veritabanı çeşitleri şunlardır;

Bkz: Wikipedia ; Sybase, MySQL, Mssql, PostgreSQL, Microsoft SQL Server, Oracle, IBM DB2, IBM, Informix, Progress, Firebird, Access.

Kısa tanımdan sonra SQL injection nedir bunu tanıyalım.

 

SQL İnjection nedir?

Veritabanın da tutulan bu veriler, dinamik web siteleri  tarafından çeşitli yollar ile çağırılırlar ve kullanılırlar. Bu olaylar çeşitli programlama dillerine göre değişkenlik gösterse de sql sorgu dilleri temelde hep aynıdır. PHP dili üzerinde veritabanından okuma yapmak için kullandığımız şu basit kodu inceleyelim;

$tr = $_REQUEST['veri1'];

$tr2 = $_REQUEST['veri2');

Mysql_query("SELECT * FROM kullanicilar WHERE kullanici_adi='$tr' and sifre='$tr2' ");

Kod'da veri1 ve veri2 değerlerini okunup veritabanın da sorgulama yapılıyor/çağırılıyor. Yani bir kritere göre belirleme yapılıyor. Bu kriterler girilen kullanıcı adı ve şifredir.

Komutların anlamlarına bakarsak;

SELECT seçmek manasında,

* Işareti evrensel tanımlayıcı,

FROM den-dan manasında,

"kullanicilar" tablo ismidir.

WHERE nereden, -nereye manasındadır.

Kullanici_adi ve sifrekullanicilar tablosunda ki kolon isimleridirler. Buralarda kullanıcı adları ve şifreler tutulmaktadır.

Peki bu kodun neresi sql injection zafiyeti barındırıyor derseniz şöyle söyleyelim; SQL injection, kodun devamı niteliğinde yazılan kodlar ile veritabanın da değişikler yapmak veya veri okumak niyetliyle koda müdahale edilip istismar edilmesidir.

Genelde URL bazında şu tarz şeyleri görmüşüzdür ; kullanicilar.php?id=100haber.php?haber_no=4

Bu URL de arkada çalışan SQL kodunu kafada tasarlarsak şöyle olduğunu varsayabiliriz;

SELECT * FROM haberler WHERE haber_no = "$haber_no"

Veya

SELECT * FROM kullanicilar WHERE id="$id"

$haber_no ve $id değişkenleri az önce belirttiğim haber.php de ve kullanicilar.php de ki gelenlerdir.

Burada komutun son hali şöyle oluyor:

SELECT * FROM haberler WHERE haber_no = 4

Buda; bana veritabanın da ki haberler tablosunda bulunan 4 numaralı haber_no sütununun sakladığı veriyi göster/seç manasını taşır. Aynı mantık kullanıcılar tablosu içinde geçerli.

SQL injection'ın asıl meselesi burada devreye giriyor. Komuta URL üzerinden şöyle müdahale ettiğimiz  düşünelim.

Haberler.php?haber_no=4 and haber_baslik = "Cezeri SGA ekibinin konferansları ne zaman?"

böyle bir URL gönderdiğimizde arkada çalışan komut şöyle olur:

SELECT * FROM haberler WHERE haber_no = 4  and haber_baslik =   "Cezeri SGA ekibinin konferansları ne zaman?"

Görüldüğü gibi koda ekleme yapıldı. Yani aslında müdahale edildi. Buraya kadar olan şeyler tehlikesiz gibi görünebilir ama hackerlar bunların nasıl sömürüldüğünü bilirler ve zarar verebilirler. Nasıl mı? Devam edelim ve görelim. Şimdi ilk olarak bir hedefte SQL injection zafiyetinin olup olmadığına nasıl kanaat getirilebilir bunu görelim.

SELECT * FROM table WHERE column='0'

Bu komutun doğru çalışan halidir. Yani haber.php?id=0 gibi düşünebilirsiniz ama haber.php?id=0' şeklinde bir tırnak koyulduğun da arkada çalışan sql sorgusu

SELECT * FROM table WHERE column='0' '

Böyle bir hal alacağından haliyle söz dizimi hatası alacaksınız ve kodunuz çalışmayacak. Söz dizimi hatasından kastımız, komuta; url'den gelen ve eklenen tek tırnaktan kaynaklanan kod yapısında bozulmadır. Biz burada tek tırnak koyarak bir tırnak açıyoruz ama tırnağı kapatmıyoruz tırnak açık kaldığı için haliyle komut devam ediyor şeklinde algılayan sistem hata verecektir ve bu komutun gerisi nerede? Diye, veya şunu yaptın bu yüzden hata oluşturdu diye bize cevap döndürecektir.

Bir başka yöntem de and, or, xor gibi mantıksal ifadeler ile kodu bozmaktır. Aslında bizim yazdıklarımız sistem tarafından çalıştırıldığı için sistemin bunda bir suçu yok, suç tamamen komutu yazan da. Yani sistem işini yapıyor çarklar dönüyor arasında gelen giden veriler işleniyor. Gelen giden veriler zararlı mı değil mi diye sorgulamak- onun görevi değil onun görevi söyleneni yapmak kod veya komutları çalıştırmak. Peki and or xor gibi mantıksal ifadelerle komut yapısı nasıl bozulur?

SELECT * FROM table WHERE column='0'  çalışan bir komut

SELECT * FROM table WHERE column='0'  and 1=2 mantık hatası olan komut.

Mantık hatalarında true( yani olumlu) cevap alamayız false( yani olumsuz) cevap alırız. Yani 1=2 (bir sayısı ikiye eşit olmadığı için yani 1 sayısı 1 olduğu için) mantık hatası olur ve komut çalışmaz ama bize hata da döndürmez. Biz bu mantıksal ifade ile dönen değerin true mu false mu olduğuna bakarak komutun işleme alınıp çalıştırıldığını veya işleme alınmayıp çalıştırılmadığı anlarız.

True cevap da SELECT * FROM table WHERE column='0'   bu komutun çalıştığı şekilde bir cevap alınır.

False cevap da bunun tersidir yani çalışmayan bir komut vardır. Her iki durumda da yazdığımız and 1=1 veya and 1=2 mantıksal ifadesi çalışıyorsa sonuçlar gözlemlenebilir.  Peki komutların çalıştığını farz ederek devam edelim.

SELECT * FROM table WHERE column='0'  and 1=1 yaptık tekrar sayfa true döndü.

SELECT * FROM table WHERE column='0'  and 1=2 yaptık sayfa false döndü, çalışmadı.

Anlıyoruz ki burada bir zafiyet var. Budurumda yapacağım şey zafiyeti sömürmek olacak..

Sayfalar kolonlara bağlıdırlar yani arkada çalışan sql komutları, bulunan tablo içerisinde belli bir kolon ile hareket etmektedir. Kullanicı adı ve  şifre gibi, haber no gibi. Komuta müdahalemizi görmeden önce belirtelim ki; SQL injection burada anlatılamayacak kadar büyük bir zafiyet türüdür. Çeşitleri çoktur, çeşitlerine göre yazılan komutlar da çoktur. Biz temelden gidiyoruz.  Söylediğimiz gibi burada ki makalelerle hiç bir zaman yetinmeyin. SQL injection ile ilgili internet çöplük denebilecek derecesinde fazla makale içermektedir. Hele ki türkçe kaynak da aynı oranda fazladır.

Bazı komutları tanıyalım;

DELETE – sil

UPDATE - güncelle

INSERT – ekle

Örnek komut

Delete From makale WHERE makale_id= 1

Id si 1 olan makaleyi siler.

Update makale SET id = 1 WHERE baslik ="yeni baslik"

Id si 1 olan makalenin başlığını günceller.

Insert into yazi VALUES('1','baslik','icerik');

Yazı tablosuna id si 1 olacak şekilde ekleme yapar.

UNION – bir den fazla tabloyu birleştirerek bütün olarak işlem yapabilmeye olanak sağlar.

ORDER BY – belirtilen veya var olan alanda büyükten küçüğe veya tersi sıralama yapar. ASC ve DESC ekleri vardır ASC küçükten büyüğe DESC büyükten küçüğe sıralama yapar ancak bunlar injection saldırılarında çok kullanılmaz yerine sayılar kullanılır. Order by 1, order by 12 gibi.. Yalnız komut şöyle de olabilir order by 1 DESC, order by 12 ASC ..

CREATE DATABASE – yeni veritabanı oluşturmak için kullanırız

CREATE TABLE – yeni tablo oluşturmak için kullanırız. Not : create table ile bir tablo oluştururken kriter belirtmek isteriz tablo içeriğine veya kolonlara dair. Mesela kullanıcı adında bir kolon oluşturup içereceği verinin karakter bazında büyüklüğünü ayarlayabiliriz varchar(255) gibi

Zararlı bir komut ;

SELECT * FROM table WHERE id=1 komutunun dışarıdan gelen haber.php?id=1 ile çalıştığını varsayalım ve zafiyetin var olduğunu düşünelim.

Şöyle bir girdi yaparsak:

Haber.php?id=1; DROP TABLE kullanicilar

Zafiyet var olan yerde çalışacak bu komut ile kullanıcılar tablosu silinebilir.

Biz biraz daha geliştireceğiz ve veritabanından çeşitli bilgiler elde edeceğiz.

Dediğimiz gibi veritabanları tablolardan oluşur, tablolar kolonlardan ve verilerden oluşurlar. SQL injection da UNION gibi IF gibi komutları sıklıkla kullanılır.. Hele ki zafiyetin var olduğunu bildiğimiz ama kaynak kodda o zafiyetin hangi tablo ile ilişkili çalıştığını bilmediğimiz zamanlarda birden fazla tablo ile çalışmamıza olanak sağlayan UNION komutunu çok fazla kullanırız.

Peki bu zafiyet ile neler yapılabilir?

Veritabanları sömürülür bilgiler elde edinilir (kaba tabirle çalınır) ve daha ilerisi sunucu makine üzerinde dosya okuma çağırma silme ekleme gibi yetkiler koşulunda ve dahilinde çok ileri düzeyde şeyler de yapılabilir. Bu yazıda sunucu da dosya okuma, veri okuma, bu verileri kullanma üzerine çalışacağız. İlerisi düşünülebilir ve önü açıktır.

DVWA > Sql injection sekmelerini takip ederek başlayalım. 

Arayüzden biraz bahsersek; inputtan alınan kullanıcı id sine veritabanın da karşılığı gelen bilgileri gönderiyor.

Veritabanına bakarsak;

Doğru olduğu görüşüne varırız. Şimdi dikkat etmeniz gereken konulardan biri de üstte attığım ek resimde URL bölgesinde alınan veri GET olarak alınıp döndürülüyor. 

http://192.168.21.143/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#

İşlenen form elemanları      URL     de     bellidir. Zafiyeti görelim;

Tek tırnak ile söz dizim hatası alıyoruz kodu bozuyoruz demektir bu. Yani bir zafiyet var olduğu kanısına varıyoruz. Arkada çalışan kaynak kodu görelim. Bunun için View Source butonuna basıyoruz.

Kodlar da veriler GET ile alınıyor ve gördüğümüz gibi SQL komutları çalışıyor. Gelen data da ve giden data da bir filtre yok. Gelen veride tek tırnak ve ya benzeri tehtid oluşturacak komut sayılabilecek ifade var mı yok mu kontrolü yapılmıyor. Direk alınıp işleniyor. Hemen komutlarımızı yazalım;

%' or 0=0 union select null, version() #

Form'a bu komutu yazıyoruz. Burada ilk olarak mantıksal ifade de OR kullanılıyor. Öncesinde ' ile kaynak kodda ki SQL komutlarına son veriliyor yani komut bu hali alıyor:

SELECT first_name, last_name FROM users WHERE user_id = ' %' or 0=0 union select null, version() #

Önce tırnak ile açılan tırnak kapanıyor daha sonra or (veya) ifadesiyle 0=0 eşitlenip komuttan bundan öncekilerin veya or dan sonra geleceklerin işlenmesine olanak sağlıyor yani biz birine emir verince şöyle dememize benziyor;

Sadık kardeşim marketten kola veya süt al.

Burada ki komut yapısında da bu geçerli. Or (veya) ifadesinden sonra gelenler 0=0 a eşitlendiği için işleme alınıyorlar. Burada sektirmememiz gereken bir konu var. Union select ifadesinden sonra farkındaysanız null ile virgül ile ayrılmış versiyon fonksiyonu geliyor yani 2 parametre alıyor. Bunun sebebini açıklarsam buna genel de kolon sayısı 2'dir denir. Kolon sayısını da şöyle belirleyebiliriz.

Union select 1--

Union select 1,2--

Union select 1,2,3--

Union select 1,2,3,4-- şeklinde uzatarak sayfa true dönene kadar sayıları artırıyoruz veya eksiltiyoruz. Bu şekilde kolon sayısını bulduğumuz da ekrana bu sayılardan birkaçı yansır. Bu kolon sayıları illa ki 1,2,3 olmak zorunda değildir. Bunlara sayı denmesinin sebebi belirleyici olmasıdır.

Union select version()--

Union select version(),database()--

Union select version(),database(),load_file('dosya')--

Tarzında da gidilebilir. Yazılan bir komut çalıştığı zaman o çalışan komut üzerine ekran üzerinde input alabilirliğine olanak sağlanmakta. Bu komutları yazmak yerine daha basit ve uğraş gerektirmediğinden sayıları kullanıyoruz. Bu sayıyı Order by ile de bulabilirsiniz. Misal;

?id=1 Order by 1-- yaparsınız sayfa true döner. Ama ekrana yansıtmanız gereken sayıya ihtiyacınız olduğundan bu sayıyı artırarak doğru sayıyı bulmaya çalışırsınız

Order by 10—yapar da hata aldığınız var sayarsak anlarız ki kolon sayısı 10 dan aşağı.

Order by 9--

Order by 8--

Tarzında artıra azalta giderek true dönen sayıda anlarsınız ki yazacağınız inputun çalıştırılacağı düzen bu sayıların arasında. O zamanda union select 1,2,3,4,5,6,7,8—yazar ekrana yansıyan sayılara bakarsınız örnek 2 yansır sizde 2 üzerinden input işlemi sağlar komutu orda çalıştırırsınız.

Union select 1,database(),3,4,5,6,7,8—gibi bir komut da ekrana 2 yansıdığı için 2 yerine ne yazarsak o değer çalıştırılacaktır bizde database() yazarsak bize sitenin veritabanı adını verir.

Fakat bazı toollar da işinize çok yardımcı olacaktır. Bu toollardan biri de sqlmap toolludur. Bu tool penetrasyon testleri için hazırlanmıştır ve bir çok işlemi yapabilme yeteneğine sahiptir.

Sqlmap.org dan indirip çalıştırabilirsiniz. Yalnız python dili ile kodlandığı için python yorumlayıcının altında çalıştırmalısınız.

Evet URL üzerinden %' or 0=0 union select null, version() #  komutunu çalıştırdığımız zaman bize dönen bilgiler şunlar;

Mysql altında çalıştığımız için version() komutunu ile mysql yazılımının versiyon numarasını verdi. Database ismini bulalım.

Database() ile dvwa ismini bulduk. Şimdi SQLMAP aracına geçelim biraz da onu tanıyalım. Kali Linux üzerinde terminal penceresine sqlmap yazalım.

Karşımıza çıkan açıklama da bazı parametreler var

–update yazılımı günceller.

-h basit parametrelerin kullanımını ve açıklamasını gösterir.

-hh gelişmiş parametrelerin kullanımını ve açıklamasını gösterir.

Basit bir kaç parametreyi tanıyalım çünkü işimize yarayacak.

-u  zafiyetin bulunduğu URL i bu parametre ile belirliyoruz

-data  post ile gönderilen parametreleri burada belirtiyoruz

-cookie  eğer zafiyete erişirken bir oturum kullanıyorsak bu oturumun çerezlerini belirtiyoruz.

--dbs veritabanlarını gösterir

--current-db sitenin kullandığı kendi veritabanını belirtir.

--tables tabloları gösterir.

--columns kolonları gösterir.

--os-shell yetkiler dahilinde bir shell script enjekte eder

-D veritabanı

-T tablo ismi

-C kolon adı

--dump belirtilen koşullarda veri çeker.

--sql-shell sql komutları çalıştırabileceğimiz scripte geçer.

 

DVWA oturumu üzerinde uygulamaya geçelim.

--cookie içerisinde dvwa login olduğumuz çerezleri yazıyoruz.

Current Database  : "dvwa" olarak gördük. Dikkat etmemiz gereken başka bir taraf ise Payload kısmı. Bu bilgiye erişirken kullandığı payload ı bize veriyor. 2 kolonu olduğunu söylüyor. Sunucunun Linux Ubuntu 8.04 versiyonu olduğunu söylüyor. Apache 2.2.8, php 5.2.4 versiyonunu kullandığını belirtiyor.

-D parametresin de veritabanının adını belirtiyoruz ve --tables ile o veritabanına ait tabloları listeliyoruz.

Users ve guestbook tabloları var. Users tablosunun kolon yapısını görelim.

Kolon yapısında 6 kolon ismi olduğunu ve içeriklerinin tiplerini görüyoruz. İçeriden user,password seçip çıktıyı görelim.

Kullanıcı adlarını ve md5 ile encrpyt edilmiş şifrelerini görüyoruz. Bu encrypt edilmiş şifreleri online md5 cracker sitelerinde vs kırabilirsiniz. Offline olarak john aracını kullanabilirsiniz. Bakalım google da admin kullanıcısının password'ünün encrpyt'ı nın karşılığı var mı? Yani google bunu bir şekilde indekslemiş mi?

Ön izlemede görüyoruz ki md5 encrpytlı şifre password, bu işlemi cracker sitelerinde kırabilirsiniz. Bu siteler de veritabanların da bu şifrelerin karşılıklarını tutarlar yani encrypt - decrypt karşılığını tutarlar. Şimdi biraz daha farklı şeylere yönlenelim. Mesela sunucu üzerinde okuma yetkimiz olan dosyaları okumaya çalışalım. Bunun birkaç çeşidi var. Birisi load_file() fonksiyonunu kullanmak, diğeri sqlmap parametresi olan –file-read i kullanmak. File-read parametresi, okumak istediğimiz dosyayı local de bir dosyaya kaydeder. Bu dosyayı cat komutuyla dizinini belirtip okuruz. Veya gedit, vim, nano gibi editorlerde açıp okuruz..

Load_file() sql fonksiyonu eğer o kullanıcının belirtilen dosyayı okuma yetkisi varsa okur ve gösterir.

Load_file fonksiyonu ile sonuç alabiliyoruz. Mesela /etc/passwd dosyasını okuyabildik. Bir de file-readparametresini kullanalım.

Dosyayı local olarak kaydetti. Cat komutu ile dosyayı okuduk. Bir de Samba konfigurasyon dosyasına bakalım. Bu dosya /etc/samba/smb.conf dizininde bulunuyor.

--file-read=/etc/samba/smb.conf

Dosyayı çekti bizde cat komutuyla pencereye yazdırdık.

Gördüğünüz gibi birkaç dizin paylaşıma açılmış. Bu tarz umum tarafından okunabilirliği olan dosyaları çekip büyük tehlikeler oluşturabiliyor sql injection..

--users parametresiyle veritabanlarına ait kullanıcı isimlerini görüntüleyebiliyoruz.

--passwords parametresiyle bu kullanıcılara ait encrpyt edilmiş şifreleri görebiliyoruz. Misal olarak örnek verelim.

--users parametresiyle elde edilen sonuç;

Bu şekilde.. 3 adet kayıtlı kullanıcı var bir de şifreleri görelim.

--passwords parametresinin döndürdüğü sonuç;

Şifreleri mevcut değilmiş. Sql injection hakkında yüzlerce sayfa kitap yazılabilir. Sql injection un türleri mevcuttur, bunlar; Blind sql injection, Xpath injection, Mssql injection, Mysql injection, Oracle injection, Union-Based, Error-Based, Time-Based, Boolean-Based, böyle uzar gider.. Hepsini burada anlatmamız imkansız olacağı için çoğu yerde araştırma yapmanızı tavsiye ederim. Ama bu zafiyet türünün az çok mantığını kavradığınızı düşünüyorum.  Sql injectionun elinin nereye kadar uzandığını anlamamız için küçük bir resim paylaşayım. Bu bizi aydınlatır diye düşünüyorum.

Ceza yememek için gişe geçişlerinde ki plaka okuyan kameraları kandırma amaçlı yazılan bir sql komutu :) Aslında kandırma değil bir nevi sistemi devre dışı bırakmak için yazılmış. Komuttan anlaşıldığı gibi plaka kodunu gösterip "ZU 0006',0,0); …. komutu bitiriyor ve en sonunda drop database ile veritabanını komple sildiriyor :) Sistem de bir zafiyet olması halinde bu komutu okuyan kamera sisteminde bu komut çalışıyor ve veritabanıyla birlikte bilgiler komple siliniyor.

Samba nedir?

Kurumlar ve şirketler, ağları içerisinde dosya ve yazıcı paylaşımlarında bulunurlar ve bunu sık sık yaparlar.

Örneğin Nas (network attached storage)  gibi ağ tabanlı depolama sistemleri, Disk, Klasör, Data veya Printer paylaşımları gibi şeyler bu sektörün olmazsa olmazlarıdır diyebiliriz. Bunlar ne için gereklidir kısaca bahsedeyim.

Bir şirketinizin olduğunu düşünün ve bu şirket içerisinde muhasebe, pazarlama, yazılımcılar, grafik tasarımcılar gibi ekipleriniz bulunsun. En basitinden grafikerler yaptıkları çalışmaları bilgisayarlarında veya usb depolama aygıtlarında taşıyabilirler ama bunlar riskli olabilir, neden? Çünkü orada taşınan veriler şahsi olmadığından yani şirketin bizzat verisi/işi olduğundan bu veriler genellikle şirketlerde ki ortak bir depolama alanına toplanır. Çünkü verilerin kaybolması, zarar görmesi veya depolama aygıtının çalınması söz konusu olabilir. Ama buna 2017 yılında, şu geldiğimiz teknoloji de hiç de gerek yoktur. Bunların yerine dediğim gibi ağ ortamında Nas veya o ağ da ki clientların erişebildiği ortak depolama paylaşım alanları veya printer paylaşımları oluşturulur ve veriler burada saklanır/işlenir. Yazıcılardan ortak çıktılar alınır.

Ama şöyle bir gerçekte vardır; Windows makinalar Linux makinalara dosya paylaşımları veya yazıcı paylaşımları gibi hizmetlerde çekirdekten nakıstırlar. Windows işletim sistemleri ile Linux işletim sistemleri arasında ki bağlantıyı sağlayan yazılım kısaca Samba'dır.

Burada sadece Samba mı sorusu gelebilir. Sambadan daha çeşitli yazılımlar vardır tabi ki de..

 Samba yardımı ile şunları yapabiliriz:

-Active Directory – Linux tabanlı doğrulama veya hizmet sağlama.

-Linux dan Windows'a – Windows dan Linux'a dosya ve yazıcı paylaşımları.

-File Server

-Birincil Etki Alan Denletleyicisi *PDC*

-Master Browsing

-Domain Browser

Metasploitable üzerinde hali hazırda Samba yazılımı kurulu ve bu kurulan yazılımda zafiyet barındırıyor (Samba 3.x & 4.x ). İlk olarak metasploitable ip adresimizi \\IP-ADRESS  şeklinde yazarak network bazında klasör paylaşım hizmetini bir görelim.

Biraz önce sqlmap de çektiğimiz /etc/samba/smb.conf dosyasına bir bakarsak;

Gördüğümüz gibi [tmp] ve [opt] kısımlarında bulunan path yani dizin olarak belirtilmiş kısımlar ağ içinde paylaşıma açılmış. Buradan ne tehlike çıkar? Çok tehlike çıkar..

Şöyle düşünün. Sizi hacklemek isteyen bir hacker size trojan veya farklı bir zararlı yazılım yedirmek için türlü türlü yöntemler ve taktikler deniyor. Mailler atıyor, Autorunlar deniyor vs vs.. Küçük bir paylaşım dosyasının içine yerleştirilen sizin de ismini bildiğiniz ve hatta sizin oraya yerleştirdiğiniz bir dosya ile aynı isimde bir zararlı yazılımı enjekte edip orada sizin zararsız olduğunu düşündüğünüz ama arkada sistemi ele geçiren bir yazılımın sizin tarafından açıldığını çalıştırıldığını düşünün.. Tehlike burada göz önüne geldi. Bu işin paylaşım tarafı. Bir de samba hizmetine çalışan yazılım üzerinden kaynaklanan zafiyetler var. Ayrıyeten kullanıcı bilinçsizliğinden ve sysadmin bilgisizliğinden kaynaklanan kişisel odaklı zafiyetler var..

Şimdi metasploit üzerinden sunucu üzerinde yetki sahibi olmaya çalışacağız. Samba yazılımı üzerinde metasploitable da zafiyet var demiştim. Nmap –p- 192.168.21.143 --script vuln –Pn –sCV komutlarını terminalden nmap aracı ile port ve hizmet isimleri versiyonları taraması yaptığımızda bizlere hizmetlerde bulunan ve public olmuş exploitleri veriyor. Msfconsole dan search usermap_Script diye arattığımızda samba 3.x versiyon üzerinde var olan bir zafiyetin exploiti ekrana düşüyor. Metasploitable Samba 3x çalıştırmakta. Bunu kullanarak karşıda yetki sahibi olmaya çalışalım.

Exploite erişim sağlayıp hedefin ip adresini belirtip run komutu ile exploiti çalıştırıyoruz. Gördüğümüz üzere oturum açıldı (session 2). Id komutu ile hangi kullanıcı üzere olduğumuza baktığımızda root yetkisine sahip olduğumuzu görüyoruz. Buraya kadar her şey güzel. Sunucu da root yetkisine sahibiz. Session ı arka planda açık halde kalmasını sağlayıp şifreleri elde etmemiz lazım bunun için ctrl+z ile  oturumu o an bitirmekte olduğumuzu belirtiyoruz bize {y/n) soruyor Y diyip arka plana çekiyoruz. Session –l komutu ile aktif olan oturumları görebiliriz.

Şimdi kullanıcı isimlerinin şifrelerini dump etmemiz gerekiyor bunun için hashdump aracına erişmemiz gerekiyor. Bu yüzden session ı arkaplana çektik.

use post/linux/gather/hashdump

ile araca geçiş yapalım daha sonra session oturum idsini belirterek hangi oturum üzerinde bu aracın çalışacağını belirtelim.

2. oturumda root yetkisine sahip olduğumuz için /Etc/shadow dosyasını rahatlıkla okudu. Ve msf4 dizini altında bir yere kaydetti. Buradan sonra bilindik bir şifre kırma aracı olan john u kullanarak bu şifreleri kıracağız. Bunun için john /root/.msf4/loot/dosyaad.txt şeklinde komut vereceğiz.

Şifrelerimiz çözüldü.  Bu şifrelerle karşı taraf üzerine çeşitli hizmetler üzerinden veya direk rlogin ile erişim sağlayabiliriz artık... Evet bu makalemizin sonuna geldik önümüzdeki makalemizde IRC, MYSQL ve JAVA RMI SERVER üzerine sızma testleri gerçekleştireceğiz.. Kusur veya yanlış söz varsa kusura bakmayın.  Görüşmek üzere..




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.