Web Uygulamalarında SQL Enjeksiyon Açığı Manuel Olarak Nasıl Test Edilir?

Web Uygulamalarında SQL Enjeksiyon Açığı Manuel Olarak Nasıl Test Edilir?
Web Uygulamalarında SQL Enjeksiyon Açığı Manuel Olarak Nasıl Test Edilir?

Web Uygulamalarında SQL Enjeksiyon Açığı Manuel Olarak Nasıl Test Edilir?

Web uygulamalarında SQL enjeksiyon açığı manuel olarak nasıl test edilir sorusu, modern siber güvenlik dünyasında savunma mekanizmalarını güçlendirmek isteyen her profesyonelin temel yetkinliklerinden biridir. SQL enjeksiyonu (SQLi), bir saldırganın uygulama tarafından veritabanına gönderilen sorgulara müdahale etmesine olanak tanıyan, kritik bir web güvenlik açığıdır. Bu açık, veritabanındaki hassas verilerin sızdırılmasına, değiştirilmesine veya silinmesine yol açabilir.

Manuel test süreçleri, otomatik tarayıcıların gözden kaçırabileceği mantıksal hataları yakalamak ve güvenlik açıklarının gerçek etkisini doğrulamak için vazgeçilmezdir. 2026 yılı itibarıyla modern web çerçeveleri SQLi'ye karşı daha dirençli olsa da, yanlış yapılandırılmış veri katmanları ve karmaşık sorgu yapıları hala ciddi riskler barındırmaktadır. Bu rehberde, etik hackerlık prensipleri çerçevesinde, yasal sınırlar içerisinde bir web uygulamasının SQLi'ye karşı nasıl manuel olarak test edileceğini adım adım ele alacağız.

SQL Enjeksiyonu Nedir ve Nasıl Çalışır?

SQL enjeksiyonu, kullanıcıdan alınan girdilerin doğrudan SQL sorgularına dahil edilmesiyle ortaya çıkan bir güvenlik zafiyetidir. Uygulama, kullanıcının girdiği veriyi bir komut olarak değil, verinin bir parçası olarak işlemelidir. Ancak güvenli olmayan kod yapılarında, saldırganlar özel karakterler kullanarak veritabanı sorgusunun mantığını değiştirebilirler.

SQL Enjeksiyon Türleri

  • In-Band (Klasik) SQLi: Saldırganın aynı iletişim kanalını kullanarak sonucu doğrudan aldığı yöntemdir.
  • Inferential (Blind) SQLi: Veritabanından doğrudan veri alınamaz; ancak veritabanının verdiği yanıtlar (doğru/yanlış) üzerinden bilgi çıkarımı yapılır.
  • Out-of-Band SQLi: Veritabanının farklı bir ağ protokolü (DNS veya HTTP gibi) üzerinden dışarıya veri göndermesi sağlanır.

Manuel test yaparken, uygulamanın hangi veritabanı yönetim sistemi (DBMS) ile çalıştığını anlamak ve girdilerin nasıl işlendiğini analiz etmek ilk adımdır.

Manuel SQL Enjeksiyon Testi İçin Hazırlık Aşaması

Test sürecine başlamadan önce, kapsamın netleştirilmesi ve yasal izinlerin alınması zorunludur. Etik hackerlık, sadece yetkili olduğunuz sistemler üzerinde gerçekleştirilmelidir. Hazırlık aşamasında, uygulamanın giriş noktalarını (input fields) belirlemek en kritik noktadır.

Test Ortamının Kurulması

  1. Vekil Sunucu (Proxy) Kullanımı: Burp Suite veya OWASP ZAP gibi araçlar, tarayıcı ile sunucu arasındaki trafiği yakalamak ve manuel olarak değiştirmek için kullanılır.
  2. Girdi Noktalarının Belirlenmesi: URL parametreleri, form alanları, HTTP başlıkları (User-Agent, Cookie, Referer) ve JSON/XML gövdeleri test edilmelidir.
  3. Hata Mesajlarının İzlenmesi: Uygulamanın hatalı bir sorgu gönderildiğinde verdiği tepkiler (verbose error messages), veritabanı yapısı hakkında ipucu verebilir.
Kritik Uyarı: Manuel SQLi testi sırasında veritabanına zarar verebilecek veya veri kaybına neden olabilecek (DROP, DELETE gibi) komutlardan kesinlikle kaçının. Testlerinizi her zaman izole edilmiş bir kopyada veya onaylı bir ortamda gerçekleştirin.

Adım Adım Manuel SQL Enjeksiyonu Testi

SQL enjeksiyon açığını manuel olarak doğrulamak için sistematik bir yaklaşım izlenmelidir. İlk adım, uygulamanın girdiyi nasıl işlediğini anlamak için özel karakterler enjekte etmektir.

Adım 1: Karakter Enjeksiyonu ile Hata Tespiti

Parametrelere tek tırnak ('), çift tırnak (") veya ters eğik çizgi (\) ekleyerek uygulamanın veritabanı hatası verip vermediğini kontrol edin. Eğer uygulama "SQL syntax error" gibi bir hata mesajı döndürüyorsa, bu durum sorgunun manipüle edilebileceğinin ilk işaretidir.

Adım 2: Mantıksal Sorgu Testi

Sorgunun mantığını değiştirecek ifadeler kullanın. Örneğin, bir URL parametresine ' OR 1=1-- ekleyerek tüm kayıtların listelenip listelenmediğini gözlemleyin. Eğer sayfa normalden farklı bir içerik döndürüyorsa, mantıksal bir enjeksiyon mümkündür.

Adım 3: UNION Tabanlı Testler

UNION operatörü, orijinal sorgunun sonuçlarına kendi sorgumuzun sonuçlarını eklemek için kullanılır. Burada dikkat edilmesi gereken, eklenen sorgunun sütun sayısının orijinal sorguyla aynı olmasıdır. ORDER BY komutunu kullanarak sütun sayısını tespit edebilirsiniz.

Adım 4: Blind (Kör) SQL Enjeksiyonu

Hata mesajı dönmeyen uygulamalarda, uygulamanın yanıt süresini (Time-based) veya sayfa içeriğindeki küçük değişiklikleri (Boolean-based) analiz edin. SLEEP() veya WAITFOR DELAY komutları, veritabanının sorguyu işleyip işlemediğini anlamanızı sağlar.

SQL Enjeksiyonu Doğrulama Yöntemleri Karşılaştırması

Yöntem Görünürlük Zorluk Derecesi Başarı İhtimali
Error-Based Yüksek Düşük Yüksek (Hata mesajı varsa)
Union-Based Orta Orta Orta
Boolean-Based Düşük Yüksek Orta
Time-Based Çok Düşük Çok Yüksek Düşük

SQL Enjeksiyonuna Karşı Savunma Stratejileri

Manuel olarak bir açığı tespit ettikten sonra, bu açığın nasıl kapatılacağını bilmek bir güvenlik profesyonelinin temel görevidir. SQL enjeksiyonunu önlemenin en etkili yolu, kullanıcı girdilerine hiçbir zaman güvenmemektir.

Parametreli Sorgular (Prepared Statements)

En güvenli yöntem, veritabanı sorgularında parametreli ifadeler kullanmaktır. Bu yöntem, verinin sorgunun bir parçası olarak değil, sadece bir değer olarak işlenmesini sağlar. Böylece saldırganın enjekte ettiği komutlar çalıştırılamaz.

Girdi Doğrulama ve Filtreleme

Kullanıcıdan gelen verilerin türünü, uzunluğunu ve formatını (örneğin sadece rakam girilmesi gereken bir alana harf girilmemesi) kısıtlamak, saldırı yüzeyini önemli ölçüde azaltır. Ancak bu yöntem, tek başına yeterli değildir; her zaman parametreli sorgularla desteklenmelidir.

Sıkça Sorulan Sorular

Manuel test yaparken neden otomatik araçlar kullanmamalıyım?

Otomatik araçlar hızlıdır ancak karmaşık mantıksal açıkları veya iş mantığı hatalarını gözden kaçırabilirler. Manuel test, uygulamanın derinlemesine anlaşılmasını sağlar ve yanlış pozitif (false positive) sonuçları minimize eder.

SQL enjeksiyonu ile veritabanına sızarsam ne yapmalıyım?

Etik bir hacker olarak, açığı tespit ettiğiniz anda durmalı ve durumu sistem yöneticisine veya ilgili kuruma raporlamalısınız. Verileri kopyalamak veya değiştirmek yasal sorumluluk doğurur.

Tüm SQL enjeksiyonları hata mesajı verir mi?

Hayır. Modern uygulamalar genellikle hata mesajlarını gizler (Blind SQLi). Bu durumlarda, uygulamanın davranışındaki değişimleri analiz etmek için daha sofistike teknikler kullanmanız gerekir.

SQL enjeksiyonu sadece veritabanı verilerini mi etkiler?

Genellikle veritabanı ile sınırlıdır; ancak bazı durumlarda, veritabanı üzerinden işletim sistemi komutları çalıştırmak veya uygulama sunucusunda yetki yükseltmek mümkün olabilir.

Hangi veritabanı sistemleri SQL enjeksiyonuna daha yatkındır?

SQL enjeksiyonu bir veritabanı türü sorunu değil, kodlama hatasıdır. MySQL, PostgreSQL, MSSQL veya Oracle; doğru yapılandırılmadığı takdirde hepsi bu açığa karşı savunmasız kalabilir.

Sonuç

Web uygulamalarında SQL enjeksiyon açığı manuel olarak nasıl test edilir sorusunun yanıtı, teknik bilginin yanı sıra sabır ve dikkat gerektiren bir süreçtir. 2026 yılındaki siber güvenlik standartlarında, sadece araçlara güvenmek yerine uygulamanın arka planındaki sorgu mantığını anlamak, sizi bir üst seviyeye taşıyacaktır. Her zaman "önce savunma" prensibiyle hareket etmeli, tespit ettiğiniz açıkları raporlayarak sistemlerin daha güvenli hale gelmesine katkıda bulunmalısınız. Unutmayın, en iyi savunma, en iyi saldırı tekniklerini bilmekten geçer.

Manuel Test Sürecinde Kullanılan Temel Araçlar ve Seçim Kriterleri

Manuel SQL enjeksiyon testi, bir saldırganın zihnini simüle etmeyi gerektirir. Bu süreçte karmaşık otomasyon araçları yerine, HTTP trafiğini manipüle etmenize olanak tanıyan araçlar tercih edilmelidir. İşte profesyonel bir test uzmanının çantasında bulunması gereken temel araçlar:

  • Burp Suite (Community/Professional): HTTP isteklerini yakalamak, değiştirmek ve tekrar göndermek (Repeater) için endüstri standardıdır.
  • OWASP ZAP: Açık kaynaklı bir alternatif olarak, manuel istek düzenleme süreçlerinde oldukça etkilidir.
  • Postman: API tabanlı web uygulamalarında SQL enjeksiyonu ararken parametreleri yönetmek için kullanılır.
  • Tarayıcı Geliştirici Araçları: Konsol ve Ağ (Network) sekmeleri, istemci tarafındaki doğrulamaları ve sunucu yanıtlarını incelemek için kritiktir.

SQL Enjeksiyonunda Sık Yapılan Hatalar ve Yanılgılar

Manuel test yaparken birçok güvenlik araştırmacısı, sorguların nasıl yapılandırıldığını anlamadan rastgele karakterler girme hatasına düşer. İşte kaçınmanız gereken yaygın hatalar:

  1. Bağlamı Göz Ardı Etmek: SQL enjeksiyonu sadece URL parametrelerinde değil; HTTP başlıklarında (User-Agent, Referer, Cookie) veya JSON gövdelerinde de gerçekleşebilir.
  2. Veritabanı Türünü Tahmin Edememek: Hata mesajlarını analiz etmeden körü körüne deneme yapmak zaman kaybettirir. Örneğin, @@version sorgusu MSSQL için çalışırken, MySQL'de farklı bir sözdizimi gerektirir.
  3. Kodlama Hataları: Boşluk karakterlerini veya özel sembolleri URL-encode etmemek, sunucunun isteği reddetmesine neden olur.

İleri Seviye Senaryo: Veritabanı Yapısını Keşfetme (Enumeration)

Bir açığın varlığını doğruladıktan sonra, veritabanı şemasını manuel olarak çıkarmak stratejik bir süreçtir. Bu aşamada UNION SELECT tekniği en etkili yöntemdir.

Adım 1: Sütun Sayısını Belirleme

ORDER BY ifadesini kullanarak veritabanının hata vermeyi kestiği noktayı bulmalısınız. ' ORDER BY 1--, ' ORDER BY 2-- şeklinde artırarak ilerleyin.

Adım 2: Veri Tipi Uyumu

Sütun sayısını bulduktan sonra, hangi sütunun metin verisi döndürdüğünü anlamak için UNION SELECT NULL, 'a', NULL-- gibi bir sorgu ile test yapın.

Adım 3: Bilgi Toplama

Sütunları belirledikten sonra information_schema tablolarını kullanarak veritabanı isimlerini, ardından tablo ve sütun isimlerini listeleyebilirsiniz.

SQL Enjeksiyonu Tespit ve Analiz Karşılaştırma Tablosu

Yöntem Avantajı Dezavantajı Tespit Zorluğu
Error-Based Hızlı sonuç verir, hata mesajı bilgi sızdırır. Modern sistemlerde hata mesajları gizlenir. Düşük
Union-Based Veriyi doğrudan sayfada görüntüler. Sütun sayısı ve tipi uyumu gerektirir. Orta
Blind (Boolean) Hata mesajı olmasa bile çalışır. Çok sayıda istek gerektirir, yavaştır. Yüksek
Time-Based Her koşulda test edilebilir. Sunucu yüküne ve gecikmelere duyarlıdır. Çok Yüksek

Güvenli Test Ortamı ve Yasal Sorumluluklar

Önemli Uyarı: Manuel SQL enjeksiyon testlerini sadece yazılı izninizin olduğu sistemler üzerinde gerçekleştirin. Yetkisiz sistemlerde yapılan denemeler yasal yaptırımlara tabidir.

Testlerinizi her zaman kendi kurduğunuz laboratuvar ortamlarında (DVWA, OWASP Juice Shop gibi) yapın. Bu ortamlar, SQL enjeksiyonunun farklı varyasyonlarını güvenli bir şekilde denemeniz için tasarlanmıştır. Gerçek bir sunucuda test yaparken, BENCHMARK() veya SLEEP() gibi komutların sunucuyu yavaşlatabileceğini ve reddedilme (DoS) riskine yol açabileceğini unutmayın.

Filtreleri Atlatma Teknikleri (WAF Bypass)

Web Uygulaması Güvenlik Duvarları (WAF), yaygın SQL anahtar kelimelerini (SELECT, UNION, OR) engeller. Manuel testte bu filtreleri aşmak için şunlar denenebilir:

  • Case Sensitivity: select yerine SeLeCt kullanmak.
  • URL Encoding: Karakterleri çift URL encode etmek (%2553%2545%254c%2545%2543%2554).
  • Yorum Satırları: SEL/**/ECT gibi anahtar kelimelerin arasına yorum satırı eklemek.
  • Boşluk Alternatifleri: Boşluk yerine +, %09 (tab) veya %0a (yeni satır) karakterlerini kullanmak.

Sıkça Sorulan Sorular (Devam)

Manuel test yaparken neden otomatik araçlar kullanmamalıyım?

Otomatik araçlar genellikle çok fazla gürültü çıkarır ve WAF tarafından hemen engellenir. Manuel test, uygulamanın özel mantığını anlamanızı sağlar ve karmaşık, alışılmadık enjeksiyon noktalarını tespit etmede çok daha başarılıdır.

SQL enjeksiyonu ile veritabanına sızarsam ne yapmalıyım?

Sisteme sızdığınız anda testi durdurun. Verileri indirmeyin veya değiştirmeyin. Tespit ettiğiniz açığı, sistemin sahibiyle veya varsa "Bug Bounty" programı üzerinden yetkililerle paylaşın. Etik hackerlık, zarar vermek değil, sistemi güçlendirmektir.

Tüm SQL enjeksiyonları hata mesajı verir mi?

Hayır. Çoğu modern uygulama, hata mesajlarını kullanıcıdan gizleyecek şekilde yapılandırılmıştır. Bu durum, "Blind SQLi" olarak adlandırılan ve uygulamanın verdiği yanıtların içeriğine veya yanıt süresine bakarak çıkarım yapmanızı gerektiren yöntemlerin önemini artırır.

Manuel Test Sürecinde Kullanılan Temel Araçlar ve Seçim Kriterleri

Manuel SQL enjeksiyon testi, bir otomasyon aracının "tıkla ve çalıştır" mantığından ziyade, bir cerrahın titizliğiyle yürütülmelidir. Bu süreçte kullanılan araçlar, saldırganın değil, araştırmacının veriyi manipüle etmesine ve gözlemlemesine olanak tanıyan yardımcı unsurlardır.

  • Burp Suite (Proxy): Manuel testin kalbidir. HTTP isteklerini durdurmak, değiştirmek ve tekrar göndermek (Repeater) için vazgeçilmezdir.
  • Tarayıcı Geliştirici Araçları: Gelen yanıtların (response) yapısını incelemek ve JavaScript tabanlı filtreleri anlamak için kullanılır.
  • Decoder/Encoder Araçları: Payload'ları farklı formatlara (Base64, URL Encode, Hex) dönüştürmek, WAF ve filtreleri atlatmak için gereklidir.
  • Veritabanı İstemcileri: Kendi yerel laboratuvarınızda, hedef sistemin kullandığı veritabanı türüne (MySQL, PostgreSQL, MSSQL) uygun sorguları denemek için kullanılır.

Seçim Kriterleri: Araç seçerken "şeffaflık" ilkesi önemlidir. Arka planda ne yaptığını bilmediğiniz araçları kullanmak, hem güvenlik riskleri doğurur hem de testin başarısını düşürür. Manuel testte aracın amacı, sizin manuel olarak oluşturduğunuz payload'u hedefe en temiz şekilde iletmektir.

SQL Enjeksiyonunda Sık Yapılan Hatalar ve Yanılgılar

Yeni başlayan güvenlik araştırmacıları, manuel test sürecinde genellikle şu hatalara düşerler:

  1. Hata Mesajlarına Aşırı Odaklanma: "Hata yoksa açık yoktur" düşüncesi en büyük yanılgıdır. Modern uygulamalar hataları maskeler; bu durumda Blind SQLi tekniklerine geçilmelidir.
  2. Karakter Setlerini İhmal Etme: Sadece tek tırnak (') denemek yeterli değildir. Çift tırnak ("), parantezler, ters eğik çizgi (\) gibi karakterler de test edilmelidir.
  3. Bağlamı (Context) Anlamama: Sorgunun bir WHERE ifadesi içinde mi, yoksa bir ORDER BY ifadesi içinde mi olduğunu anlamadan payload göndermek boşa kürek çekmektir.
  4. Yasal Sınırları Aşma: Yetkisiz sistemlerde veri tabanı içeriğini çekmeye çalışmak, etik hackerlık sınırlarını aşar ve yasal sorunlara yol açar.

İleri Seviye Senaryo: Veritabanı Yapısını Keşfetme (Enumeration)

Bir kez enjeksiyon noktası doğrulandığında, bir sonraki adım veritabanı yapısını haritalamaktır. Bu aşamada information_schema veritabanı hayati önem taşır.

Adım 1: Tablo İsimlerini Bulma: UNION SELECT table_name FROM information_schema.tables-- sorgusu ile veritabanındaki tüm tablolar listelenebilir.

Adım 2: Sütun İsimlerini Bulma: Belirlenen bir tablonun (örneğin users tablosu) sütunlarını görmek için UNION SELECT column_name FROM information_schema.columns WHERE table_name='users'-- kullanılır.

Adım 3: Veri Çekme: Nihai aşamada, UNION SELECT username, password FROM users-- ile hedef veriler elde edilir. Ancak unutulmamalıdır ki, bu işlemler sadece yetkili olduğunuz ortamlarda yapılmalıdır.

SQL Enjeksiyonu Tespit ve Analiz Karşılaştırma Tablosu

Yöntem Tespit Zorluğu Veri Sızdırma Hızı Gürültü Seviyesi
Error-Based Düşük Yüksek Orta
Union-Based Orta Yüksek Düşük
Boolean-Based Blind Yüksek Düşük Düşük
Time-Based Blind Çok Yüksek Çok Düşük Düşük

Güvenli Test Ortamı ve Yasal Sorumluluklar

Manuel SQLi testi yaparken kendi yerel sunucunuzu (XAMPP, Docker, OWASP Juice Shop) kurmanız, hem öğrenme sürecini hızlandırır hem de yasal riskleri sıfıra indirir. Asla izin almadığınız bir web sitesinde "sadece bir tane deneyeyim" mantığıyla hareket etmeyin. Siber güvenlik etiği, izinsiz erişimin her türlüsünü reddeder. Profesyonel bir araştırmacı, testlerini mutlaka yazılı bir izin (Authorization Letter) veya Bug Bounty platformunun kapsamı (Scope) dahilinde gerçekleştirir.

Filtreleri Atlatma Teknikleri (WAF Bypass)

Modern Web Uygulaması Güvenlik Duvarları (WAF), SELECT, UNION, OR gibi anahtar kelimeleri engeller. Bu filtreleri aşmak için yaratıcı yaklaşımlar gerekir:

  • Büyük/Küçük Harf Değişimi: sElEcT gibi karma kullanımlar bazen basit filtreleri atlatabilir.
  • URL Encoding: Karakterleri çift URL encode etmek (%2553%2545%254c%2545%2543%2554).
  • Yorum Satırları: SEL/**/ECT gibi anahtar kelimelerin arasına yorum satırı eklemek.
  • Boşluk Alternatifleri: Boşluk yerine +, %09 (tab) veya %0a (yeni satır) karakterlerini kullanmak.

Sıkça Sorulan Sorular (Devam)

Hangi veritabanı sistemleri SQL enjeksiyonuna daha yatkındır?

SQL enjeksiyonu, veritabanı motorundan ziyade kodlama mantığıyla ilgilidir. Ancak, eski tip yapılandırmalara sahip olan veya veritabanı sürücüleri güncellenmemiş sistemler daha fazla risk taşır. Özellikle MSSQL ve Oracle gibi sistemlerde, veritabanı seviyesindeki izinlerin yanlış yapılandırılması, enjeksiyonun etkisini (örneğin işletim sistemi komutu çalıştırma) artırabilir.

SQL enjeksiyonu sadece veritabanı verilerini mi etkiler?

Hayır. Bazı durumlarda, veritabanı kullanıcısının yetkileri yüksekse, veritabanı üzerinden sunucuya dosya yazılabilir (Web Shell yükleme) veya sunucu üzerinde komut çalıştırılabilir (Out-of-band SQLi). Bu da tüm sunucunun ele geçirilmesine yol açabilir.

Manuel Test Sürecinde Kullanılan Temel Araçlar ve Seçim Kriterleri

Manuel SQL enjeksiyon testi, bir güvenlik uzmanının veritabanı ile doğrudan "konuşma" sanatıdır. Bu süreçte kullanılan araçlar, saldırganın değil, araştırmacının verimliliğini artırmalıdır. En temel araçlar şunlardır:

  • Burp Suite (Proxy): HTTP isteklerini yakalamak, değiştirmek ve tekrar göndermek (Repeater) için vazgeçilmezdir.
  • Browser DevTools: Network sekmesi üzerinden gönderilen parametreleri incelemek için kullanılır.
  • FoxyProxy: Tarayıcı trafiğini proxy üzerinden yönlendirmek için gereklidir.
  • CyberChef: Enjeksiyon sırasında kullanılacak payload'ların (Base64, URL encoding, Hex) hızlıca dönüştürülmesi için kullanılır.

Seçim Kriterleri: Araç seçerken uygulamanın mimarisine dikkat edilmelidir. Eğer uygulama yoğun bir şekilde JavaScript tabanlı dinamik içerik yüklüyorsa, tarayıcı tabanlı hata ayıklama araçları, basit bir proxy aracından daha verimli sonuçlar verebilir.

SQL Enjeksiyonunda Sık Yapılan Hatalar ve Yanılgılar

Yeni başlayan güvenlik araştırmacıları, manuel test sürecinde genellikle şu hatalara düşerler:

  1. Sadece GET Parametrelerine Odaklanmak: Birçok kişi sadece URL'deki ?id=1 kısmını test eder. Ancak POST verileri, HTTP Header'ları (User-Agent, Referer, Cookie) veya JSON gövdeleri de aynı derecede tehlikelidir.
  2. Hata Mesajlarını Göz Ardı Etmek: Veritabanı hata mesajları, sistemin yapısını ele veren en büyük ipucudur. Bunları "sayfa bozuldu" diyerek geçmek, büyük bir fırsatı kaçırmaktır.
  3. Filtreleri Tek Bir Yöntemle Aşmaya Çalışmak: WAF (Web Application Firewall) sistemleri, basit ' OR 1=1 komutlarını kolayca yakalar. Farklı kodlama teknikleri denememek, testin başarısız olmasına neden olur.

İleri Seviye Senaryo: Veritabanı Yapısını Keşfetme (Enumeration)

Açık tespit edildikten sonra, veritabanının yapısını anlamak için sistematik bir yaklaşım izlenmelidir. İlk adım, mevcut veritabanı kullanıcısının yetkilerini belirlemektir.

Örnek Senaryo:

  • Sürüm Tespiti: UNION SELECT @@version, null-- komutu ile veritabanı motorunun sürümünü öğrenin.
  • Tablo İsimlerini Listeleme: UNION SELECT table_name, null FROM information_schema.tables-- sorgusu ile veritabanındaki tabloları listeleyin.
  • Sütunları Keşfetme: UNION SELECT column_name, null FROM information_schema.columns WHERE table_name='users'-- komutu ile kritik kullanıcı verilerinin bulunduğu sütunları bulun.

SQL Enjeksiyonu Tespit ve Analiz Karşılaştırma Tablosu

Yöntem Avantajı Dezavantajı Tespit Zorluğu
In-Band (Error Based) Hızlı sonuç verir. Hata mesajları gizlenmişse çalışmaz. Düşük
Union-Based Veriyi doğrudan çeker. Sütun sayısı eşleşmesi gerekir. Orta
Blind (Boolean) Hata mesajı yoksa idealdir. Çok yavaştır. Yüksek
Blind (Time-Based) Her koşulda çalışır. Sunucuya yük bindirir. Çok Yüksek

Güvenli Test Ortamı ve Yasal Sorumluluklar

SQL enjeksiyonu testi, sistemin bütünlüğünü bozma potansiyeline sahiptir. Bu nedenle:

  • İzin Alın: Yazılı izin olmadan hiçbir sisteme test yapmayın. Bu, yasal olarak bilişim suçları kapsamına girer.
  • Canlı Sistemlerden Kaçının: Mümkünse uygulamanın bir kopyasını (Staging/Dev) oluşturun.
  • Veri Bütünlüğü: Test sırasında veritabanına veri eklerken veya silerken, sistemin çalışmasını bozacak (örneğin DROP TABLE gibi) komutlardan kesinlikle kaçının.

Filtreleri Atlatma Teknikleri (WAF Bypass)

Modern WAF sistemleri, SQL anahtar kelimelerini (SELECT, INSERT, DELETE) engellemeye odaklanır. Bu filtreleri aşmak için yaratıcı yaklaşımlar gerekir:

  • Büyük/Küçük Harf Değişimi: sElEcT gibi karma kullanımlar bazen basit filtreleri atlatabilir.
  • URL Encoding: Karakterleri çift URL encode etmek (%2553%2545%254c%2545%2543%2554).
  • Yorum Satırları: SEL/**/ECT gibi anahtar kelimelerin arasına yorum satırı eklemek.
  • Boşluk Alternatifleri: Boşluk yerine +, %09 (tab) veya %0a (yeni satır) karakterlerini kullanmak.

Sıkça Sorulan Sorular (Devam)

Hangi veritabanı sistemleri SQL enjeksiyonuna daha yatkındır?

SQL enjeksiyonu, veritabanı motorundan ziyade kodlama mantığıyla ilgilidir. Ancak, eski tip yapılandırmalara sahip olan veya veritabanı sürücüleri güncellenmemiş sistemler daha fazla risk taşır. Özellikle MSSQL ve Oracle gibi sistemlerde, veritabanı seviyesindeki izinlerin yanlış yapılandırılması, enjeksiyonun etkisini (örneğin işletim sistemi komutu çalıştırma) artırabilir.

SQL enjeksiyonu sadece veritabanı verilerini mi etkiler?

Hayır. Bazı durumlarda, veritabanı kullanıcısının yetkileri yüksekse, veritabanı üzerinden sunucuya dosya yazılabilir (Web Shell yükleme) veya sunucu üzerinde komut çalıştırılabilir (Out-of-band SQLi). Bu da tüm sunucunun ele geçirilmesine yol açabilir.

Bu yazıya tepkinizi paylaşın:
Emre Güneş

Teknik çözümler ve ev gereçleri kullanımı konusunda deneyimli bir editörüm. Kullanıcı hatalarını minimize eden, yalın ve çözüm odaklı rehberler hazırlıyorum.

Yorumlar (0)

Yorum Yaz