SQL INJECTION

SQL Injection Nedir Nasıl Tespit Edilir?

SQL (Structured Query Language), müşteri-kullanıcı gibi bilgilerin bulunduğu yer yani veri tabanıdır (data base). Saldırganın çeşitli yerlere sql sorguları girmesi ile bir sunucudan veri çekmesine veya bir kullanıcı ekleyip silmesine çeşitli işlemler yapabilmesine sql injection deriz. 

 

Peki Nasıl Tespit Edilir?

Kullanıcının arka planda sorgu yapabildiği her yerde bu testler yapılabilmektedir. Hatta bir template html sayfalarında da deneme yapılabilir. Kullanıcının doğrudan veri tabanı ile alaksı olan login sayfalarında da test edilebilir. Tespit aşamasında direkt olarak bir tablo sayısını tutturmaya çalışmak bu açığın varlığını test etmede bir hayli zaman kaybı olur bu yüzden daha basit kodlar denemekte fayda var örneğin bir https://alperencoskun.com/adsad/deneme?php=2121 url üzerinde tek sayılı bir tırnak işareti ile sayfanın hata vermesini inceleyebiliriz. Örnek:

https://alperencoskun.com/adsad/deneme?php=2121’’’ şeklinde deneme yapabiliriz tırnak sayısını çift tek olarak da deneyebiliriz çünkü bu bölüm aslında developerın da düzenlemelerine göre kısmen de olsa değişiklik gösterebilir.

Url veya input yerinde bir sql sleep kodu çalıştırabiliriz. Bu tespit aşamalarında BurpSuite Repeater aracını kullanmak önemlidir. Çünkü kör sql (blind sql) olabilir yani direkt olarak sayfada gözükmez fakat response bölümünde karşımıza çıkabilir. Veya sleep kodunu tam olarak anlayamayabiliriz bu da repeater aracında gecikme süresini daha rahat bir şekilde anlamamızı sağlayabilir.

Önemli olan nokta da şu 10 dan fazla veri tabanı çeşidi olduğu için veri tabanı yapısını anlamamız gerekiyor. Genelde küçük farklar var örneğin ORDER BY 1 ;  şeklinde olabilir veya sonu #,-- şekillerinde de olabilir. Aktif-pasif taramalarda hangi veri tabanı çeşidi kullanıldığını bilmiyorsak veya direkt olarak anlayamıyorsak manuel de sayfa cevaplarını bu şekilde test edebiliriz.

 

Daha iyi anlamak adına PortSwigger’ın labını çözelim

image

Burada direkt olarak category parametresine sayfa üzerinde tıkladığımız kategori sekmelerini ve çalışma methodunu vermiş bunu url üzerinde görelim

https://acb91f411sadasdasda.web-security-academy.net/filter?category=Gifts

Yukarıda category=Gifts te gördüğümüz gibi yani Gifts yerine bir tırnak eklediğimizde muhtemelen bir hata alacağız.

image

Yukarıdaki gibi server error aldık bunu syntax error gibi çeşitli şekilde görebiliriz.

Şimdi ‘ or 1=1--sorgusu çalıştırmayı ve sayfada olan veya olmayan ürünleri getirmiş olacağız.

image

Ve başarılı olduk bir sorgu çalıştırmış olduk. Gerçek bir web sitesinde Order By gibi komutları kullanarak veri tabanı kolon hakkında bilgi edinebiliriz. 

Bir başka labaratuvarını inceleyelim.

image

Burada da administrator olarak giriş yapmamızı istiyor.

Access the lab dedikten sonra my account bölümünden giriş yapmayı deneyeceğiz.

Burada kullanıcı adını administrator olarak gireceğim fakat şifreyi ‘ or 1=1—şeklinde deneme yaparak giriş yapmayı deneyeceğim.

image

Ve direkt olarak giriş yapabildik. 

Ek bilgi olarak gerçek bir web sitesinde bu tür saldırılarda tespit aşamasında doğru kullanıcı adı ve doğru şifre’ aNd 5465=5465--   şeklinde yapılan denemeler veya çeşitli encoding yaparak daha rahat sonuca ulaştırabilir. 

 

Bu güvenlik açığından bir lab daha çözelim bunun sebebi ne kadar çok mantığını anlarsak ve yöntemlerini anlarsak daha iyi olur.

 

image

Bu labaratuvarda BurpSuite de kullanarak union ile kolon sayısını bulacağız. Bunun amacı gerçek bir web sitesinde kolon sayısını bulduğumuzda kolon sayısını dikkate alarak kolonlar üzerine sorgu yapabilmemiz. Yani

 ‘Union select null-- bir sonraki adımda ‘Union select null,null-- şeklinde en son kolon sayısını doğruladığımızda, ‘Union select null , null, kullanici_adi-- şeklinde sorgu yapabileceğiz. Şimdi çözüme geçelim:

image

İlk aşamada böyle bir hata aldık devam ediyoruz.