25 Mart 2012 Pazar

Ettercap ile Arp Poisoning

   Bu yıl Bilgisayar Ağları dersi vesilesiyle öğrenmiş olduğum Ettercap programı LAN üzerinde çeşitli ataklar yapmanızı sağlayan özelliklede Man In The Middle atağı için çok uygun bir araçtır. Basit bir grafik arayüz desteği olan ve aynı şekilde konsoldan da işlemlerinizi gerçekleştirebileceğiniz basit bir programdır.  Ettercap Pardus ve Ubuntu depolarında kolaylıkla bulup kurabilirsiniz. Ben Pardus kullandığım için onun üzerinden anlatacağım.
   Ben şimdi de  Arp Zehirlenmesi nedir biraz ondan bahsedeyim. Arp zehirlenmesi aslında Ethernet protokol mimarisinin bir açığıdır. Saldırgan hedef bilgisayarın ARP tablosunu zehirleyerek yani yanlış bilgilerle doldurarak, hedef bilgisayarın göndereceği paketlerin saldırganın istediği adreslere gitmesini sağlar. Kısaca hedef bilgisayara o kadar çok arp isteği gönderir ki karşı taraf yönlendirici olarak saldırganın bilgisayarını görür ve paketleri saldırgana göndermeye başlar. Hedef bilgisayarın arp önbelleğine bakıldığında yönlendirici olarak gözüken Ip'nin(örneğin 127.0.0.1) MAC adresi saldırganın MAC adresi olarak gözükür. Arp zehirlenmesini anlamak için Arp protokolü hakkında biraz bilgiye sahip olunması gerekir.  Şimdi atak zamanı:)

 -Ettercap'i çalıştırıyoruz (Alt+F2 ile açılan pencereye ettercap yazıp kolayca çalıştırılabilir) ve yerel ağa bağlı olan makineleri bulmaya çalışıyoruz.  

 -Şimdi karşımıza gelen pencereden Sniff 'i tıklıyoruz. Burdan Unified sniffing tıklıyoruz bu seçenek kablo üzerinden geçen tüm paketleri snifflememizi sağlıyor ve açılan pencereden bağlı olduğumuz ağı seçiyoruz.
 -Daha sonra Ettercap üzerinden Hosts --> Scan for hosts seçeneğini tıklıyoruz. Şimdi Ettercap ağda bulunan tüm kullanıcılara arp paketi bu pakete cevap veren makinelerin MAC adreslerini ve Ip adreslerini bizim için bulmuş oldu.


 -Şimdi bu kullanıcıları yine Hosts-->Host list 'i seçerek görüntülüyoruz. Şimdi istersek ağa bağlı olan tüm kullanıcılara istersek de sadece istediğimiz kullanıcılara Arp Zehirlenmesi saldırısını uygulayabiliriz.  MITM --> Arp Poisoning seçiyoruz ve karşımıza gelen pencereden Sniff remote connections --> Tamam diyoruz. Daha sonra da Start -->Start sniffing diyoruz.


 -Şimdi Ettercap bizim için ağda bulunana tüm kullanıcıları zehirlemiş oldu. Kurbana bir çok Arp istek/cevap paketi göndererek kurbanın yönlendirici olarak seni kabul etmesini sağladı. Artık saldırganın Arp tablosunda yönlendiricinin Mac adresi yerine senin Mac adresin var. Buna konsoldan arp -a komutu ile de bakılabilir. Şimdi kurbandan yönlendiriciye gidecek olan tüm paketler sana gelmiş oldu. Bu arp istek/cevap paket gönderme işlemine Ettercap sürekli devam eder çünkü eğer paket yoğun paket gönderimine devam etmezse kurban Router 'ın gönderdiği Arp cevabını alır ve paketler tekrar yönlendirici üzerinden akmaya devam eder.
-Şimdi ise View-->Connections diyerek kurbanların bağlantılarını görüntülüyoruz.


 -Bu bağlantıların üzerine çift tıkladığımızda bağlantı hakkında istediğimiz tim bilgilere erişmiş oluyoruz. Msn konuşmaları , kurbanların girdiği siteler vs.  Msn 1863. portu kullandığı için eğer bu porttan gelen bağlantı çift tıklandığında msn konuşmaları açılan pencerede görüntülenir. Atak durdurulmak istendiğinde yine MITM--> Stop mitm attack  diyerek durdurulabilir.

İyi Çalışmalar...




13 Aralık 2011 Salı

Android Apk Dosyasını Sanal Makinede Çalıştırma

Burada anlatacağım işlemleri yapabilmek için sanal ,içerisinde Android işletim sistemi kurulmuş olan bir sanal makienin bilgisayarınızda yüklü olması gerekir. Ben burada sanal makineye dışarıdan bir apk dosyasını nasıl yükleyeceğimizden ve nasıl çalıştıracağımızdan bahsettim.Öncelikle ADB (Android Debug Bridge) ile sanal makinemize bağlantı kurabiliyor olmamız gereklidir. ADB ile sanal makinemize bağlanmak için şu işlemleri yapmalıyız.

-Sanal makineyi açtıktan sonra Ayarlar-->Ağ ı seçtikten sonra eklendi kısmını Bridged Adapter olarak  değiştirip isim olarakta bulunduğumuz ağı seçiyoruz ve  Tamam diyoruz.


-Bunu yaptıktan sonra Başlat diyerek Anroid i çalıştırıyoruz ve Alt+F1 ile Android in konsol moduna geçmesini sağlıyoruz. Konsol açıldıktan sonra konsola netcfg yazarak sanal makinemizin ip adresini öğreniyoruz.Bu ip yi no ederek Alt+F7 ile konsol modundan çıkıyoruz.

-Kendi ev sahibi bilgisayarımızda konsolu açarak bilgisayarımızda  bulunan android sdk sının (bende ki android-sdk-linux_x86 ) içinde bulunan platform-tools dizininin içine gidiyoruz.Bu dizinin içinde adb yi göreceksiniz. Şimdi bu dizinin içinde ./adb connect 192.168.2.12 (sanal makinenizin ip adresi) yazıyoruz ve bunu yaparak sanal makinemiz ile bağlantı kurmuş olduk.

-Şimdi daha önceden oluşturmuş olduğumuz apk dosyasını  platform-tools dizininin içine kopyalıyoruz ve bu apk dosyasını çalıştırmak için yine konsola ./adb install HelloWidget.apk( oluşturduğunuz apk dosyasının adı)  yazıyoruz. Daha önceden çalıştırdığınız bir apk dosyasını tekrar çalıştırıyorsanız install -r  yazmalısınız bu -r parametresi sayesinde daha önceden çalıştırılmış olan apk dosyası uninstall yapılır ve bu yeni apk dosyası çalıştırılır aksi halde eskisi çalışmaya devam eder.

-Şimdi Apk dosyamızı sanal makinemizde Settings-->Applications-->Manage Applications-->Downloaded kısmında bulabiliriz.



Eclipse İle Android Apk Dosyası Oluşturma

Bugün geliştirdiğimiz Android programını herhangi bir Android cihazda çalıştırabilmek için gereken apk dosyasını oluşturma yani yazdığımız programı derleme üzerine yazacağım.

- Eclipsede seçtiğimiz program üzerinde File-->Export diyoruz.




-Açılan pencere üzerinden Export Android Applicacion a tıklıyoruz.



-Bu pencerede apk sını oluşturmak istediğimiz projemizi seçiyoruz.


- Projemizi seçtikten sonra bir keystore oluşturabilmemiz için bir pencere açılıyor.Cerate New Keystore u tıkladıktan sonra  keystore için bir dosya yolu ve bir parola belirliyoruz.Next diyerek devam ediyoruz.



-Bu pencerede key oluşturabilmek için gerekli bilgileri giriyoruz.  Bu yazıcaklarınızı kendiniz belirleyebilirsiniz fakat ülke kodu ve Validity degeri aynı kalsın.Bu bilgileri yazdıktan sonra yine Next diyoruz.




-Son olarakta oluşturacağımız apk dosyası için bir  dosya yolu belirleyip Finish diyoruz.


Şimdi bu apk dosyasını bir android cihazında çalıştırabiliriz. Bu çalıştırmayla ilgili olarak hangi cihazda çalıştırdığımıza göre değişiklik gösterebiliyor ben bir sonraki yazımda apk dosyasını android sanal makinede nasıl çalıştırılacağından bahsedeceğim.







12 Aralık 2011 Pazartesi

Eclipse'e Android SDK Plugin Yükleme

Bir süredir Android ile ilgili çalışmalara başladığım için bundan sonra bir süre Android ile ilgili yazılar yazacağım. Bugün başlangıç olarak  Eclipse'e android sdk'sının nasıl kurulacağından bahsedeceğim.Android Sdk'sı Android uygulamaları geliştirmek için gerekli tüm kütüphaneleri içeren bir eklentidir.
Eclipse'in zaten bilgisayarınızda kurulu olduğunu düşünerek  o kısıma girmeyeceğim. Öncelikle Android sdk'sını buradan indirebilirsiniz: http://developer.android.com/sdk/index.html
Kullanacağınız Sdk'yı indirdikten sonra Eclipse'in  menu kısmında bulunan Help menüsünden Check for Updates kısmını tıklayıp Eclipse'i güncelleyelim.Ben Eclipse'imi Indigo sürümüne güncelleştirip sdk kurulumunu gerçekleştirdim. Güncelleştirmeyi yaptıktan sonra sırasıyla;
 Eclipse -->Help-->Install New Software i tıklıyoruz





Burada Add kısmına tıklayarak açılan pencereye location olarak https://dl-ssl.google.com/android/eclipse bu adresi kopyalayıp, isim kısmına belirlediğimiz bir ismi yazarak  tamam diyoruz. Alttaki pencerede adresin alt kısmında beliren Developer Tools kısmını seçtikten sonra Finish diyoruz.Eğer yükleme işlemi başarılı bir şekilde tamamlanırsa Eclipse kendiliğinden restart yapacaktır yada siz kendiniz de restart yapabilirsiniz.      
Bunları yaptıktan sonra şimdi sıra  indirmiş olduğumuz sdk yı Eclipse'e tanıtmaya geldi. Eclipse-->Window-->References i tıkladıktan sonra gelen pencereden Android'i seçerek sdk location bölümüne indirmiş olduğumuz sdk yı gösteriyoruz. Sdk Targets kısmında ise yükleyeceğimiz Android versiyonunu seçerek Tamam diyoruz. Sonra yine Eclipse-->Windows-->Android SDK and ADV Manager'ı seçiyoruz.Açılan pencerenin solundan Available Packages'ı tıkladığımızda sağ kısımda açılan tüm paketleri seçerek Install Selected diyoruz. Bu işlem biraz uzun sürebilir. Şimdi android sdk sını kullanabiliriz.Sanal cihaz oluşturmak içinse yine Eclipse-->Window-->Android SDK and AVD Manager'ı tıklıyoruz. Açılan pencerenin  sol kısmından Virtual devices seçtikten sonra sağ kısımda ki New'e tıklıyoruz. Sanal aygıta bir isim yazdıktan sonra Target kısmından kullandığımız Android sürümünü seçiyoruz ve Create AVD diyoruz.

Bu işlemi de gerçekleştirdikten sonra ,artık Android projeleri oluşturabilecek  ve bunları android emülatöründe çalıştırabileceksiniz. 









19 Temmuz 2011 Salı

Konsol Bölümlerini Kapatma

Bugün daha önce yaptığım konsol bölümlendirmelerini  kapatma işini tamamladım.Bu iş basit gibi gözüksede beni çok oyaladı , çünkü iç içe bir çok splitter yerleştirildiğinden kapatacağımız splitterın parentını alma ve bu parent üzerinden çeşitli kontroller yapılması gerekiyordu. Neyse ki bugün tamamlandı.

Bölümleri kapatma işini rekursif olarak yapmam gerektiğini biliyordum fakat bunu tek bir metotla halledemedim, çünkü nedenini bilmediğim bir şekilde shortcut içinde çağrılan fonksiyona parametre gönderildiği zaman shortcut düzgün çalışmadı. Bende bunu iki farklı fonksiyon tanımlayarak hallettim. Tanımladığım ilk fonksiyonda seçilen widgetın parentını alarak splittera ulaştım ve termwidget nesnesini deleteLater() metodunu kullanarak sildim. Sonrasında seçilen splitterı rekursif olarak çağıracağım fonksiyona parametre olarak gönderdim.


def yokedici(self):
        secilenWidget=self.focusWidget().parent()
        secilenSplitter=secilenWidget.parent()
        secilenWidget.deleteLater()
        self.rekursiveDelete(secilenSplitter)

 Rekursif fonksiyonun içinde öncelikle bu splitterın mainwindowa yerleştirilen ilk widget olup olmadığını kontrol ettim ve eğer bu splitter ilk splitter ise splitterı silmeden içine yeni bir termwidget nesnesi oluşturarak fonksiyondan çıktım. Fakat eğer splitter ilk splitter değilse gelen splitterın parentını aldım ve bu splitterı sildim.
Elde ettiğim parent splitterın içinde kaç tane splitter olduğu kontrolunu yaptıktan sonra eğer başka splitter yoksa parent splitterı rekursif fonksiyona parametre olarak gönderdim. Eğer parentın sileceğimiz splitterdan başka splitterı varsa parent splitter içindeki sonraki çocuk splittera fareyi odaklayarak  fonksiyondan çıktım.


parent=gelenSplitter.parent()
            gelenSplitter.deleteLater()
            if(parent.count()==1):
                self.rekursiveDelete(parent)
            print "splitter siliniyor"
            parent.focusPreviousChild()
Bu aşamada cink konsolu ile ilgili yapılacak sağ tıklama ve konsolun f12 ile açılması işleri kaldı. Bu işlerinde  kısa zamanda tamamlanacağını düşünüyorum.

Cink Konsolunu Bölümlendirme

Bir süre önce başladığımız cink projesinde almış olduğum konu konsolu yakuakedeki gibi bölümlendirebilmekti. Stajın ilk iki haftası boyunca bu konuyla ilgilendim. İlk haftanın sonunda bölümlendirmenin nasıl yapılacağını kavramıştım,sadece bunu cink'in kodlarına aktarmak kalmıştı. PyQt ile geliştirmekte olduğumuzdan Qt'nin QSplitter sınıfını kullandım. QSplitter tam olarak içine istediğiniz gibi widget ve splitter yerleştirebileceğiniz bir widgettır . İlk olarak QMainWindow dan bir nesne oluşturdum ve bu nesneden bir splitter yarattım,bu splittere mainwindoun içine yerleştirdikten sonra splitterda bir değişiklik yapmadan içine bir QTermWidget nesnesi oluşturarak yerleştirdim. Bölümlendirme yatay ve dikey olacağından bende Horizontal ve Vertical olarak iki ayrı metot tanımladım ve bu metotlara erişimi QShortcut ile gerçekleştirdim. Bu shortcutları kodda mainin içinde yazdım.


shortcut = QShortcut("Ctrl+Shift+a",w,w.Horizontal)
shortcut = QShortcut("Ctrl+Shift+g",w,w.Vertical)


Daha sonrasında Vertical ve Horizontal metotlarının içine bölümlendirmeyi yapabilmek için birbirine çok benzer kodlar yazdım. Bu iki metodun tek farkı yönlendirme yapma kısmıydı yani :

selectedSplitter.setOrientation(Qt.Qt.Horizontal)

Bu kısım splittera ,bu splitterdan oluşturduğumuz nesneleri nasıl yerleştireceğini söylüyor. Başlangıçta splitterın içine yerleştirdiğim termwidget nesnesinin bu metotlarda kapatmam gerekti, bu şekilde oluşturduğum splittera yönlendirme yapabildim. Termwidget nesnesinin splitterdan kaldırdıktan sonra bu splitterdan iki tane splitter oluşturdum : splitter1=Qt.QSplitter(selectedSplitter)
 Bu splitterları oluşturduktan sonra başlangıctaki splittera yatay/dikey yönlendirme yaptım ve splitter içine yatar/dikey olarak yerleşen splitterların birinin içine daha önceden gizlemiş olduğum splitterı diğerine de yeni bir termwidget nesnesi oluşturarak yerleştirdim.


selectedWidget.setParent(splitter1)  yazdıktan sonra birde bu widgetı gösterebilmek için selectedWidget.show() satırını ekledim.


Bu şekilde her seferinde seçmiş olduğum termwidget nesnesini focusWidget() metodu ile alıp , bu nesnenin parent'ını alarak seçilen splittera ulaşmış oldum ve seçilen splitterdan  yatay/dikey olarak yönlendirme yaptıktan sonra iki tane splitter oluşturdum ve bu splitterların içine önceden focuswidget ile aldığım widget nesnesini ve yeni oluşturduğum widget nesnesini yerleştirerek konsolu yatay ve dikey olarak bölümlendirmeyi sağlamış oldum.
Konsolu bölümlendirdikten sonra şimdi ise bu bölümleri tekrar kapatma işi ile uğraşıyorum. Kapatmayı da tamamladıktan sonra o konuyla ilgili de açıklama yazacağım.

Anlatmış olduğum işin kodlarını incelemek isterseniz kodlara buradan bakabilirsiniz: http://svn.comu.edu.tr/websvn/filedetails.php?repname=Cink&path=%2Fproje%2Fcink.py