OWASP BWA: SQL Injection Çözümü

Güvenlik Açığı Raporu — DVWA Lab

01 · OWASP Broken Web Applications (BWA)

OWASP Broken Web Application (BWA) Nedir?

OWASP BWA, siber güvenlik uzmanlarının ve sistem yöneticilerinin web uygulama güvenliği üzerine pratik yapabilmesi için tasarlanmış, içerisinde bilinçli olarak zafiyetler barındıran sanal bir laboratuvar ortamıdır. İçerisinde DVWA (Damn Vulnerable Web Application), Mutillidae, WebGoat gibi birçok farklı eğitim platformunu barındırır.

Bu laboratuvar çalışmasında, modern web uygulamalarında sıkça karşılaşılan OWASP Top 10 zafiyetlerinin (SQL Injection, XSS, LFI, File Upload vb.) nasıl tespit edildiğini, bu açıkların sistem üzerindeki etkilerini ve kod seviyesinde nasıl güvenli hale getirileceğini adım adım inceleyeceğiz.

ÖNEMLİ UYARI Bu dokümandaki tüm testler, tamamen yalıtılmış ve izinli bir laboratuvar ortamında eğitim amacıyla gerçekleştirilmiştir.
02 · LFI / Broken Access Control Kritik

Local File Inclusion (LFI)

Dosya yolu parametresi yeterli kontrol edilmediğinde kullanıcı web kökü dışındaki sistem dosyalarını okuyabilir.

LFI Nedir?

Temel problem: Local File Inclusion, uygulamanın dosya dahil etme mantığını kullanıcıdan gelen parametreyle kontrol ettirmesidir.

  • Riskli parametre: page, file, path gibi dosya adı alanları.
  • Keşif payload'ı: ../ ifadesi bir üst dizine çıkmak (Directory Traversal) için kullanılır.
  • Hedef dosya: /etc/passwd gibi sistem bilgisi içeren kritik dosyalar.
  • Etki: Kullanıcı listesi, veritabanı konfigürasyonları veya kaynak kodu yetkisiz kişilerce okunabilir.
Gerçek hayat örneği

Kütüphanede sadece okuma salonuna erişim kartın varken, kapı kontrolü bozuk olduğu için yetkisiz arşiv odasına da girebilmek gibidir.


LFI Nasıl Tespit Edildi?

  • DVWA File Inclusion sayfasındaki URL yapısında bulunan ?page= parametresi test edildi.
  • Parametreye ../../../../../../etc/passwd directory traversal payload'ı eklendi.
  • Manipüle edilmiş istek web tarayıcısı ve Linux terminalinde curl aracı ile hedefe gönderildi.
  • Sistemin engelleme yapmadığı ve /etc/passwd içeriğinin HTML sayfasına yansıdığı görüldü.

LFI Kanıtları

İstismar Ekran Görüntüleri
DVWA File Inclusion Test Alanı
DVWA File Inclusion Test Alanı
Curl ile LFI İstismarı
Terminal üzerinden curl aracı ile /etc/passwd dosyasının okunması
Tarayıcıda okunan passwd dosyası
Directory Traversal ile /etc/passwd dosyasının tarayıcıya yansıması

LFI Çözüm

Rapor Cümlesi
page parametresi directory traversal payload'ı ile manipüle edilmiş ve /etc/passwd içeriği yetkisiz olarak okunmuştur.
  • Dosya adını doğrudan kullanıcıdan alma — Direct Object Reference kullanılmamalı.
  • Dosya seçimlerini ID → allowlist dosya eşlemesiyle yap.
  • Path normalization uygulandıktan sonra kök dizin dışına çıkışı kesinlikle engelle.
  • Kritik konfigürasyon ve yedek (backup) dosyalarını web kökünde tutma.
  • Uygulama hata mesajlarında tam dosya yolu (Full Path Disclosure) sızdırma.
03 · SQL Injection A03:2021 — Injection

Error-Based SQL Injection

Kullanıcı girdisinin arka planda çalışan veritabanı sorgusuna güvenli bağlanmadan doğrudan eklenmesidir.

Teori ve Mantık

Zafiyet Nedir?
Sistem, kullanıcının yazdığı değeri veri değil, komutun bir parçası olarak yorumlar.
Gerçek Hayat Örneği

Öğrenci numarası alanına yalnızca numara beklenirken sistem o alanı komut gibi yorumlarsa, kişi kendi kaydı yerine tüm okulun kayıtlarını listeleyebilir.


İstismar Adımları

01
DVWA platformunda SQL Injection sayfasına gidildi.
02
Girdi alanındaki id parametresine normal değer yerine tek tırnak (') karakteri girildi.
03
Uygulamanın SQL syntax hatası verdiği gözlemlendi — sorgunun kırıldığı doğrulandı.
04
Burp Suite ile yakalanan istek sqlmap aracına verilerek users tablosu başarıyla dump edildi.

Kanıtlar

İstismar Ekranları
SQL Hata Ekranı
Tek tırnak ile tetiklenen SQL syntax hatası
Dump Çıktısı
sqlmap ile users tablosunun tam dump ekranı

Çözüm

Kullanıcı girdileri sorguya doğrudan eklenmemeli; Prepared Statement (Parametrik Sorgu) kullanılmalıdır.
Girdi tipi ve uzunluğu sunucu tarafında doğrulanmalıdır.
Veritabanı hata mesajları ham haliyle tarayıcıya yansıtılmamalıdır.
Veritabanı servis hesabı Least Privilege (minimum yetki) prensibiyle çalıştırılmalıdır.
04 · XSS (Reflected & Stored) Kritik

Cross-Site Scripting (XSS)

Kullanıcı girdisi filtrelenmeden HTML içine basılırsa tarayıcı bunu JavaScript kodu olarak çalıştırabilir.

XSS Nedir?

Temel problem: Zararlı payload anlık yansır (Reflected) veya kalıcı olarak yazılır (Stored); her iki durumda da kurbanın tarayıcısında saldırganın istediği kodlar çalışır.

Reflected XSS
Payload URL veya form üzerinden anlık olarak kurbana yansır.
Stored XSS
Payload veritabanına kaydedilir, sayfayı ziyaret eden herkes etkilenir.
  • Payload örneği: <script>alert('XSS')</script>
  • Etki: Oturum (Cookie) hırsızlığı, sahte formlar ile veri toplama veya kullanıcı adına işlem yapma.
💡
Gerçek hayat örnekleri

Reflected: Kahve bardağına yazılan ismi baristanın mikrofondan okuması gibi; ne yazılırsa o duyulur.

Stored: Herkesin okuduğu ilan panosuna zararlı bir not asmak gibi; panoya bakan herkes etkilenir.


XSS Nasıl Tespit Edildi?

  • DVWA XSS modüllerindeki name ve message alanlarına test amaçlı alert payload'ları girildi.
  • Reflected XSS kısmında, URL parametresine eklenen script'in sayfada pop-up açtığı görüldü.
  • Stored XSS kısmında, Guestbook alanına kaydedilen mesajın sayfa her açıldığında otomatik tetiklendiği doğrulandı.

XSS Kanıtları

⚡ Reflected XSS
Reflected XSS
Tarayıcıda tetiklenen anlık Reflected XSS mesajı
Stored XSS Payload
Guestbook alanına zararlı payload'ın gönderilmesi
Stored XSS
Stored XSS Tetiklenme
Sayfa yeniden açıldığında payload'ın otomatik tetiklenmesi
Stored XSS Kalıcılık
Veritabanına kaydedilen ve her ziyarette çalışan Stored XSS

XSS Etki ve Çözüm

Rapor Cümlesi
Girdi alanları encode edilmediği için gönderilen script payload'ları tarayıcı tarafından yetkisiz olarak çalıştırılmıştır.
  • Context-aware output encoding: Veriyi ekrana basarken HTML, JS veya Attribute bağlamına göre encode et.
  • Content Security Policy (CSP): Sadece güvenli kaynaklardan script çalışmasına izin ver.
  • HttpOnly Bayrağı: JavaScript'in hassas oturum çerezlerine erişmesini kesinlikle engelle.
  • Input Validation: Sadece beklenen karakter setlerini kabul et.
05 · File Upload / A08: Integrity Failures Yüksek

Unrestricted File Upload

Dosya yükleme kontrolü eksikse çalıştırılabilir PHP dosyası yüklenebilir ve sunucu tarafında kod çalıştırmaya (RCE) dönüşebilir.

Zafiyet Nedir?

Temel problem: Yüklenen dosyanın çalıştırılabilir dizinde ve doğrulamasız saklanmasıdır.

💡
Gerçek hayat örneği

Profil fotoğrafı yükleme alanına fotoğraf yerine çalıştırılabilir script kabul edilirse saldırgan sunucuda komut çalıştırmaya yaklaşır.


Nasıl Tespit Edildi?

  • Test dosyası olarak test.php oluşturuldu. İçeriğine zararsız echo çıktısı eklendi.
  • DVWA Upload formu PHP dosyasını filtreleme yapmadan kabul etti.
  • Dosya /dvwa/hackable/uploads/ dizini altında erişilebilir oldu.
  • Dosya tarayıcıdan çağrıldığında PHP kodu sunucuda doğrudan çalıştı.

İstismar Kanıtları

⚡ Upload Exploit — Adım Adım
Terminal PHP dosyası
Terminal üzerinden zararsız PHP payload dosyasının oluşturulması
Payload içeriği
Mousepad üzerinde oluşturulan payload içeriği
Dosya Seçimi
DVWA Upload formu üzerinden test.php dosyasının seçilmesi
Burp Suite Intercept
Dosya yükleme isteğinin Burp Suite Proxy üzerinden yakalanması
Ek Kanıt
Ek istismar kanıtı
PHP çalışma kanıtı
Yüklenen PHP dosyasının URL üzerinden çağrılarak sunucu üzerinde başarıyla çalıştırılması

Etki ve Çözüm

Rapor Cümlesi
Bu bulgu A08 kapsamına da bağlanır: uygulama dosyanın türünü ve bütünlüğünü sunucu tarafında güvenli doğrulamıyor.
  • Uzantı + MIME + İçerik Doğrulama: Uzantı, MIME type ve içerik birlikte sunucu tarafında doğrulanmalı.
  • Script Çalıştırmayı Kapat: Upload dizininde PHP/script çalıştırma kapatılmalı.
  • Web Kökü Dışında Saklama: Dosyalar web kökü dışında saklanmalı.
  • Rastgele Dosya Adı: Dosya adı rastgeleleştirilmeli, doğrudan URL erişimi engellenmeli.
06 · A02: Misconfig & A04: Insecure Transport Yüksek

HTTP Login, Sürüm İfşası ve Dizin Listeleme

Parolaların şifrelenmeden taşınması ve sunucunun hedef teknolojileri/dizinleri sızdırması, saldırgana çok net bir keşif haritası sunar.

Zafiyet Nedir?

Temel problem: HTTPS kullanılmaması sebebiyle kimlik doğrulama verilerinin ağ üzerinde düz metin (plaintext) okunabilmesi ve sunucu yapılandırma eksikliği nedeniyle eski bileşen sürümlerini ve iç dizinleri ifşa etmesidir.

HTTP Login
Kimlik bilgileri ağda şifresiz açık metin olarak iletilir.
Sürüm İfşası
Response header'lar Apache/PHP/OpenSSL sürümlerini sızdırır.
Dizin Listeleme
Upload dizininin içeriği herkese açık şekilde görüntülenebilir.
Gerçek hayat örnekleri

HTTP Login: Şifreni kapalı zarf yerine açık kartpostal ile göndermek gibidir; yoldaki herkes okuyabilir.

Directory Listing: Depo kapısının kilitli olmaması yetmez; içerideki tüm raf listesinin dışarıdan açıkça görünmesi de risktir.


Nasıl Tespit Edildi?

  • /dvwa/login.php sayfasına yapılan login isteği yakalandı. Kullanıcı adı ve parolanın şifrelenmeden iletildiği görüldü — username=admin&password=admin.
  • Login sonrası dönen yanıttaki Header bilgilerinde Apache/2.2.14, PHP/5.3.2 ve OpenSSL/0.9.8k gibi kritik sürüm detaylarının ifşa olduğu saptandı.
  • Bu ifşaların, saldırganın CVE araştırmasını ve exploit süreçlerini kolaylaştırdığı değerlendirildi.
  • Burp Repeater ile /dvwa/hackable/uploads/ dizinine doğrudan istek atıldı. Sunucunun 200 OK ile "Index of" ekranını döndürdüğü kanıtlandı.

İstismar Kanıtları

HTTP Login & Sürüm İfşası
HTTP Login ve Sürüm İfşası
Burp Suite ile yakalanan HTTP login isteğinde açık giden parolalar ve sızan Apache/PHP/OpenSSL sürümleri
Dizin Listeleme
Dizin Listeleme
/dvwa/hackable/uploads dizininin "Index of" şeklinde dışarıdan listelenebilmesi

Etki ve Çözüm

Rapor Cümlesi
HTTP üzerinden yapılan login isteğinde kimlik bilgileri açık metin olarak iletilmiş; yanıt header'larında sunucu bileşen sürümleri ifşa edilmiş ve /dvwa/hackable/uploads/ dizini "Index of" ekranı ile dışarıdan listelenebilir halde tespit edilmiştir.
  • HTTPS ve HSTS: Kimlik doğrulama işlemleri kesinlikle HTTPS üzerinden yapılmalı, HSTS aktifleştirilmelidir.
  • Header Gizleme: Apache için ServerTokens Prod ve ServerSignature Off uygulanmalı, X-Powered-By kaldırılmalıdır.
  • Dizin Listelemeyi Kapatma: Options -Indexes direktifi ile açık dizin gösterimi devre dışı bırakılmalıdır.
  • Yama Yönetimi: Apache, PHP, OpenSSL güncel güvenlik yamalarına sahip versiyonlara yükseltilmelidir.
07 · A07 & A09: Auth & Monitoring Failures Kritik

Brute Force ve İzleme Eksikliği

Sistem giriş denemelerini sınırlandırmazsa parolalar otomatikleştirilerek kırılabilir; engelleme mekanizması yoksa bu saldırı uzun süre tespit edilemez.

Zafiyet Nedir?

Temel problem: Login mekanizmasının parola deneme sayısını (Rate Limiting) sınırlamaması ve bu çoklu başarısız isteklerin sistem tarafından anormal bir davranış olarak algılanıp güvenlik alarmı/bloklaması üretmemesidir.

Gerçek hayat örneği

Bir kapı kilidinde yüzlerce yanlış şifre denenmesine rağmen kilidin kendini bloke etmemesi ve kapıdaki güvenlik görevlisinin bu durumu görüp alarm vermemesidir.


Nasıl Tespit Edildi?

  • DVWA Brute Force modülünde username=admin&password=12345 ile manuel bir deneme yapılıp Burp Proxy ile yakalandı.
  • Bu istek Burp Intruder'a aktarıldı ve yalnızca parola parametresi payload noktası olarak işaretlendi.
  • Hazırlanan kelime listesi ile hedef sisteme otomatik ve çoklu parola denemeleri gönderildi.
  • İstekler devam ederken sistemin IP adresini bloklamadığı, gecikme yaşatmadığı ve CAPTCHA sormadığı gözlemlendi.

İstismar Kanıtları

Brute Force — Adım Adım
İlk Brute Force İsteği
Adım 1: İlk parola denemesinin Burp Suite ile yakalanması
Intruder Payload Listesi
Adım 2: Burp Intruder üzerinde çoklu parola denemelerinin yapılandırılması
Intruder Sonucu
Adım 3: "admin" parolasında Length değerinin farklı çıkması ve başarılı giriş yanıtının alınması

Etki ve Çözüm

Rapor Cümlesi
Burp Intruder ile çoklu parola denemesi yapılmış, sistem görünür bir engelleme/uyarı davranışı üretmeden doğru parolada sisteme girişe izin vermiştir.
  • Rate Limiting: Kullanıcı adı ve IP adresi bazlı deneme sınırları uygulanmalıdır.
  • Monitoring & Alarming: Kısa sürede çok sayıda başarısız deneme SIEM'e alarm olarak düşmelidir.
  • Anti-Otomasyon: Çoklu başarısız denemelerden sonra CAPTCHA veya ekstra doğrulama devreye girmelidir.
  • MFA Kullanımı: Yönetici ve hassas hesaplarda Çok Faktörlü Kimlik Doğrulama zorunlu olmalıdır.
  • Hata Yönetimi: "Kullanıcı adı yanlış" veya "Parola yanlış" gibi ayrıştırıcı mesajlar üretilmemelidir.
ÖZET

Birleşik Saldırı Zinciri ve Sonuç

Gerçek saldırılar çoğu zaman tek bir bulguyla değil, birden fazla zafiyetin birleşmesiyle sistemleri ele geçirir.

Birleşik Saldırı Zinciri (Attack Chain)

Bu laboratuvarda tespit edilen bulguların uçtan uca bir senaryoda nasıl kullanılabileceğini aşağıda görebilirsiniz:

1
Keşif
Header sürümleri ve Dizin İfşası
2
Giriş
Açık giden HTTP parolalar
3
Deneme
Engellenmeyen Brute Force
4
Etki
Dosya Yükleme ve RCE
  • Misconfiguration (Yanlış Yapılandırma), saldırgana teknolojilerin haritasını verir.
  • HTTP Login ve Brute Force açık alanları, hesap ele geçirmeyi ve yetki yükseltmeyi kolaylaştırır.
  • SQLi, LFI ve XSS gibi zafiyetler veri bütünlüğünü ve kullanıcı oturumlarını doğrudan zayıflatır.
  • File Upload (Dosya Yükleme) açıklığı, başlangıçtaki küçük bir bulguyu sunucunun tamamen kontrol altına alınmasına (RCE) kadar büyütebilir.

Savunma Öncelikleri (Remediation)

  • 1. Aşama (Kritik): Önce uzaktan kod çalıştırma (RCE) ve kısıtlanmamış dosya yükleme (File Upload) riskleri kapatılmalıdır.
  • 2. Aşama (Yüksek): SQL Injection, LFI ve XSS açıkları kod seviyesinde düzeltilmelidir.
  • 3. Aşama (Orta/Temel): Kimlik doğrulama mekanizmaları güçlendirilmeli, Rate Limiting ve MFA kontrolleri eklenmelidir.
  • 4. Aşama (Altyapı): HTTPS zorunluluğu, Header gizleme, yazılım güncellemeleri ve Directory Listing kapatılarak temel güvenlik zemini oluşturulmalıdır.

Sonuç: Kanıtı Oku, Etkiyi Açıkla, Çözümü Uygula

Bu laboratuvar dökümantasyonundaki temel amaç; zafiyeti sadece araçlarla (Burp Suite, sqlmap) çalıştırmak değil, arka planda neden oluştuğunu anlamak, kanıtını doğru şekilde sunabilmek ve geliştiriciler için kod seviyesinde nasıl düzeltileceğini öğrenmektir.

Not: Bu laboratuvar çalışmasında incelenen tüm saldırı ve keşif vektörleri, tamamen yalıtılmış ve yasal izinli sistemlerde eğitim amacıyla gerçekleştirilmiştir. Güvenlik yaklaşımımız her zaman savunmayı (Blue Team) güçlendirmek üzerine kuruludur.

OWASP Eğitim ve Kanıt Odaklı Yaklaşım
Eğitim Sonucu: OWASP, Burp Suite, DVWA, Kanıt ve Savunma Bütünlüğü