Selamlar,daha önce WFP I ( Web For Pentester I ) egzersizlerine bakmıştık.Yine aynı ekip tarafından oluşturulmuş harika bir egzersiz serisi bulunuyor.

Web For Pentester II

Birinci egzersizlere göre biraz daha farklı konular bulunuyor.

Burada gördüğünüz gibi aslında konularımız biraz daha zorlaşmış,farklılaşmış.(WFP I’e göre)

Bu yazımızda SQL Injection bölümünü ele alacağız.

Birinci yazımızın linki : https://canyoupwn.me/wfp-i-sqli/

Bu yazımızda da farklı olarak sadece bypass yöntemlerini anlatacağız.Biraz da sizin taşın altına elinizi koymanızı bekleyeceğiz. 🙂

Level 1 :

Birinci levelimiz biraz basit bir işlem ile bypass edilebiliyor.

'or '1'='1

Burada sql bypass kodumuz başarıyla çalıştığı ve 1=1 her zaman True döndürdüğü için başarıyla giriş yapabiliyoruz.

Level 2:

Bu kısım da ise sql kodumuzu sınırlandırmamız gerekiyor.Çünkü geri döndürülen veri kısıtlanmış.Bu yüzden eğer sınırlandırmazsak bir işe yaramıyor.

' or 1=1 LIMIT 1 #

Level 3 :

Bu level biraz karışık gelebilir.Şöyle:

Bu kısımda username kısmında ki tek tırnak ( ‘ ) karakterini kaçış karakteri ile ( \ ) içerisine password kısmını almasını sağladık.

Daha sonra password kısmımıza ise en basit bypass yöntemimizi yazdık.

Username kısmı :

selam\

Password kısmı :

'or+1=1 #

Level 4 :



Bu kısımda adres çubuğu kısmında yazan string’e göre bize database üzerinden veri getiriyor.Yani aslında ne yazarsak bize onun kullanıcı adını getirecek.

'h'or 1=1

Yukarıda ki bypass yöntemimizi yazarak tüm kayıtları karşımıza getirebiliriz.

Burada bize sadece bu bilgiler lazım olmayacağı için

1.yazımız da ki ilk levelin bypassdan sonra ki işlemleri uygulayabilirsiniz.

Link : https://canyoupwn.me/wfp-i-sqli/

Aşağıda ki kısımdan sonrasını uygulayabilirsiniz.

order by 5 %23

Level 5 :

Bu kısımda eğer adres çubuğunun sonuna or 1=1 koyarsak bize hata vericektir.Bizde buradan yola çıkarak bypass yapabiliriz.

Burada hata verdirmesini sağladık.Hadi bypass edelim.



2 union select * from users

Union operatörünün görevi arkaplanda çalışan sorgunun ardından aslında ikinci,üçüncü, …… sorgu çalıştırmamızı sağlıyor.

Detaylı bilgi : http://www.w3schools.com/sql/sql_union.asp

Level 6 :

5.level ile aynı şekildedir.Tek fark burada sorguyu username ile gruplamasıdır.Yani sorgunun sonunda GROUP BY operatörü kullanılmakta.

Arka planda ki kod aşağıda ki gibidir.

SELECT * FROM users GROUP BY username

Level 7 :

Burada eğer

union select * from users

bypassını kullanırsak bize aşağıda ki hatayı verecektir.

Should only return one user…



Gördüğünüz gibi burada bize fazladan bir sütun,satır çekmemizi engelliyor.Ne yazık ki group_concat’de de aynı hatayı vericektir.

Burada yapabiliceğimiz tek şey adresin sonunda ki id kısmını silerek sadece ? işareti kalmasını sağlamak.Bu şekilde tüm bir tabloyu görebiliyoruz.

Ama bize çok fazla bir veri göstermediği bir gerçek.

Level 8 :

Bu bölümde bize bir kullanıcı kayıt sayfası gösteriliyor.Tek tırnak atıp arkaplanda nasıl bir kod çalıştığına bakabiliriz.



SELECT * FROM users WHERE username=''union select 1,2,3'

Burada gördüğünüz gibi koyduğumuz tek tırnakdan sonra işlemimizi yapabiliyoruz ama sondaki tek tırnağı da # ( diyez ) ile geçersiz kılmamız gerekiyor.

selam'union all select 1,2,group_concat(table_name)from information_schema.tables #

Level 9 :

Bu kısımda biraz uğraşmamız gerekebiliyor.Çünkü escape_special_character gibi çeşitli fonksiyonlar ile bypass yöntemlerimiz işe yaramıyor.

Hatta baya uğraştım diyebiliriz ve pes edip kaynak kodlarına bakmak zorunda kaldım.

Burada gördüğünüz gibi Character_Set “GBK” olarak belirlenmiş ? Sizinde kafanızın üstünde hayali bir ampül yandı sanırım değil mi ?

Tam da Karakter Setlerinden GBK ve Big5 setleri için uygun olan bir bypass yöntemi mevcut.

呵' or 1=1 #