SQL INJECTION
Injection saldırı tekniklerinden birisi olan SQL injection zafiyetinin temelini kullanıcıdan alınan verilerin SQL sorguları içerisinde kullanılması oluşturur.
SQL Injection Nedir?
SQL Injection’u, SQL kodlarının hedef sisteme enejekte edilmesinin ardından sistemin veritabanından istenilen bilgilerin elde edilmesi olarak tanımlayabiliriz.
Geliştirilen bir web uygulaması veritabanı ile bağlantılı olabilir. Telefon rehberinde arama gerçekleştiren uygulama buna basit bir örnektir. Son kullanıcı olarak yapmanız gereken arama yapmanız için size sunulan kutucuğa telefon numarası girmek ve ara butonuna basmaktır. Sizin yazmış olduğunuz telefon numarası ilgili SQL sorgusuna dahil edilerek arama yapılarak elde edilen sonuçlar ekrana yazdırılacaktır. Oluşacak muhtemel SQL sorgusu aşağıda belirtilmiştir.
- select * from rehber where numara=’{SIZDEN_GELEN_TELEFON_NUMARASI}’
Şimdi bir üye arama kutusu olduğunu düşünelim. Bu arama kutusuna yazılan kelime sonrasında oluşan SQL sorgusu aşağıdaki şekildedir. Adısoyadı kolonu “Eymen DEMİR” ile eşleyen tüm (*) kayıtlar getir.
mysql > select * from uyeler where adisoyadi=’Eymen Demir’
Bu üye arama sorgusunu basitçe manipüle edebiliriz. Mantıksal bir eşitlik ifadesi ile birlikte tüm kayıtların gelmesini sağlayabiliriz. Öyle bir ifade yazmalıyız ki her durumda true (doğru) olsun.
Payload: ‘1’ or ‘1’=’1’
mysql > select * from uyeler where adisoyadi=’1’ or ‘1’=’1’
Belirtilen payload ile SQL Injection yapıldığında ortaya çıkan ifade şu şekildedir:
1 olan veya (or) 1=1 ise getir. Adısoyadı 1 olan birisi veritabanında bulunmamaktadır. Ancak veya koşullundan sonra her zaman 1=1 true(doğru) olacağından dolayı tüm kayıtların ekrana getirilmesi sağlanılmaktadır..
Basit şekilde beklenen değer ile SQL sorgusunu manipüle ederek tüm kayıtların getirilmesini sağladık.
SQL Injection Çeşitleri Nelerdir?
- Boolean-based Blind SQL Injection: Ekrana hata mesajının yazdırılmadığı, kör olarak uygulanması gereken SQL Injection tekniğidir.
- Error-based SQL Injection: İsminden de anlaşılacağı üzere hata mesajlarına dayanan SQL enjeksiyon türüdür. “,’#”< gibi karakterlerin kullanılmasıyla ortaya çıkmaktadır.
- UNION Query SQL Injection: Enjeksiyon sırasında kolon sayısının “union” anahtar kelimesi kullanarak birkaç farklı seçimin bir arada yapıldığı enjeksiyon türüdür.
- Time-based blind SQL Injection: Hata mesajı vermeyen, kör olarak gerçekleştirilen bir enjeksiyon türüdür. Hedefte SQL Injection açığı olduğunu tespit etmek için “sleep” fonksiyonu kullanılır.
SQL Injection saldırılarından korunmak için sistemlerde kullanıcıdan alınan girdiler dikkatli bir şekilde kontrol edilmeli ve filtrelenmelidir.