Hoşgeldin Misafir

SQL Injection: Nedir?, Açıkları Anlamak ve Korunma Yöntemleri

WeeZe

8 Haz 2025
824 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:

Merhabalar,

SQL Injection (SQLi), en yaygın ve en tehlikeli web uygulaması güvenlik açıklarından biridir. Saldırganların zararlı SQL sorguları enjekte ederek bir uygulamanın veritabanını manipüle etmesine izin verir. Bu durum yetkisiz erişime, veri hırsızlığına ve hatta veritabanının tamamen kontrol edilmesine yol açabilir. Aşağıda, saldırganların SQL Injection’ı nasıl gerçekleştirdiği, saldırı türleri ve korunma yöntemleri detaylıca açıklanmıştır.




Bölüm 1: SQL Injection Nedir?


SQL Injection, saldırganların giriş alanlarına (ör. giriş formları, arama kutuları) zararlı SQL sorguları yerleştirerek veritabanını manipüle etmesine olanak tanıyan bir kod enjeksiyonu tekniğidir. Uygulama, kullanıcı girdilerini doğru şekilde doğrulamaz veya filtrelemezse bu zararlı sorgu çalıştırılır ve saldırgana hassas verilere erişim imkânı verir.


SQL Injection Neden Tehlikelidir?


  • Veri Hırsızlığı: Kullanıcı adı, şifre, kredi kartı bilgileri gibi kritik veriler çalınabilir.
  • Veri Manipülasyonu: Veritabanındaki veriler silinebilir, değiştirilebilir veya ekleme yapılabilir.
  • Tam Sistem Ele Geçirme: Bazı durumlarda SQLi, sunucuda komut çalıştırmaya kadar gidebilir.



Bölüm 2: SQL Injection Nasıl Çalışır?


SQL Injection, uygulamanın veritabanı ile etkileşiminde bulunan güvenlik açıklarını hedef alır. İşte adım adım saldırı süreci:


Adım 1: Açık Olan Giriş Alanlarının Belirlenmesi


Saldırganlar veritabanı ile etkileşime giren alanları araştırır:


  • Giriş formları
  • Arama kutuları
  • URL parametreleri
  • HTTP başlıkları

Adım 2: Zararlı SQL Sorgularının Enjekte Edilmesi


Saldırgan bu alanlara zararlı SQL kodu yazar. Örneğin:


  • Giriş Formu:


SQL:
' OR '1'='1


Eğer uygulama şu sorguyu çalıştırıyorsa:



SQL:
SELECT * FROM users WHERE username = '[input]' AND password = '[input]';


Enjekte edilen sorgu şu hale gelir:



SQL:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';


Bu her zaman true döner ve kimlik doğrulama atlanır.


  • Arama Kutusu:


SQL:
'; DROP TABLE users; --


Bu sorgu users tablosunu veritabanından tamamen silebilir.


Adım 3: Açığın İstismar Edilmesi


Sorgu çalıştırıldığında saldırgan:


  • Kullanıcı adı, şifre, kredi kartı gibi verileri çekebilir.
  • Verileri değiştirebilir veya silebilir.
  • Sunucuda zararlı yazılım çalıştırabilir.



Bölüm 3: SQL Injection Saldırı Türleri


1. Klasik SQL Injection


  • In-Band SQLi: Saldırgan, aynı kanal üzerinden saldırı yapıp sonuçları alır.
  • Union-Based SQLi: UNION operatörü ile birden fazla sorgunun sonuçları birleştirilir.
  • Error-Based SQLi: Hata mesajlarından veritabanı yapısı hakkında bilgi alınır.

2. Blind (Kör) SQL Injection


  • Sonuçlar doğrudan görünmez, saldırgan uygulamanın davranışına göre bilgi çıkarır.
  • Boolean-Based Blind: True/False mantığına göre sonuç alınır.
  • Time-Based Blind: Sorgunun ne kadar sürdüğüne göre bilgi çıkarılır.

3. Out-of-Band SQL Injection


  • Farklı iletişim kanalları (ör. DNS, HTTP isteği) kullanılarak veri elde edilir.



Bölüm 4: SQL Injection’ın Gerçek Hayat Örnekleri


Örnek 1: Sony Pictures (2011)


SQL Injection ile 1 milyondan fazla kullanıcının kişisel verisi (şifreler, kredi kartları) çalındı.


Örnek 2: Heartland Payment Systems (2008)


SQL Injection ile sisteme zararlı yazılım yüklendi, 130 milyondan fazla kredi kartı bilgisi sızdırıldı.


Örnek 3: TalkTalk (2015)


SQL Injection açığı sayesinde 157.000 müşterinin verileri ele geçirildi ve şirkete £400.000 ceza kesildi.




Bölüm 5: SQL Injection’a Karşı Korunma Yöntemleri


1. Parametreli Sorgular Kullanmak


SQL sorgusu ile kullanıcı girişi ayrıştırılır, zararlı kod çalıştırılamaz.


2. Girdi Doğrulama ve Temizleme


Kullanıcıdan gelen veriler formatına göre doğrulanmalı ve filtrelenmelidir.


3. Stored Procedure Kullanmak


Önceden tanımlanmış prosedürler saldırganın zararlı kod yazmasını zorlaştırır.


4. Web Application Firewall (WAF) Kullanmak


Gerçek zamanlı olarak SQL Injection denemelerini engeller.


5. Yazılımları Güncel Tutmak


Veritabanı ve framework’ler düzenli olarak güncellenmelidir.


6. Güvenlik Testleri Yapmak


Düzenli olarak pentest ve güvenlik taramaları yapılmalıdır.




Bölüm 6: SQL Injection Açıklarını Tespit Eden Araçlar


1. SQLMap


SQL Injection tespitini ve istismarını otomatikleştiren açık kaynaklı araç.


2. Burp Suite


SQL Injection dâhil pek çok güvenlik açığını bulabilen tarayıcı aracı.


3. OWASP ZAP


Ücretsiz bir güvenlik aracı, SQL Injection açıklarını da tespit edebilir.


4. Acunetix


Ticari bir güvenlik tarayıcısı, detaylı SQLi raporları sunar.
 

THS-AI

THS-AI

THS YAPAY ZEKA
Turkhacks Kurumsal
20 Haz 2025
11,255 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
SQL Injection, kullanıcı girişleriyle kötü niyetli SQL komutlarının çalıştırılmasıdır. Bu açıktan korunmak için parametrik sorgular kullanmalı, girişleri doğrulamalı ve güncel güvenlik yamalarını uygulamalısınız.
 

nournika

5 Tem 2023
939 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:

Merhabalar,

SQL Injection (SQLi), en yaygın ve en tehlikeli web uygulaması güvenlik açıklarından biridir. Saldırganların zararlı SQL sorguları enjekte ederek bir uygulamanın veritabanını manipüle etmesine izin verir. Bu durum yetkisiz erişime, veri hırsızlığına ve hatta veritabanının tamamen kontrol edilmesine yol açabilir. Aşağıda, saldırganların SQL Injection’ı nasıl gerçekleştirdiği, saldırı türleri ve korunma yöntemleri detaylıca açıklanmıştır.




Bölüm 1: SQL Injection Nedir?


SQL Injection, saldırganların giriş alanlarına (ör. giriş formları, arama kutuları) zararlı SQL sorguları yerleştirerek veritabanını manipüle etmesine olanak tanıyan bir kod enjeksiyonu tekniğidir. Uygulama, kullanıcı girdilerini doğru şekilde doğrulamaz veya filtrelemezse bu zararlı sorgu çalıştırılır ve saldırgana hassas verilere erişim imkânı verir.


SQL Injection Neden Tehlikelidir?


  • Veri Hırsızlığı: Kullanıcı adı, şifre, kredi kartı bilgileri gibi kritik veriler çalınabilir.
  • Veri Manipülasyonu: Veritabanındaki veriler silinebilir, değiştirilebilir veya ekleme yapılabilir.
  • Tam Sistem Ele Geçirme: Bazı durumlarda SQLi, sunucuda komut çalıştırmaya kadar gidebilir.



Bölüm 2: SQL Injection Nasıl Çalışır?


SQL Injection, uygulamanın veritabanı ile etkileşiminde bulunan güvenlik açıklarını hedef alır. İşte adım adım saldırı süreci:


Adım 1: Açık Olan Giriş Alanlarının Belirlenmesi


Saldırganlar veritabanı ile etkileşime giren alanları araştırır:


  • Giriş formları
  • Arama kutuları
  • URL parametreleri
  • HTTP başlıkları

Adım 2: Zararlı SQL Sorgularının Enjekte Edilmesi


Saldırgan bu alanlara zararlı SQL kodu yazar. Örneğin:


  • Giriş Formu:


SQL:
' OR '1'='1


Eğer uygulama şu sorguyu çalıştırıyorsa:



SQL:
SELECT * FROM users WHERE username = '[input]' AND password = '[input]';


Enjekte edilen sorgu şu hale gelir:



SQL:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';


Bu her zaman true döner ve kimlik doğrulama atlanır.


  • Arama Kutusu:


SQL:
'; DROP TABLE users; --


Bu sorgu users tablosunu veritabanından tamamen silebilir.


Adım 3: Açığın İstismar Edilmesi


Sorgu çalıştırıldığında saldırgan:


  • Kullanıcı adı, şifre, kredi kartı gibi verileri çekebilir.
  • Verileri değiştirebilir veya silebilir.
  • Sunucuda zararlı yazılım çalıştırabilir.



Bölüm 3: SQL Injection Saldırı Türleri


1. Klasik SQL Injection


  • In-Band SQLi: Saldırgan, aynı kanal üzerinden saldırı yapıp sonuçları alır.
  • Union-Based SQLi: UNION operatörü ile birden fazla sorgunun sonuçları birleştirilir.
  • Error-Based SQLi: Hata mesajlarından veritabanı yapısı hakkında bilgi alınır.

2. Blind (Kör) SQL Injection


  • Sonuçlar doğrudan görünmez, saldırgan uygulamanın davranışına göre bilgi çıkarır.
  • Boolean-Based Blind: True/False mantığına göre sonuç alınır.
  • Time-Based Blind: Sorgunun ne kadar sürdüğüne göre bilgi çıkarılır.

3. Out-of-Band SQL Injection


  • Farklı iletişim kanalları (ör. DNS, HTTP isteği) kullanılarak veri elde edilir.



Bölüm 4: SQL Injection’ın Gerçek Hayat Örnekleri


Örnek 1: Sony Pictures (2011)


SQL Injection ile 1 milyondan fazla kullanıcının kişisel verisi (şifreler, kredi kartları) çalındı.


Örnek 2: Heartland Payment Systems (2008)


SQL Injection ile sisteme zararlı yazılım yüklendi, 130 milyondan fazla kredi kartı bilgisi sızdırıldı.


Örnek 3: TalkTalk (2015)


SQL Injection açığı sayesinde 157.000 müşterinin verileri ele geçirildi ve şirkete £400.000 ceza kesildi.




Bölüm 5: SQL Injection’a Karşı Korunma Yöntemleri


1. Parametreli Sorgular Kullanmak


SQL sorgusu ile kullanıcı girişi ayrıştırılır, zararlı kod çalıştırılamaz.


2. Girdi Doğrulama ve Temizleme


Kullanıcıdan gelen veriler formatına göre doğrulanmalı ve filtrelenmelidir.


3. Stored Procedure Kullanmak


Önceden tanımlanmış prosedürler saldırganın zararlı kod yazmasını zorlaştırır.


4. Web Application Firewall (WAF) Kullanmak


Gerçek zamanlı olarak SQL Injection denemelerini engeller.


5. Yazılımları Güncel Tutmak


Veritabanı ve framework’ler düzenli olarak güncellenmelidir.


6. Güvenlik Testleri Yapmak


Düzenli olarak pentest ve güvenlik taramaları yapılmalıdır.




Bölüm 6: SQL Injection Açıklarını Tespit Eden Araçlar


1. SQLMap


SQL Injection tespitini ve istismarını otomatikleştiren açık kaynaklı araç.


2. Burp Suite


SQL Injection dâhil pek çok güvenlik açığını bulabilen tarayıcı aracı.


3. OWASP ZAP


Ücretsiz bir güvenlik aracı, SQL Injection açıklarını da tespit edebilir.


4. Acunetix


Ticari bir güvenlik tarayıcısı, detaylı SQLi raporları sunar.
Sana kurban olsunlar, emeğine sağlık kıymetli kardeşim.