Lab: SQL injection UNION attack, determining the number of columns returned by the query
Lab: SQL injection UNION attack, determining the number of columns returned by the query
Bu lab, ürün kategori filtresinde bir SQL injection zafiyeti içeriyor. Sorgu sonuçları sayfada göründüğü için, UNION kullanarak başka tablolardan veri çekmek mümkün. Ama önce UNION saldırısının temel şartını çözmem gerekiyor: Orijinal sorgu kaç kolon döndürüyor?

Bu lab’da hedefim tam olarak buydu.
Siteyi açınca ürünlerin kategoriye göre filtrelendiğini gördüm (ör. Gifts ). Kategorilerden birine tıkladığımda URL’de şu tarz bir parametre vardı:
- category=Gifts
Bu parametrenin SQL sorgusuna gittiğini test etmek için sonuna tek tırnak ekledim:
- Gifts'
Bazı lab’larda direkt hata görebiliyorsun, bazılarında generic error dönüyor. Burada önemli olan: yanıtta bir farklılık yakalamak .
UNION saldırısının çalışması için şu şart sağlanmalı:
UNION ile eklediğim SELECT, orijinal sorguyla aynı sayıda kolon döndürmeli.
Kolon sayısını bilmediğim için deneye deneye bulmam gerekiyor.
Veri tipi uyumsuzluğu yaşamamak için de NULL kullanıyorum çünkü NULL çoğu veri tipine uyum sağlayabiliyor.
Kategori parametresine sırayla şu payload’ları uyguladım:
Gifts' UNION SELECT NULL--
Hata / bozuk response aldım.

Demek ki 1 kolon değil.
Gifts' UNION SELECT NULL,NULL--Yine hata / bozuk response.

Demek ki 2 kolon da değil.
Gifts' UNION SELECT NULL,NULL,NULL--
Bu sefer hata yok. Sayfa normal şekilde yüklendi. Lab da burada “Solved” oldu.
Ben de ilk an burada takıldım ama olay şu:
- UNION başarılı olunca, veritabanı sonuçlara ek bir satır ekliyor.
- Bu satırın içi NULL,NULL,NULL olduğu için ekranda genelde “görünür bir şey” olmuyor.
Yani lab’ın verdiği sinyal şu:
“Hata kesildiyse kolon sayısı doğru demektir.”
Bu lab özelinde başarı kriteri de zaten bu: Doğru sayıda NULL ile UNION’u çalıştırıp kolon sayısını bulmak.
Bu adımlardan sonra şunu netleştirdim:
Orijinal sorgu 3 kolon döndürüyor.
Bu bilgi, sonraki UNION lab’larında çok işime yarayacak çünkü bundan sonra:
- NULL yerine string koyup hangi kolonun text tuttuğunu bulacağım,
- sonra da veritabanından gerçek verileri çekmeye başlayacağım.
Kısa Özet
- UNION saldırısı için kolon sayısı aynı olmalı.
- NULL ile deneye deneye kolon sayısını buldum.
- UNION SELECT NULL,NULL,NULL-- çalıştığı için sorgunun 3 kolon döndürdüğünü anladım.
- Lab çözüldü.
Bir sonraki labta görüşmek üzere🌸







