----------------------------------------------------------------------------- # Konu : Sql Injection Tarih : 19/04/2007 Saat : 04:20 Yazar : Ibrahim Baliç # ----------------------------------------------------------------------------- İçerik : 1.Sql Nedir? 2.Sql Ne İşe Yarar? 3.Sql 'e Genel Bakış 4.Sql Kullanımı (örnek) 5.Sql Injection Atak ----------------------------------------------------------------------------- [1.SQL Nedir?] '''''''''''''' Sql Tüm Veri Tabanlarında Kullanılan Bir Arabirimdir.Anlamı Ingilizce "Structured Query Language" Türkçe "Kontrol Edilebilir Sorgulama Dili"'dir. [2.SQL Ne İşe Yarar?] ''''''''''''''''''''' Sql Var Olan Bir Veri Tabanina Ekleme, Düzenleme, Silme Yapabilir... Veritabani Üzerindeki Haklarınıza Göre Yeni Veritabanları Oluşturabilir Veya Var Olan Bilgiler Üzerinde Oynama Yapabilirsiniz. [3.SQL'e Genel Bakış.] '''''''''''''''''''''' Günümüz Internet'ine İlgi Alaka Okadar Arttıki, Interaktif Bankacilik tan Tutun Online Yemek Siparişi, Hatta Erotik Shoplardan Şişme Kadınlar Bile Spariş Edilir Oldu... Durum Böyle Olunca, Tarihtede Olduğu Gibi Aletlerimizi Ihtiyaclarimiza Göre Üretmek Zorunda Kaldık. Sql'de Bunlardan Biridir... Lafı Fazla Uzatmadan Sql;Bir Veribanı Üzerineki Bir Bilgiyi En Hızlı En Basit Şekilde Yazmak/Silmek/Düzenlemek/Görüntülemek İçin Kullandığımız Bi Arabirimdir. [4.SQL Kullanımı (örnek)] ''''''''''''''''''''''''' Diyelimki Sizim Bir Sitemiz Var,Bu Sitenize Ziyaretcilerin Üye Olması veya Ziyaret Sırasinda Günlük Haberler Okuyabilmesini Istiyorsunuz. Bunların Yapılabilmesi İçin Birtane Veritabanına İhtiyac Duyacağiz.Cünkü Üyelerinizin Şifre Olarak Tanımladıkları Üye Adlarını Biryerde Muhafaza Etmelisinizki Bir Sonraki Ziyaretinde Aynı İsimin Doğruluğunu Kontrol Edebilesiniz... İşte Tam Bu Kısımda sql Devreye Gireck.Eğer Bir Veri Tabanımız Varsa Ve Bizim Bu Veri Tabanı Üzerine Birşeyler Kayıt Edip, Daha Sonra Okumamız Gerekli Ise, Mutlak Sql'e Başvuracağız Demektir.Gelin Şimdi Kısaca Sql ile Nasıl Bir Bilgi Okun ur Göz Atalım... (Burada bir veri tabanınız olduğunu varsayiyorum.(eposta,id,nick,sifre) Kullanıcılar Tablosu: ID | Email | Nick | Sifre ''''''''''''''''''''''''''''''''''''''''' 1 | Khalsa@mail.ru | yoyo | 123456 2 | root@localhost | khalsa| u1tz-z Diye Devam Eden Kayitlarimiz Olduğunu Varsayarsak,Burada 'yoyo' Isımli Kulla nıcısının Email Bilgisi Gerekli Olduğu Zaman Sql İle, Bu Bilgiye Şu Şekilde Çok Basitce Ulaşabiliriz. "SELECT Email From Kullanıcılar WHERE Nick LIKE 'yoyo'" Bu Sorguyu Veritabanimiza Baglanti Kurdugumuz Konnektorle Calistirdimiz Zama n Bize Cikti Olarak, khalsa@mail.ru Verecektir.Bu Ornek Sorgumuzun Daha Anlamlı Acıklaması Su Sekildedir. "Kullanicilar Arasinda Nick'i Yoyo Olanın Eposta Adresini Istiyorum" Bunu Alternatif Seceneklerle Cogalta Biliriz, Mesela "Epostasi root@localhost" Olan Kullanıcı, "Sifresi 123456 Olanin Nicki", "Nicki Yoyo Olanin Sifresi" Gibi... [4.SQL Injection Atak] '''''''''''''''''''''' Sql Injection, Sql Sorgularina Disaridan Mudahale Etmektir. Bizim Veri Tabanimiz Uzerinde Yaptigimiz Sorgulara Ilave Edilenerek, Bizim Sunmak Istedi gimiz Bilginin Disinda Bilgiler Almak, Yapilan Sorgu Eslesimlerini Bozarak Si stem Üzerinde Istelinilen Sekilde Tepkiler Verdirmektir. Sql Injection Ataklar Icin Sorguya Dahil Edilecek Bir Sorgu Örneği Şu Şekildedir. PHP: ============================================================================= open($yol); 7. $sorgu = 8. "SELECT * From Kullanıcılar where nick ='" .$nick."' and sifre ='".$sifre."'"; 9. $kayitlar = $bag->execute($sorgu); 10. if(!$kayitlar->fields->count=="0") { 11. echo "Merhaba Sy. ".$kayitlar["nick"]."
Başarılı bir giriş yaptiniz"; 12. } else { 13. echo "lütfen tekrar deneyin"; 14. } 15. $kayitlar->Close(); 17. $bag->Close(); 18. $kayitlar=null; 19. $bag=null; ?> ============================================================================= Eğer Bu Sekilde Bir Kontrole Yapılmadan Sorguya Dahil Edilen Girdiler Varsa ve Bu Server Üzerindede php.ini Icerisindeki magic_quotes_gpc ve değeri on Değilse Ziyaretcimizin Sql Injection Atağını Uygulamaması İçin Hiç bir Sebeb Yoktur... Buna Uygulamalı Bakmak/Test Etmek İçin Aşağidaki Adrese Gidelim. http://www.turksecuritymaster.com/security/Turkish/Dersler/uygulamalar/sql/atakturleri/injection.ders Buradaki Sayfamız Aracağiliği İle Sql Injection Atak Uygulamak İçin Kullanı cı bilgilerini şu şekilde dolduralim... ------------------------------------ Kullanıcı Adı : yoyo Sifre : bilmem ' or '1= 1 ------------------------------------ Giriş Butonunu Tikladiğimizda, Scriptimizin; 11. Satirdan İtibaren İşlemi Devan Ettirdiğini Göreceksiniz... echo "Merhaba Sy. ".$kayitlar["nick"]."
Başarılı bir giriş yaptiniz"; Şuan İçin Yaptiğimiz Şey Tam Olarak Sql Injection Atak Türünden Scriptteki Sorguyu Yarmaktır.Gelin Biraz Daha İçeriye Girelim: ------------------------------------ Kullanıcı Adı : yoyo Sifre : bilmem ' or '1= 1 ------------------------------------ Şeklinde Doldurduğumuz Kullanıcı Bilgilerinde Neler Oldu ? login Kısmına Yolladiğimiz Değer, Olarak $nick Değişkenine Atandı, Şifre $sifre Değerine Atandı Ve Sorgumuza Dahil Dedildi. Burada Bilgileri Nick Olarak yoyo Sifre Olarak Bilmem ' or '1=1 Yazdiğimiz Zaman Sorgumuzun Ciktisi Şu Şekilde Oldu: SELECT * From Kullanıcılar where nick ='yoyo' and sifre ='bilmem ' or '1=1' Yani Şu Anlama Geldi, " Kullanicilar Arasinda Nicki 'Yoyo' sifresi 'bilmem' veya '1' = '1'.. O adami bana goster " Böyle Olunca Sorgumuza 1=1 Eklemis Oldugumuz icin Geri Dönüş Olarak Doğru Anlamını Getirecek. Sql'de 1=1 Deger i Her zaman Geri Donus Olarak Bir Deger Getirir.Yani Bu Demek Oluyorki "Ismi yoyo Olsun Sifresi Doğru Yanliş yada biri doğru bana bi değer getir." Yani Sorgumuz Doğru Omasada Geri Dönüş(scripte) göre Doğru Değer DOndurdu Ve Ve Php' Kodlarımızdaki Koşul Sadece Geri Donen Değerin var Olup Olmadiği na Yönelik Olduğu İçin Bizi Kabul Etmiş Oldu... Konu Hakkindaki Örnek Database ve Script Icin Bu Adrese Göz Atabilirsiniz: http://www.turksecuritymaster.com/security/Turkish/dersler/uygulamalar/sql/atakturleri/Sqlinjection.rar ------------------------------------------------------------------------------------- Bu Ders Yoyo Tarafindan www.turksecuritymaster.com Kullanıcıları İçin Hazırlanmiştir. ======================== Y0y0 TSM Security Programmer. ========================