SQL Enjeksiyon Saldırıları
SQL Injection (SQLi), web uygulama güvenlik açıklarının en yaygın ve tehlikeli olanlarından biridir.
SQL Teorisi ve Veritabanı Türleri
SQL Nedir?Yapılandırılmış Sorgu Dili (SQL), ilişkisel veritabanlarını yönetmek ve işlemek için kullanılan standartlaştırılmış bir programlama dilidir. SQL, kullanıcıların veri sorgulama, kayıtları güncelleme, yeni girişler ekleme ve mevcut verileri silme gibi çeşitli işlemleri gerçekleştirmesine olanak tanır.Veritabanı Türleri:
- İlişkisel Veritabanları : Bu veritabanları, verileri önceden tanımlanmış ilişkilerle yapılandırılmış tablolarda depolar. Örnekler şunları içerir:
- MySQL
- PostgreSQL
- Microsoft SQL Sunucusu
- Oracle Veritabanı
- NoSQL Veritabanları : Bu veritabanları yapılandırılmamış veriler için tasarlanmıştır ve büyük hacimli çeşitli veri türlerini işleyebilir. Örnekler şunları içerir:
- MongoDB
- Kassandra
- Redis
Manuel SQL Sömürüsü
Savunmasız Girdileri BelirlemeSQL enjeksiyonu güvenlik açıklarından yararlanmanın ilk adımı, veritabanıyla etkileşime giren girdileri belirlemektir. Yaygın hedefler şunlardır:
- Giriş formları
- Arama alanları
- URL parametreleri
Bir kez savunmasız bir girdi belirlendiğinde, saldırganlar orijinal sorguyu manipüle etmek için tasarlanmış kötü amaçlı SQL ifadeleri oluştururlar. Örneğin, basit bir kimlik doğrulama sistemini düşünün:
Bir saldırgan aşağıdaki kullanıcı adını ve parolayı girebilir:
- Kullanıcı adı:
admin' OR '1'='1
- Şifre:
anything
Her zaman doğru olduğundan , sorgu kimlik doğrulamasını atlatarak hassas bilgilere erişime izin verebilir.
'1'='1'
SQL Enjeksiyon Saldırılarının Türleri
- Bant içi SQL Enjeksiyonu
- Hata Tabanlı SQL Enjeksiyonu : Bu teknik, veritabanından yapısı hakkında bilgi ortaya çıkaran bir hata üretmeyi içerir.Örnek: Bir saldırgan şunları gönderebilir:
- Birliğe Dayalı SQL Enjeksiyonu : Bu yöntem, birden fazla SELECT ifadesinden gelen sonuçları tek bir ifadede birleştirir.Örnek: Bir saldırgan teslim olursa
- Kör SQL Enjeksiyonu
- Bu, görünür bir hata mesajı veya döndürülen veri olmadığında meydana gelir. Saldırganlar, uygulama davranışına dayalı olarak bilgi çıkarımı yapmalıdır.Boolean Tabanlı Kör SQL Enjeksiyonu
- Bant Dışı SQL Enjeksiyonu
Manuel ve Otomatik Kod Yürütme
Manuel Kod ÇalıştırmaManuel istismar, belirlenen güvenlik açıklarına dayalı belirli sorgular oluşturmayı içerir. Saldırganlar genellikle bu süreçte yardımcı olması için Burp Suite veya SQLMap gibi araçları kullanır.
- Manuel Sömürü Örneği :
Bir web uygulamasının SQL enjeksiyonuna karşı savunmasız bir arama fonksiyonu olduğunu varsayalım:Bir saldırgan şunları girebilir:Bu, tablodaki tüm kayıtları alır .users
Otomatik araçlar, uygulamaları güvenlik açıkları açısından tarayarak ve manuel müdahaleye gerek kalmadan yükleri yürüterek istismar sürecini hızlandırabilir.
- Örnek Araçlar :
- SQLMap : SQL enjeksiyon kusurlarını tespit etme ve istismar etme sürecini otomatikleştiren açık kaynaklı bir penetrasyon test aracıdır.
- SQLMap : SQL enjeksiyon kusurlarını tespit etme ve istismar etme sürecini otomatikleştiren açık kaynaklı bir penetrasyon test aracıdır.
SQL Enjeksiyonunda Gelişmiş Teknikler
SQL enjeksiyon saldırılarına ilişkin anlayışımızı daha da geliştirmek için, güvenlik açıklarını etkili bir şekilde kullanmak için ek teknikler ve yöntemler keşfedebiliriz.1. Yığınlama Sorguları
Yığınlama sorguları saldırganların tek bir istekte birden fazla sorgu yürütmesine olanak tanır. Bu teknik, özellikle ayrı isteklere ihtiyaç duymadan yönetim görevlerini gerçekleştirmek veya tabloları düşürmek için yararlı olabilir.- Örnek :
sensitive_data
2. İkinci Derece SQL Enjeksiyonu
İkinci derece SQL enjeksiyon saldırılarında, saldırgan hemen yürütülmek yerine veritabanında depolanan kötü amaçlı yükleri enjekte eder. Yük, başka bir sorgu tarafından işlendiğinde daha sonra yürütülür.- Örnek :
Bir uygulamanın kullanıcı girdisini herhangi bir temizleme işlemi yapmadan sakladığını varsayalım:
Bir saldırgan şunları girebilir:
Daha sonra bu kullanıcı adı başka bir sorguda alınıp işlendiğinde zararlı komutlar çalıştırılabilir.
3. SQL Enjeksiyonu için Çerez Kullanımı
Çerezler, SQL enjeksiyon saldırıları gerçekleştirmek için de manipüle edilebilir. Bir uygulama, uygun doğrulama veya temizleme olmadan doğrudan sorgularında çerez değerlerini kullanıyorsa, saldırganlar çerezleri kötü amaçlı yükleri içerecek şekilde değiştirebilir.- Örnek :
Eğer bir web uygulaması aşağıdaki gibi çerez değerleri kullanıyorsa:
Bir saldırgan çerezlerini şu şekilde değiştirebilir:
Bu, oturum doğrulama mantığını manipüle ederek yetkisiz erişime izin verebilir.
4. HTTP Başlığına Dayalı Saldırılar
HTTP başlıkları, bir uygulama başlık değerlerini doğrudan sorgularına işlerse SQL enjeksiyonu için de kullanılabilir. Saldırganlar, kötü amaçlı yükler içeren özel başlıklar oluşturabilir.- Örnek :
Bir uygulama kullanıcı aracısı dizelerini temizlemeden okursa:
Bir saldırgan, hazırlanmış bir Kullanıcı Aracısı başlığıyla bir istek gönderebilir:
Bu durum, veritabanına karşı zararlı komutların çalıştırılmasıyla istenmeyen sonuçlara yol açabilir.