Categories
OWASP PortSwigger Vulnerability

SQL Injection – Lab #1 SQL Injection Vulnerability in WHERE Clause Allowing Retrieval Of Hidden Data

WHERE ile Gizli Verileri Çekme

SQL Injection zafiyetini anlamak için SQL sorgularının nasıl yazıldığını anlamalıyız. Bir veritabanında nasıl sorgu yapılır, tablolar nasıl çekilir vb. sorgulama işlemlerine hakim olmak gerekir.

SQL sorgusu yaparken SELECT, DELETE, UPDATE ve INSERT gibi değerler kullanılır. İsimlerden anlayacağımız gibi SELECT bir tablodaki değeri çekmeye, DELETE belirtilen tablo verisini silmeye, UPDATE değiştirmeye INSERT ise yeni bir veri yüklemeye olanak tanır. Bunun yanı sıra WHERE değeri ile de tablodaki hangi sütundan veri çekilecek ise o belirtilir ve sorgular istenilen veriye/bilgiye göre şekillendirilir.

Eğer uygulama üzerinde bir açık var ise WHERE ile istediğiniz değeri çekebilirsiniz.

Lab uygulama ekran görüntüsü

Elbette uygulamayı öncelikle inceliyoruz. Bazı kategorilerin olduğunu ve uygulamadaki ürünlerin bu kategorileri yerleştirildiğini görüyoruz. Bir uygulamada SQLi zafiyetinin olup olmadığını anlamanın en hızlı yolu tek tırnak ( ‘ ) işaretini kullanmaktır. URL yazan “category=” ifadesinden sonra tek tırnak işareti ile test ediyoruz.

Tek tırnak eklenmesi sonrası alınan sunucu hatalı ekran görüntüsü

Burada arka planda veritabanına aşağıdaki gibi bir sorgu gidecektir.

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

Artık uygulamada bir zafiyet olduğunun farkındayız. Burp Suite ile araya girerek istediğimiz sorguları gönderebiliriz. İstersek URL üzerinden de istek gönderebiliriz. category’den sonra ‘+OR+1=1– değerini yazıyoruz ve aşağıdaki ekran görüntüsünü alabiliyoruz. Yeni ekran görüntümüzde değer çekebildiğimizi görüyoruz. Bu aşamadan sonra daha da ileri gidilip tablo isimleri, bu tablolardaki değerler rahatlıkla çekilebilir.

WHERE ile çekilen rastgele kategori değerlerinin ekrana yansıyan görüntüsü.

Leave a Reply

Your email address will not be published. Required fields are marked *