Siber Güvenlik: SQL Injection Temel ve Gelişmiş Teknikler
Samet Karabulut
April 12, 2026
•3 min read
Giriş
Benim deneyimime göre, SQL Injection (SQL Enjeksiyonu) en yaygın ve kritik web uygulaması açıklarından biridir. Siber güvenlik alanında sızma testleri gerçekleştirdiğim süreçte, birçok farklı türde SQL Injection'a rastladım. Bu yazıda, temel SQL Injection kavramından başlayarak, Union-Based, Boolean-Based ve Time-Based Blind SQL Injection tekniklerine kadar detaylı bir şekilde ele alacağım.
SQL Injection, saldırganların veritabanına yetkisiz erişim sağlamalarına veya veritabanında bulunan hassas verilere ulaşmalarına olanak tanıyan bir açıklıktır. Bu tür açıklar genellikle, kullanıcı girişinin yeterli düzeyde doğrulanmadığı veya filtrelenmediği durumlarda ortaya çıkar.
Temel SQL Injection
Temel SQL Injection, en basitdeki SQL Injection türüdür. Burada, saldırganlar kullanıcı girişini manipüle ederek, ek SQL komutları çalıştırabilirler. Örnek olarak, bir web uygulaması aşağıdaki gibi bir sorgu çalıştırıyor olsun:
SELECT * FROM kullanıcılar WHERE kullanıcı_adı = '$kullanıcı_adı' AND şifre = '$şifre'
Eğer kullanıcı adı ve şifre girişi için yeterli güvenlik önlemleri alınmamışsa, bir saldırgan aşağıdaki gibi bir girdi yapabilir:
kullanıcı_adı: ' OR 1=1 --
şifre: herhangi bir şey
Bu girdi, sorgunun her zaman doğru dönmesini sağlar ve saldırganın sisteme yetkisiz erişimine izin verir.
Union-Based SQL Injection
Union-Based SQL Injection, temel SQL Injection'ın bir adım ötesidir. Burada, saldırganlar UNION operatörünü kullanarak, farklı tablolardan veri çekebilirler. Örnek olarak:
SELECT * FROM kullanıcılar WHERE kullanıcı_adı = '$kullanıcı_adı' UNION SELECT * FROM başka_tablo
Saldırganlar, UNION operatörünü kullanarak, başka tablolardan veri çekebilir ve bu verilerle birlikte sistem hakkında daha fazla bilgi edinebilirler.
Boolean-Based SQL Injection
Boolean-Based SQL Injection, saldırganların boolean ifadeleri kullanarak, sistem hakkında bilgi edinmelerine olanak tanıyan bir tekniktir. Örnek olarak:
SELECT * FROM kullanıcılar WHERE kullanıcı_adı = '$kullanıcı_adı' AND şifre = '$şifre' AND 1=1
Saldırganlar, boolean ifadeleri kullanarak, sistem hakkında bilgi edinebilir ve bu bilgileri kullanarak, daha ileri düzeyde saldırılar gerçekleştirebilirler.
Time-Based Blind SQL Injection
Time-Based Blind SQL Injection, saldırganların sistem hakkında bilgi edinmelerine olanak tanıyan, zaman temelli bir tekniktir. Örnek olarak:
SELECT * FROM kullanıcılar WHERE kullanıcı_adı = '$kullanıcı_adı' AND şifre = '$şifre' AND SLEEP(5)
Saldırganlar, zaman temelli ifadeleri kullanarak, sistem hakkında bilgi edinebilir ve bu bilgileri kullanarak, daha ileri düzeyde saldırılar gerçekleştirebilirler.
Çözüm ve Önlem
SQL Injection açıklarını önlemek için, girdi doğrulaması ve filtreleme yapılması çok önemlidir. Ayrıca, parametreli sorguların kullanılması, SQL Injection saldırılarına karşı daha güvenli bir şekilde veri tabanına erişim sağlar.
Özetle, SQL Injection açıkları, web uygulamalarında sıkça karşılaşılan bir sorundur. Temel, Union-Based, Boolean-Based ve Time-Based Blind SQL Injection gibi farklı türlerde SQL Injection açıkları bulunmaktadır. Bu açıkları önlemek için, girdi doğrulaması, filtreleme ve parametreli sorguların kullanılması önemlidir.
Yorumlar
Henüz yorum yok. İlk yorumu sen yap.