-----------------------------------------------------------------------------
#
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:
=============================================================================
1. $yol = "DRIVER={Microsoft Access Driver (*.mdb)};
2. DBQ=".realpath("sqlinjection.mdb");
3. $nikc = $_POST["nick"];
4. $sifre = $_POST["sifre"];
5. $bag = new COM("ADODB.Connection");
6. $bag->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.
========================