Hoşgeldin Misafir

SQL Injection Zafiyetleri

bypatnos

DeepWeb
28 Haz 2024
614 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
SQL Injection (SQLi) saldırıları, veritabanı tabanlı uygulamalarda güvenlik açığı yaratmak amacıyla kullanılan en yaygın ve tehlikeli tekniklerden biridir. Bu saldırılar, saldırganların veritabanına zararlı SQL kodu enjekte ederek yetkisiz erişim sağlamasına, veri çalmasına veya sistemleri manipüle etmesine olanak tanır.

SQL Injection Türleri

SQL Injection saldırıları çeşitli şekillerde gerçekleştirilebilir. İşte bazı yaygın türleri:

  1. Error-Based SQL Injection:Bu tür saldırılar, uygulamanın hata mesajlarını kullanarak veritabanı yapısı hakkında bilgi edinmeyi hedefler. Hatalar, saldırganlara veritabanı tabloları ve sütunları hakkında değerli ipuçları sağlar.
  2. Union-Based SQL Injection:Bu teknik, birden fazla SELECT ifadesini birleştirerek veritabanından ek bilgi çekmeyi hedefler. UNION operatörü kullanılarak, saldırganlar yetkisiz veri erişimi sağlayabilir.
  3. Blind SQL Injection:Blind SQLi, uygulamanın hata mesajlarını göstermediği durumlarda kullanılır. Saldırganlar, doğru veya yanlış sorular sorarak veritabanı hakkında bilgi edinirler. İki alt türü vardır:
    • Boolean-Based Blind SQLi: Yanıtın doğru mu yanlış mı olduğunu kontrol ederek bilgi toplama tekniğidir.
    • Time-Based Blind SQLi: Veritabanının yanıt süresini ölçerek bilgi toplama tekniğidir.
  4. Stored (Persistent) SQL Injection:Bu tür saldırılar, zararlı SQL kodunu veritabanına kalıcı olarak yazmayı hedefler. Zararlı kod, daha sonra uygulamanın farklı bölümlerinde çalıştırılarak güvenlik açığı yaratır.

SQL Injection Örnekleri

1. Basit SQL Injection Örneği

Bir uygulama, kullanıcı giriş bilgilerini doğrulamak için aşağıdaki gibi bir SQL sorgusu kullanabilir:
Kod:
SELECT * FROM users WHERE username = 'user' AND password = 'pass';
Saldırgan, kullanıcı adı veya parola alanına aşağıdaki gibi zararlı bir giriş yapabilir:
Kod:
' OR '1'='1
Sonuçta ortaya çıkan SQL sorgusu şöyle olacaktır:
Kod:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Bu sorgu her zaman doğru döner ve saldırganın veritabanına erişim sağlamasına neden olur.

2. Union-Based SQL Injection Örneği

Aşağıdaki gibi bir SQL sorgusu düşünün:
Kod:
SELECT name, email FROM users WHERE id = '1';
Saldırgan, id parametresine aşağıdaki gibi bir giriş yapabilir:
Kod:
1 UNION SELECT username, password FROM admin;
Sonuçta ortaya çıkan SQL sorgusu şöyle olacaktır:
Kod:
SELECT name, email FROM users WHERE id = '1' UNION SELECT username, password FROM admin;
Bu sorgu, admin tablosundaki kullanıcı adları ve parolaları döndürecektir.

SQL Injection'dan Korunma Yöntemleri

SQL Injection saldırılarından korunmak için çeşitli yöntemler bulunmaktadır:

Parametrik Sorgular Kullanma:Parametrik sorgular (prepared statements), SQL sorgularını sabit tutar ve kullanıcı girişlerini ayrı parametreler olarak geçirir. Bu, SQL kodu ile kullanıcı girişlerinin karışmasını önler
.
Kod:
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?");
stmt.setString(1, username);
stmt.setString(2, password);

ORM (Object-Relational Mapping) Kullanma:ORM araçları, veritabanı işlemlerini programlama diline uygun şekilde yönetir ve SQL Injection riskini azaltır.
Girdi Doğrulama ve Temizleme:Kullanıcı girişlerini sıkı bir şekilde doğrulamak ve zararlı karakterlerden arındırmak, SQL Injection riskini azaltır.
En Az Yetki İlkesi:Veritabanı kullanıcılarına sadece ihtiyaç duydukları minimum yetkileri vermek, saldırganların yetkisiz işlemler yapmasını zorlaştırır.
Web Uygulama Güvenlik Duvarı (WAF):WAF, SQL Injection saldırılarını tespit edip engelleyebilen güvenlik araçlarıdır.

Sonuç

SQL Injection, web uygulamalarında ciddi güvenlik açıkları yaratabilir. Bu tür saldırılardan korunmak için doğru tekniklerin kullanılması ve güvenlik önlemlerinin alınması hayati öneme sahiptir. Parametrik sorgular, ORM araçları, girdi doğrulama, en az yetki ilkesi ve WAF kullanımı, SQL Injection saldırılarını önlemede etkili yöntemlerdir.