Lab'in amaci, bir filtre parametresi uzerinden gizli verileri elde etmek. Hedefimiz, WHERE clause icinde kullanilan bir parametreyi manipule ederek tum verileri listelemek.

Bu senaryo gercek dunya uygulamalarinda cok sik gorulen bir hatayi temsil ediyor.

1. Uygulamanin Incelenmesi (Enumeration)

Lab'i actigimizda karsimiza bir e-ticaret benzeri urun listeleme sayfasi cikiyor.

Filtre butonlarindan birine tikladigimizda URL su sekilde degisiyor:

/filter?category=Tech+gifts
None

Burada dikkat ceken nokta su:

  • category parametresi kullanici tarafindan kontrol ediliyor
  • Backend tarafinda SQL sorgusu icinde kullaniliyor olabilir

Muhtemel backend sorgusu su sekilde olabilir:

SELECT * FROM products WHERE category = 'Tech gifts'

Bu durumda category parametresi potansiyel injection noktasi olabilir.

2. Zafiyet Testi (Syntax Error Kontrolu)

2. Zafiyet Testi (Syntax Error Kontrolu)

SQL Injection olup olmadigini test etmek icin en temel yontemlerden biri tek tirnak (') karakteri gondermektir.

URL'yi su sekilde degistirdim:

?category=Tech+gifts'

Sonuc:

Internal Server ErrorSimdi mantiksal bir test yapma zamani.

None

Bu hata cok kritik bir gostergedir.

Sebebi su:

Backend tarafinda string kapatilmis ancak sorgu yapisi bozulmustur. Bu da kullanici girdisinin dogrudan SQL sorgusuna eklendigini gosterir.

Bu noktada SQL Injection ihtimali neredeyse kesinlesmis olur.

3. Exploit Asamasi — True Condition Injection

Simdi mantiksal bir test yapma zamani.

Su payload'i kullandim:

?category=Tech+gifts' OR 1=1--

Bu payload'in parcali analizi:

  • ' → string'i kapatir
  • OR 1=1 → her zaman dogru olan kosul
  • — → geri kalan sorguyu yorum satirina alir

Eger backend sorgusu su sekildeyse:

SELECT * FROM products WHERE category = 'Tech gifts'

Injection sonrasi sorgu su hale gelir:

SELECT * FROM products WHERE category = 'Tech gifts' OR 1=1--'

1=1 her zaman dogru oldugu icin tum kayitlar listelenir.

Ve sonuc:

Lab basariyla cozuldu.

None

4. Bu Zafiyet Neden Olusur?

Bu tur zafiyetler genellikle su nedenlerle ortaya cikar:

  • Kullanici girdisinin dogrudan SQL sorgusuna eklenmesi
  • Parametrik sorgu kullanilmamasi
  • Input validation eksikligi

Guvenli bir uygulamada su teknikler kullanilmalidir:

  • Prepared statements
  • Parameterized queries
  • ORM kullanimi
  • Server-side validation

5. Ogrenilen Dersler

Bu lab bir kez daha sunu gosteriyor:

Basit bir filtre parametresi bile dogru korunmazsa tum veritabanini ifsa edebilir.

SQL Injection hala OWASP Top 10 listesinde yer alan kritik bir zafiyettir ve gercek dunya uygulamalarinda halen gorulmektedir.

Bu nedenle:

  • Input asla guvenli kabul edilmemeli
  • Her zaman parametrik sorgular tercih edilmeli
  • Hata mesajlari kullaniciya acik sekilde gosterilmemelidir

Sonuc

Bu writeup'ta bir WHERE clause uzerinden SQL Injection zafiyetini adim adim analiz ettik.

Enumeration Syntax test True condition exploit Ve basarili exploit sonucu

Bir sonraki yazida UNION tabanli SQL Injection senaryosunu inceleyecegim.

Written by telix