top of page

Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
2 dakikada okunur

Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

Bu laboratuvar, ürün kategori filtresinde bir SQL enjeksiyon açığı içermektedir. Kullanıcı bir kategori seçtiğinde, uygulama aşağıdaki gibi bir SQL sorgusu gerçekleştirir:

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

Laboratuvarı çözmek için, uygulamanın bir veya daha fazla yayımlanmamış ürünü görüntülemesine neden olan bir SQL enjeksiyon saldırısı gerçekleştirin.

Sitede ürünleri kategoriye göre filtrelediğimde, backend tarafında şu SQL sorgusunun çalıştırıldığını öğrendim:

SELECT * FROM products WHERE category = ‘Gifts’ AND released = 1

Bu sorgu açıkça şunu söylüyor:

- category = 'Gifts' → Seçilen kategori

- released = 1 → Sadece yayında olan ürünler

Yani normal şartlarda gizli ürünlerin gelmemesi gerekiyor.

Burada kritik nokta şu:

category parametresi kullanıcıdan geliyor ve hiçbir filtreleme yapılmadan SQL sorgusuna ekleniyor.

Bu da demek oluyor ki: category alanını bozabilirsem, WHERE koşulunu tamamen kontrol edebilirim.

Burp Suite ile kategori filtresini gönderen isteği yakaladım ve category parametresini şu şekilde değiştirdim:

Gifts' OR 1=1--

Bu input backend’de sorguyu şu hale getiriyor:

Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
SELECT * FROM products 
WHERE category = 'Gifts' OR 1=1--' AND released = 1

Neden İşe Yarıyor?

Burada iki kritik SQL mantığı var:

OR 1=1

- 1=1 her zaman TRUE

- OR olduğu için, tüm WHERE koşulu TRUE oluyor

--

- SQL’de -- yorum satırı demek

- Ondan sonrası çalıştırılmıyor

Yani bu kısım tamamen devre dışı kalıyor:

AND released = 1

Backend aslında şunu çalıştırmış oluyor:

SELECT * FROM products WHERE TRUE

- Yayında olmayan ürünler

- Gizli ürünler

- Hepsi listeleniyor

Bu lab bana şunu net bir şekilde gösterdi:

- WHERE clause içinde yapılan SQL injection

- İş mantığını (business logic) tamamen bypass edebilir

- released = 1 gibi kontroller tek başına güvenlik değildir

- Kullanıcı girdisi filtrelenmiyorsa, tüm sistem çöker

Bu, SQL injection’ın en temel hali ama gerçek hayatta da çok sık görülen bir hata.

Bir sonraki labta görüşmek üzere 🌸

 
 
bottom of page