Kali Linux Kullanarak Web Uygulamalarında Sql Enjeksiyonu Nasıl Test Edilir?

Kali Linux Kullanarak Web Uygulamalarında Sql Enjeksiyonu Nasıl Test Edilir?
Kali Linux Kullanarak Web Uygulamalarında Sql Enjeksiyonu Nasıl Test Edilir?

Kali Linux Kullanarak Web Uygulamalarında SQL Enjeksiyonu Nasıl Test Edilir?

Modern web uygulamalarının güvenliğini sağlamak, siber güvenlik dünyasında en kritik önceliklerden biridir. Web uygulamalarında SQL enjeksiyonu (SQLi) testi, veritabanı yönetim sistemlerine yönelik en yaygın ve tehlikeli saldırı vektörlerinden birini anlamak ve önlemek için temel bir süreçtir. Kali Linux, siber güvenlik uzmanları ve etik hackerlar için bu tür zafiyetleri tespit etmek amacıyla tasarlanmış kapsamlı araç setlerini bünyesinde barındıran endüstri standardı bir işletim sistemidir.

Bu rehberde, Kali Linux üzerinde yer alan araçları kullanarak web uygulamalarınızın SQL enjeksiyonuna karşı ne kadar dirençli olduğunu nasıl test edebileceğinizi adım adım inceleyeceğiz. SQL enjeksiyonu, bir saldırganın uygulama tarafından işlenen SQL sorgularına kötü niyetli kodlar ekleyerek veritabanı üzerinde yetkisiz işlemler gerçekleştirmesine olanak tanıyan bir zafiyet türüdür. Bu süreci profesyonel bir etik hacker disipliniyle yönetmek, sistemlerinizi güvence altına almanız için hayati önem taşır.

Önemli Uyarı: Bu rehberdeki bilgiler yalnızca eğitim ve etik güvenlik testleri amacıyla hazırlanmıştır. İzin almadığınız sistemler üzerinde herhangi bir test veya müdahale gerçekleştirmek yasal sorumluluk doğurur. Sadece kendi sahip olduğunuz veya test iznine sahip olduğunuz sistemler üzerinde çalışın.

SQL Enjeksiyonu Testine Hazırlık ve Ortam Kurulumu

Test sürecine başlamadan önce, Kali Linux ortamınızın güncel olduğundan ve gerekli ağ yapılandırmasının yapıldığından emin olmalısınız. SQL enjeksiyonu testleri, hedef uygulamanın yapısını anlamayı gerektiren kontrollü bir süreçtir. Doğru araçları seçmek ve hedefi doğru analiz etmek, testin başarısını doğrudan etkiler.

Kali Linux Güncelleme ve Araç Kontrolü

Kali Linux üzerinde tüm paketlerin güncel olması, araçların en yeni zafiyet tanımlarıyla çalışmasını sağlar. Terminali açarak aşağıdaki komutları kullanarak sisteminizi güncel tutun:

  1. sudo apt update
  2. sudo apt full-upgrade -y

SQL enjeksiyonu testlerinde en çok kullanılan araçlar arasında SQLmap, Burp Suite ve OWASP ZAP bulunmaktadır. Bu araçların sisteminizde kurulu olduğundan emin olun. Özellikle SQLmap, otomatize edilmiş SQLi tespiti ve istismarı için vazgeçilmez bir araçtır.

Hedef Uygulama Belirleme ve Etik Sınırlar

Test edeceğiniz web uygulamasının kapsamını belirlemek, "Scope" (kapsam) dışına çıkmamak adına kritik bir adımdır. Teste başlamadan önce şu soruları yanıtlamalısınız: Hangi URL'ler test edilecek? Hangi veritabanı türü kullanılıyor? İzinleriniz tam mı? Bu sınırları belirlemek, test sırasında yaşanabilecek veri kaybı veya sistem kesintisi risklerini minimize eder.

Web Uygulamalarında SQL Enjeksiyonu Zafiyeti Nasıl Tespit Edilir?

Zafiyet tespiti, uygulamanın kullanıcı girdilerini nasıl işlediğini analiz etmeyi gerektirir. SQL enjeksiyonu genellikle form alanları, URL parametreleri veya HTTP başlıkları üzerinden gerçekleşir. Uygulamanın veritabanı ile etkileşime girdiği her nokta, potansiyel bir saldırı yüzeyidir.

Manuel Test Teknikleri: Hata Mesajlarını Gözlemleme

Manuel testler, uygulamanın davranışını anlamak için en iyi yöntemdir. Bir giriş alanına tek tırnak (') karakteri girerek uygulamanın bir SQL hatası verip vermediğini kontrol edebilirsiniz. Eğer uygulama bir veritabanı hatası döndürüyorsa, bu durum uygulamanın kullanıcı girdisini doğrudan sorguya dahil ettiğini ve bir SQL enjeksiyonu zafiyetine sahip olabileceğini gösterir.

Otomatik Tarama Araçları ile Zafiyet Taraması

Büyük ölçekli uygulamalarda her alanı manuel test etmek imkansızdır. Bu noktada otomatize araçlar devreye girer. Burp Suite ve OWASP ZAP, web trafiğini izleyerek potansiyel SQLi noktalarını otomatik olarak işaretleyebilir. Bu araçlar, uygulamanın farklı parametrelerine özel "payload" (yük) göndererek uygulamanın verdiği tepkileri analiz eder.

SQLmap Kullanarak Otomatize SQL Enjeksiyonu Testi

SQLmap, SQL enjeksiyonu tespiti ve istismarı konusunda dünyanın en güçlü açık kaynaklı araçlarından biridir. Kali Linux içinde hazır gelen bu araç, karmaşık SQLi süreçlerini otomatize ederek zamandan tasarruf sağlar ve hata payını düşürür.

Basit Bir URL Üzerinde SQLmap Kullanımı

Hedef bir URL üzerinde SQL enjeksiyonu testi yapmak için terminale şu komutu girebilirsiniz:

sqlmap -u "http://hedefsite.com/urun.php?id=1" --dbs

Bu komut, "id" parametresinin SQL enjeksiyonuna açık olup olmadığını kontrol eder ve eğer açıksa veritabanı isimlerini listeler. --dbs parametresi, hedef sistemdeki tüm veritabanlarını çekmek için kullanılır.

İleri Düzey SQLmap Parametreleri

Testlerinizde daha spesifik sonuçlar almak için aşağıdaki parametreleri kullanabilirsiniz:

  • --tables: Belirtilen veritabanındaki tabloları listeler.
  • --columns: Belirtilen tablodaki sütunları listeler.
  • --dump: Veritabanındaki verileri dışa aktarır.
  • --level ve --risk: Testin derinliğini ve saldırı seviyesini ayarlar (yüksek değerler daha fazla test yapar ancak sistem yükünü artırır).
Dikkat: --dump parametresi, veritabanı içeriğini okuduğu için oldukça hassastır. Gerçek bir test ortamında, verilerin gizliliğine ve KVKK/GDPR gibi yasal düzenlemelere her zaman uygun hareket edilmelidir.

SQL Enjeksiyonu Türleri ve Test Metodolojileri

SQL enjeksiyonu tek bir tip değildir. Test sürecinde hangi türle karşılaştığınızı bilmek, savunma stratejisi geliştirmek için önemlidir. Her türün kendine has bir tespit yöntemi vardır.

Error-Based (Hata Tabanlı) SQLi

Bu yöntemde saldırgan, veritabanından gelen hata mesajlarını kullanarak veritabanı yapısı hakkında bilgi toplar. Uygulama, geliştirici modunda veya hataları ekrana yazdıran bir yapıda olduğunda bu zafiyet kolayca tetiklenir.

Blind (Kör) SQLi: Boolean-Based ve Time-Based

Uygulama herhangi bir hata mesajı vermediğinde "Kör SQLi" ile karşı karşıyayız demektir. Boolean-based (Mantıksal tabanlı) testte, uygulamanın verdiği doğru/yanlış tepkilerine göre veri çıkarımı yapılır. Time-based (Zaman tabanlı) testte ise veritabanına "bekle" komutu gönderilir; eğer uygulama cevap vermekte gecikirse, sorgunun çalıştığı doğrulanmış olur.

SQL Enjeksiyonu Test Araçlarının Karşılaştırması

Web uygulaması güvenliği testlerinde kullanılan araçların yetenekleri farklılık gösterir. Aşağıdaki tablo, en yaygın kullanılan araçların temel özelliklerini özetlemektedir.

Araç Adı Ana Kullanım Amacı Otomasyon Seviyesi
SQLmap SQLi tespiti ve istismarı Çok Yüksek
Burp Suite Proxy, manuel test, zafiyet tarama Orta / Yüksek
OWASP ZAP Web uygulaması güvenlik taraması Yüksek
Nmap Ağ keşfi ve servis analizi Düşük (SQLi için)

SQL Enjeksiyonuna Karşı Güvenlik Önlemleri ve Savunma

Testlerin sonucunda bir zafiyet tespit ettiyseniz, bunu nasıl kapatacağınızı bilmeniz gerekir. En etkili savunma yöntemi, kullanıcı girdilerini doğrudan SQL sorgularına dahil etmemektir.

Hazırlanmış İfadeler (Prepared Statements) Kullanımı

Prepared statements, veritabanı sorgusunun yapısını önceden belirler ve kullanıcıdan gelen veriyi sadece bir "değer" olarak işler. Bu sayede, kullanıcı tarafından girilen kötü niyetli SQL komutları kod olarak çalıştırılamaz. Modern yazılım geliştirme süreçlerinde bu yöntem standart olmalıdır.

Girdi Doğrulama ve Filtreleme

Kullanıcıdan gelen tüm veriler "güvensiz" kabul edilmelidir. Veri tiplerini kısıtlamak (örneğin ID alanına sadece rakam girilebilmesi) ve özel karakterleri temizlemek, enjeksiyon saldırılarını önemli ölçüde engeller. Ancak, sadece filtreleme yapmak tek başına yeterli değildir; mutlaka Prepared Statements ile desteklenmelidir.

Sıkça Sorulan Sorular

SQL enjeksiyonu testi sırasında veritabanı çökerse ne yapmalıyım?

Bu durum, testin çok agresif parametrelerle (yüksek --risk değeri gibi) yapıldığını gösterir. Testi durdurun, sistem yöneticisine haber verin ve veritabanı servislerini kontrol edin. Üretim ortamlarında (production) test yaparken her zaman kontrollü ve düşük seviyeli taramalar tercih edilmelidir.

SQLmap her zaman zafiyeti bulur mu?

Hayır. SQLmap çok güçlü olsa da, WAF (Web Application Firewall) tarafından engellenebilir veya uygulamanın karmaşık yapısı nedeniyle zafiyeti tespit edemeyebilir. Bu gibi durumlarda manuel test yöntemleri ve özel payload'lar gerekebilir.

WAF (Web Uygulama Güvenlik Duvarı) arkasındaki sitelerde nasıl test yapılır?

WAF'lar, SQLmap'in standart saldırılarını engelleyebilir. Bu durumda SQLmap'in --tamper parametresini kullanarak payload'ları gizleyebilir veya manuel olarak bypass yöntemleri deneyebilirsiniz. Ancak bu ileri seviye bir süreçtir ve etik sınırlar içinde kalmalıdır.

Test için hangi veritabanı türleri en savunmasızdır?

Savunmasızlık veritabanı türünden ziyade, kodlama hatalarından kaynaklanır. Ancak eski sürüm MySQL veya MSSQL kullanan sistemler, bilinen zafiyetler nedeniyle daha kolay hedef olabilir.

Test raporu hazırlarken nelere dikkat etmeliyim?

Raporda zafiyetin bulunduğu URL, kullanılan parametre, zafiyetin kanıtı (ekran görüntüsü veya log) ve en önemlisi çözüm önerisi (remediation) mutlaka yer almalıdır. Profesyonel bir rapor, teknik olmayan yöneticilerin de anlayabileceği bir dille yazılmalıdır.

Sonuç

Kali Linux kullanarak web uygulamalarında SQL enjeksiyonu testi yapmak, siber güvenlikte uzmanlaşmak isteyenler için temel bir yetkinliktir. Bu süreçte kullanılan araçlar ve teknikler, sistemlerinizi saldırganlardan önce keşfetmenize ve gerekli yamaları uygulamanıza olanak tanır. Unutmayın ki güvenlik, bir varış noktası değil, sürekli devam eden bir süreçtir. Düzenli taramalar, güncel kodlama pratikleri ve derinlemesine analizler, web uygulamalarınızın veritabanı güvenliğini sağlamak için en güçlü silahlarınızdır. Etik hackerlık disiplinini elden bırakmadan, her zaman yasal çerçeveler içerisinde çalışmalarınızı yürütmeye özen gösterin.

SQL Enjeksiyonu Testinde Sık Yapılan Hatalar ve Kaçınma Yöntemleri

SQL enjeksiyonu testleri sırasında yapılan hatalar, sadece testin başarısız olmasına değil, aynı zamanda hedef sistemin zarar görmesine veya test uzmanının tespit edilmesine yol açabilir. İşte en sık karşılaşılan hatalar:

  • Aşırı Hızlı Tarama: Otomatik araçların varsayılan hız ayarlarıyla çalışması, WAF (Web Uygulama Güvenlik Duvarı) tarafından engellenmenize veya sistemin servis dışı kalmasına (DoS) neden olabilir.
  • Veri Bütünlüğünü Bozma: Test sırasında veritabanına "DROP TABLE" veya "DELETE" komutları göndermek, üretim ortamındaki verilerin silinmesine yol açar. Bu, etik hackerlık kurallarına aykırıdır.
  • Yetersiz Log Analizi: Sadece aracın çıktısına güvenmek, sistemin arka planda verdiği hata kodlarını kaçırmanıza neden olabilir.

Test Ortamı İçin Araç Seçimi: Neden Kali Linux?

Kali Linux, siber güvenlik profesyonelleri için bir "İsviçre çakısı" niteliğindedir. SQLi testlerinde kullanılan araçların birçoğu (sqlmap, Burp Suite, OWASP ZAP) önceden yapılandırılmış ve güncel kütüphanelerle gelir. Aşağıdaki tablo, test sürecinde kullanılan temel araçların kullanım amaçlarını özetlemektedir.

Araç Adı Kullanım Amacı Öne Çıkan Özellik
SQLmap Otomatik SQLi tespiti ve sömürüsü Geniş veritabanı desteği ve otomasyon
Burp Suite Proxy ve manuel trafik analizi İstekleri manipüle etme yeteneği
OWASP ZAP Web uygulaması güvenlik taraması Açık kaynak ve genişletilebilir modüller
Nmap Port ve servis keşfi Veritabanı servislerinin açık olup olmadığını kontrol etme

İleri Düzey Senaryo: WAF Arkasındaki SQL Enjeksiyonu

Modern web uygulamalarının çoğu, SQL enjeksiyonu girişimlerini engellemek için WAF kullanır. Bu engelleri aşmak için kullanılan ileri düzey teknikler şunlardır:

1. Encoding (Kodlama) Teknikleri

WAF'lar genellikle düz metin (plain text) SQL komutlarını arar. URL encoding, Double URL encoding veya Unicode encoding kullanarak saldırı vektörünü gizlemek mümkündür.

2. HTTP Parametre Kirliliği (HPP)

Aynı parametreyi birden fazla kez göndererek (örneğin: id=1&id=2), WAF'ın hangi parametreyi işleyeceğini şaşırtması sağlanabilir. Bazı durumlarda arka uçtaki veritabanı, WAF'ın görmediği ikinci parametreyi işleyebilir.

SQL Enjeksiyonu Testinde Kullanılan Örnek Senaryolar

Test sürecini daha iyi anlamak için gerçek dünya senaryolarını incelemek faydalıdır:

Senaryo 1: Arama Kutusu Üzerinden SQLi

Bir e-ticaret sitesindeki arama kutusuna ' OR 1=1 -- yazıldığında tüm ürünlerin listelenmesi, uygulamanın girdi doğrulaması yapmadığını gösterir. Bu, en temel Tautology-based SQLi örneğidir.

Senaryo 2: Cookie Tabanlı SQLi

Bazen zafiyet URL parametrelerinde değil, oturum çerezlerinde (cookies) gizlidir. Burp Suite kullanarak çerez değerlerini manipüle etmek, kullanıcı yetkilendirme mekanizmalarını atlatmanıza olanak tanıyabilir.

Önemli Uyarı: Bu teknikler yalnızca yetkili olduğunuz sistemlerde, yazılı izin alınarak uygulanmalıdır. İzinsiz yapılan tüm işlemler yasal sorumluluk doğurur.

Veritabanı Türüne Göre Farklılıklar

Her veritabanı yönetim sistemi (DBMS), SQLi testlerinde farklı karakterler ve komut yapıları kullanır:

  • MySQL: information_schema veritabanı üzerinden tablo ve sütun isimlerine erişim oldukça yaygındır.
  • PostgreSQL: pg_catalog tabloları kullanılır ve sistem fonksiyonları (örneğin pg_read_file) üzerinden dosya okuma girişimleri yapılabilir.
  • MSSQL: xp_cmdshell gibi genişletilmiş prosedürler üzerinden işletim sistemi seviyesinde komut çalıştırma denemeleri (OS Command Injection) yapılabilir.

Güvenli Kodlama: SQLi'yi Kökten Çözmek

Testler sonucunda bir zafiyet tespit ettiyseniz, bunu düzeltmek için sadece "filtreleme" yapmak yeterli değildir. En güvenli yöntem Parameterized Queries (Prepared Statements) kullanmaktır. Bu yöntem, kullanıcıdan gelen veriyi kodun bir parçası olarak değil, sadece bir veri olarak işler. Böylece veritabanı motoru, gelen girdiyi asla bir komut olarak yorumlamaz.

Ayrıca, veritabanı kullanıcısının yetkilerini kısıtlamak (Least Privilege Principle) da kritik bir savunma katmanıdır. Web uygulaması, veritabanına bağlanırken sadece ihtiyaç duyduğu tablolara erişebilen, kısıtlı bir kullanıcı hesabı kullanmalıdır.

SQL Enjeksiyonu Testinde Sık Yapılan Hatalar ve Kaçınma Yöntemleri

Etik hackerlar ve sızma testi uzmanları, SQL enjeksiyonu (SQLi) testleri sırasında genellikle hız kazanmak adına bazı kritik hatalar yaparlar. Bu hatalar, hem testin başarısız olmasına hem de hedef sistemin zarar görmesine neden olabilir.

  • Aşırı Hızlı Tarama: Otomatik araçların (örneğin SQLmap) "level" ve "risk" parametrelerini kontrolsüz artırmak, sunucunun log kayıtlarına takılmanıza veya veritabanının kilitlenmesine neden olur. Her zaman yavaş ve kontrollü bir tarama tercih edin.
  • Veri Bütünlüğünü Bozmak: Test sırasında DROP TABLE veya DELETE gibi yıkıcı komutlar denemek, etik kurallara aykırıdır. Testlerinizi her zaman SELECT sorguları üzerinden yürüterek veri güvenliğini koruyun.
  • Yanlış Parametre Analizi: Sadece URL parametrelerine odaklanmak büyük bir hatadır. HTTP Header değerleri, User-Agent, Referer ve Cookie verileri de SQLi saldırılarına açıktır.

Test Ortamı İçin Araç Seçimi: Neden Kali Linux?

Kali Linux, siber güvenlik profesyonelleri için bir İsviçre çakısı niteliğindedir. SQLi testlerinde Kali'nin tercih edilmesinin temel nedenleri şunlardır:

  1. Önceden Yapılandırılmış Araç Seti: SQLmap, Burp Suite, Nmap gibi kritik araçlar Kali içinde kurulu ve optimize edilmiş olarak gelir.
  2. Güncellenebilirlik: Kali'nin depo yapısı, siber güvenlik araçlarının en yeni sürümlerine anında erişim sağlar.
  3. Topluluk Desteği: Karşılaşılan bir hata veya zorlukta, Kali Linux topluluğunda çözüm bulmak oldukça kolaydır.

İleri Düzey Senaryo: WAF Arkasındaki SQL Enjeksiyonu

Modern web uygulamalarının çoğu bir Web Uygulama Güvenlik Duvarı (WAF) arkasında çalışır. WAF, SQLi saldırılarını tespit etmek için "imza tabanlı" filtreleme yapar. Bu engeli aşmak için kullanılan yöntemler şunlardır:

  • Encoding (Kodlama): URL encoding, double URL encoding veya hex encoding kullanarak payload'u gizlemek.
  • HTTP Parameter Pollution (HPP): Aynı parametreyi birden fazla kez göndererek WAF'ın kafasını karıştırmak.
  • Case Variation: SELECT yerine sElEcT gibi büyük/küçük harf kombinasyonları kullanarak filtreleri bypass etmek.

SQL Enjeksiyonu Testinde Kullanılan Örnek Senaryolar

Testlerinizi daha sistematik hale getirmek için aşağıdaki iki yaygın senaryoyu inceleyebilirsiniz:

Senaryo 1: Arama Kutusu Üzerinden SQLi

Web sitesindeki arama kutusuna ' OR 1=1 -- girdisini girin. Eğer sonuç sayfasında tüm ürünler listeleniyorsa, uygulama doğrudan veritabanı sorgusuna kullanıcı girdisini ekliyor demektir. Bu, "Boolean-Based" bir zafiyetin habercisidir.

Senaryo 2: Cookie Tabanlı SQLi

Tarayıcınızın "Geliştirici Araçları" (F12) kısmından "Application" sekmesine gidin. Çerezlerdeki (Cookie) değerleri kopyalayıp SQLmap'e --cookie parametresi ile verin. Çoğu geliştirici, veritabanı sorgularında çerezlerin güvenli olduğunu varsayarak filtreleme yapmaz; bu da büyük bir zafiyettir.

SQL Enjeksiyonu Test Araçlarının Karşılaştırması

Araç Adı Kullanım Amacı Otomasyon Seviyesi
SQLmap Derinlemesine SQLi tespiti ve veri sızdırma Yüksek
Burp Suite (Intruder) Manuel payload denemeleri ve fuzzing Orta
Havij Eski nesil, görsel arayüzlü SQLi aracı Yüksek

Güvenli Kodlama: SQLi'yi Kökten Çözmek

Zafiyetleri tespit etmek kadar, onları kalıcı olarak kapatmak da bir siber güvenlik uzmanının görevidir. Sadece WAF kuralları ile SQLi engellenemez. Uygulama katmanında şu adımlar atılmalıdır:

  • Prepared Statements (Hazırlanmış İfadeler): Veritabanı sorgusu önceden derlenir ve kullanıcı verisi daha sonra parametre olarak eklenir. Bu, SQL komutunun yapısının bozulmasını imkansız kılar.
  • Stored Procedures: Veritabanı tarafında tanımlanan prosedürler, SQLi saldırılarına karşı doğal bir direnç sağlar.
  • Girdi Doğrulama (Input Validation): Kullanıcıdan gelen verinin tipini (sayı mı, metin mi) ve uzunluğunu kontrol edin. Beklenmedik karakterleri (', --, ;) reddedin.
Önemli Not: Bu rehberdeki bilgiler sadece etik hack eğitimleri ve kendi sistemlerinizin güvenliğini sağlamanız amacıyla hazırlanmıştır. İzin almadığınız hiçbir sistem üzerinde test yapmayınız. Yasal sorumluluk tamamen kullanıcıya aittir.

SQL Enjeksiyonu Testinde Kullanılan İleri Düzey Payload Stratejileri

SQL enjeksiyonu testlerinde kullanılan payload'lar, hedeflenen veritabanı yönetim sisteminin (DBMS) mimarisine göre değişiklik gösterir. Bir siber güvenlik uzmanı, sadece standart ' OR 1=1 -- sorgularıyla yetinmemeli, veritabanının mantıksal yapısını zorlayacak teknikler geliştirmelidir.

Fuzzing Teknikleri ile SQLi Keşfi

Fuzzing, bir uygulamaya rastgele veya belirli kurallara göre oluşturulmuş veri paketleri göndererek beklenmedik hataları tespit etme sürecidir. Burp Suite'in Intruder modülü, bu işlem için endüstri standardıdır.

  • Karakter Manipülasyonu: Tek tırnak ('), çift tırnak ("), ters eğik çizgi (\) ve yorum satırı belirteçleri (#, --, /*) ile uygulamanın cevabını izleyin.
  • Sayısal ve Metinsel Fuzzing: ID parametrelerinde sayısal değerleri, arama kutularında ise özel karakter dizilerini deneyin.
  • HTTP Header Fuzzing: SQLi sadece form alanlarında değil, User-Agent, Referer ve Cookie başlıklarında da gizli olabilir.

Veritabanı Belirleme ve Parmak İzi (Fingerprinting)

Test ettiğiniz veritabanının türünü (MySQL, PostgreSQL, MSSQL, Oracle) bilmek, saldırı vektörünü daraltmanızı sağlar. SQLmap gibi araçlar bunu otomatik yapsa da, manuel olarak şu yöntemlerle DBMS tipi tahmin edilebilir:

Veritabanı Türü Test Sorgusu (Payload) Beklenen Sonuç
MySQL AND 1=1# Sayfa normal yüklenir.
PostgreSQL AND 1=1-- Sayfa normal yüklenir.
MSSQL AND @@version > 0 Hata mesajı veya içerik değişimi.

SQL Enjeksiyonu Testinde Sık Yapılan Hatalar

Yeni başlayan güvenlik uzmanları, test süreçlerinde bazı kritik hatalar yaparak hem sistemin çökmesine neden olmakta hem de zafiyetleri gözden kaçırmaktadır:

  1. Gürültülü Tarama: Otomatik araçları (SQLmap) çok yüksek hızda çalıştırmak, uygulamanın log dosyalarında iz bırakır ve WAF tarafından engellenmenize neden olur.
  2. Hata Mesajlarını İhmal Etme: Uygulamanın döndürdüğü "500 Internal Server Error" mesajları, aslında veritabanı yapısı hakkında altın değerinde bilgiler barındırır.
  3. Sadece GET Parametrelerine Odaklanma: Modern web uygulamalarında POST verileri, JSON gövdeleri ve HTTP başlıkları, GET parametrelerinden daha fazla zafiyet içerebilir.
  4. Yedekleme Almadan Test Yapmak: Özellikle üretim (production) ortamlarında yapılan testler, veritabanı tablolarının silinmesine veya verilerin bozulmasına yol açabilir.

İleri Düzey Senaryo: WAF Arkasındaki SQL Enjeksiyonu

WAF (Web Application Firewall), SQL karakterlerini içeren istekleri engellemek üzere tasarlanmıştır. Ancak WAF'lar genellikle imzaya dayalı (signature-based) çalışır. Bu engeli aşmak için şu yöntemler kullanılır:

  • URL Encoding ve Double Encoding: Payload'u %27, %2527 gibi formatlara dönüştürerek WAF filtrelerini atlatmayı deneyin.
  • Whitespace (Boşluk) Karakterlerini Değiştirme: Boşluk yerine yorum satırı (/**/) veya tab karakteri (%09) kullanarak SQL komutunun WAF tarafından tanınmamasını sağlayın.
  • HTTP Parameter Pollution (HPP): Aynı parametreyi birden fazla kez göndererek (örneğin: ?id=1&id=2) WAF'ın hangi parametreyi işleyeceğini karıştırın.

Test Ortamı İçin Araç Seçimi ve Kali Linux Avantajı

Kali Linux, siber güvenlik uzmanları için neden vazgeçilmezdir? Çünkü Kali, sadece araçlar bütünü değil, aynı zamanda bu araçların birbiriyle uyumlu çalıştığı optimize edilmiş bir ekosistemdir.

Uzman Tavsiyesi: Testlerinizi her zaman yerel bir sanal makinede (DVWA veya OWASP Juice Shop gibi) pratik ederek başlayın. Canlı hedeflerdeki testler, etik kurallar ve yasal çerçeveler dahilinde gerçekleştirilmelidir.

SQL Enjeksiyonu Testinde Kullanılan Örnek Senaryolar

Senaryo 1: Arama Kutusu Üzerinden SQLi

Bir e-ticaret sitesinin arama kutusuna ' OR 1=1 -- yazıldığında tüm ürünlerin listelenmesi, uygulamanın kullanıcı girdisini doğrudan sorguya dahil ettiğini gösterir. Bu, "In-band SQLi" türüne bir örnektir ve veritabanı içeriğinin doğrudan ekrana basılmasına olanak tanır.

Senaryo 2: Cookie Tabanlı SQLi

Bir web uygulaması, kullanıcı oturumunu doğrulamak için Cookie'deki bir değeri veritabanında sorguluyorsa, bu Cookie değerine eklenen bir ' karakteri, uygulamanın çökmesine veya oturum bilgilerinin sızdırılmasına neden olabilir. Bu tür testlerde Burp Suite Cookie Editor eklentisi kullanılarak Cookie verisi manipüle edilir.

Veritabanı Türüne Göre Farklılıklar ve Özelleşmiş Testler

Her veritabanı yönetim sistemi kendine has fonksiyonlara sahiptir. Örneğin, MySQL'de information_schema veritabanı tablo isimlerini listelemek için kullanılırken, Oracle'da all_tables görünümü kullanılır. Test aşamasında, hedeflediğiniz veritabanının dokümantasyonuna göz atarak, o veritabanına özel "Time-Based" (zaman tabanlı) sorgular (örneğin MySQL için SLEEP(), PostgreSQL için pg_sleep()) kullanarak kör (blind) SQLi testlerini derinleştirebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Emre Yılmaz

Bilgi odaklı nasıl yapılır içerikleriyle karmaşık süreçleri herkes için anlaşılır kılıyorum. Okuyucularımın zamanını verimli kullanmalarını sağlayan stratejiler geliştiriyorum.

Yorumlar (0)

Yorum Yaz