Veri tabanı dediğimiz şey aslında text dosyalarına kaydedilen çeşitli text bilgileridir.  Fakat buradan video ve fotoğraf gibi çeşitli medyaların veri tabanına kaydedilemeyeceği anlaşılmasın. Sonuç olarak video ve resimler de çeşitli sayısal bilgileri içeren Matrix lerden oluşur. SQL(Structured Query Language), veritabanlarına ulaşım ve iletişim için kullanılan standart bir yapıdır ya da bir dizi komut dilidir denilebilir. Bu dil veri tabanı üzerinde ekleme, silme, düzenleme gibi işlemlerin programsal olarak yapılabilmesine olanak sağlar.  Programlar yazılırken ve ya herhangi bir web sayfası geliştirilirken veri tabanı ile ilgili yapılan kodlama hataları ve dikkatsizlikler, bu program ve ya web sayfasına veri tabanı saldırısı yapılmasına olanak sağlar.

shutterstock_170899481

Şöyle ki; SQL veri tabanı işlemleri gerçekleştirirken bir takım kod dizileri kullanılır. Bu kodlar içerisine web sayfanızdaki atıyorum bir anketin sonuçları gömülür ve veri tabanına kaydedilir ve ya artık ne işlem yapmak isterseniz o işi yapan komutla sonuçları düzenlersiniz. SQL Injection dediğimiz şey, bilgisayar korsanının sizin kullanıma açık tablonuza bir takım SQL dizisi girmesiyle oluşur.  Bu tablonun içerisindeki komutlar, sizin programsal olarak yazdığınız SQL komutlarının içerisine gömülür ve veri tabanı yönetim sistemine gerekli işlemin yapılması için gönderilir.  Eğer programda kodlama yaparken çeşitli saldırıları göz ardı etmişseniz Veri tabanı yönetim sistemi sizin yazdığınız kodu değil de tabloya bilgisayar korsanı tarafından girilen kodları okuyacaktır.  Bu sayede korsan veri tabanınız üzerinde her işlemi gerçekleştirir.

Mesela bir örnek verecek olalım. Web sayfanızda ve ya programınızda bir kullanıcı girişinin olduğunu varsayalım. Programcı bu girişteki bilgileri alıp veri tabanına sorgulatmak için şu SQL dizisini kullanır;

Burada programcı sizin yazdığınız kullanıcı ve şifre bilgilerinizi “kullanıcı” ve “şifre” string değerlerine atar ve veri tabanıdaki uyelistesi tablosuna sorgulatmak üzere bu dizi komut ile gönderir.   Eğer SQL’ iyi bilen bir bilgisayar korsanıysanız böyle bir komuta karşı sisteme nasıl giriş yapabileceğinizi bilirsiniz. Şöyle ki; eğer kullanıcı adı ve şifre kısmına şöyle bir şey girerseniz;  ‘ OR ”=’

veri tabanına gönderilen komut şu şekilde olur;

Bu komuta dikkat ederseniz  ”=” yani boş eşittir boş şeklinde bir komut olmuş oldu. Bu durumda veri tabanı yönetim sistemi her kullanıcı için doğru eşleşme yapacaktır yani üye listesindeki ilk kişi ile giriş yapmış olacaksınız.

Bu örneklerden sadece biriydi.  Veri tabanı sunucuları komutlar ile çalışır. Mesela SHUTDOWN komutu sunucuyu kapatmaya yarayan komuttur.  Eğer kullanıcı girişindeki text kutucuğunun herhangi birine şöyle bir şey girerseniz;   ‘; SHUTDOWN WITH NOWAIT ;

bu durumda sql sunucuya gönderilen komut dizisi şöyle olur;

bu durumda sunucu SHUTDOWN WITH NOWAIT komutunu okur ve direk olarak kendisini kapatır.

Bunun yanında bir de ERROR BASED SQL INJECTION ve BLIND SQL INJECTION  saldırıları da mevcuttur.

Error Based SQL Injection örneği şu sitede ingilizce olarak verilmiş incelemenizde fayda var ; http://zerofreak.blogspot.com.tr/2012/02/tutorial-by-zer0freak-zer0freak-sqli.html

Bu saldırı çeşidi ODBC(Open DataBase Connectivity) hatalarını kullanarak sistemde ki tablolar hakkında bazı bilgiler edinmeyi sağlar.  Bu bilgiler elde edildikten sonra sistemde bir çok değişiklik yapılabilir mesela site başka bir siteye yönlendirilebilir. Cross Script dediğimiz şey yani orjinal sayfanın dışında bilgisayar korsanı tarafından yazılan sayfa görüntülenerek bazı gizli bilgilerinizin buraya girilmesi sağlanabilir.

Bir de BLIND SQL INJECTIN var.  Bu yöntem, yapılan işleme karşı veritabanının doğru ve ya yanlış olarak cevap vermesiyle sonuca varmaya çalışır.Bu sayfada BLIND injection ile ilgili bir örnek bulabilirsiniz.

 http://www.ismailsaygili.com.tr/2012/10/mysql-blind-injection-uygulama-giris.html 

shutterstock_198188897