SQL ENJEKSİYON SALDIRILARI

 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:
  1. İ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ı
  2. 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
SQL enjeksiyonu öncelikli olarak ilişkisel veritabanlarını hedef alsa da, etkili bir şekilde yararlanmak için veritabanı yönetiminin temel prensiplerini anlamak çok önemlidir.

Manuel SQL Sömürüsü

Savunmasız Girdileri Belirleme
SQL 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
 Saldırganlar bu güvenlik açığını bulmak için sıklıkla Burp Suite gibi araçları veya manuel test tekniklerini kullanırlar  .Kötü Amaçlı Yüklerin Oluşturulması
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:
sql
SELECT id FROM users WHERE username='$username' AND password='$password';
Bir saldırgan aşağıdaki kullanıcı adını ve parolayı girebilir:
  • Kullanıcı adı: admin' OR '1'='1
  • Şifre: anything
Bu sorguyu şu şekilde değiştirir:
sql
SELECT id FROM users WHERE username='admin' OR '1'='1' AND password='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

  1. 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 
  2. 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
  3. Bant Dışı SQL Enjeksiyonu

Manuel ve Otomatik Kod Yürütme

Manuel Kod Çalıştırma
Manuel 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:
    sql
    SELECT * FROM products WHERE name='$searchTerm';
    Bir saldırgan şunları girebilir:
    metin
    laptop' UNION SELECT * FROM users; --
    Bu, tablodaki tüm kayıtları alır   .users
Otomatik Kod Yürütme
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.
      vuruş
      sqlmap -u "http://example.com/page.php?id=1" --dbs
Bu komut hedef uygulamadan veritabanlarının listesini alı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 :
    sql
    SELECT * FROM users; DROP TABLE sensitive_data; --
Bu komut kullanıcı verilerini alır ve aynı anda . adlı tabloyu siler  .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:
sql
INSERT INTO users (username) VALUES ('$username');
Bir saldırgan şunları girebilir:
metin
admin'); DROP TABLE users; --
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:
sql
SELECT * FROM sessions WHERE session_id='$cookie_value';
Bir saldırgan çerezlerini şu şekilde değiştirebilir:
metin
session_id=12345' OR '1'='1'; --
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:
sql
SELECT * FROM logs WHERE user_agent='$user_agent';
Bir saldırgan, hazırlanmış bir Kullanıcı Aracısı başlığıyla bir istek gönderebilir:
metin
User-Agent: Mozilla/5.0'; DROP TABLE logs; --
Bu durum, veritabanına karşı zararlı komutların çalıştırılmasıyla istenmeyen sonuçlara yol açabilir.

Çözüm

SQL enjeksiyonu, günümüzde web uygulamalarındaki en kritik güvenlik açıklarından biri olmaya devam ediyor. Teorisini, türlerini ve hem manuel hem de otomatik istismar tekniklerini anlamak, siber güvenlik uzmanları için olmazsa olmazdır. Saldırganlar, savunmasız girdileri tanıyarak ve etkili yükler oluşturarak, hassas bilgileri çıkarmak veya yetkisiz eylemler gerçekleştirmek için veritabanlarını manipüle edebilirler. Sonuç olarak, bu riskleri azaltmak için parametreli sorgular, saklı prosedürler, kapsamlı girdi doğrulama uygulamaları ve potansiyel güvenlik açıklarını istismar edilmeden önce belirlemek için düzenli güvenlik denetimleri gibi sağlam güvenlik önlemleri uygulanmalıdır.

Yorum Gönder

Daha yeni Daha eski

İletişim Formu