Merhaba yine bir SQL konusu. @x4807 konu hakkında bilgi verdiği için kendisine teşekkür ederim :)) . Baştan diyeyim konunun devamı olacaktır.





Nedir Bu Kör Enjeksiyon

Blind injection olarak da geçer. Eğer ki hedef sistemde unıon select işlemleri sonuç vermez ise blind injection denemeleri yapılabilir. Bu yöntemde Binary Search kullanılabiliyor. Yani belli bir değere ulaşılmaya çalışılıyor. Örneğin veri tabanında ki 85. id ye ulaşmak için veri tabanına 50 den büyük olduğunu sorgulatırız. Daha sonra 100 den azaltarak veya 50 den arttırarak 85 değerini elde etmeye çalışırız bu bu şekilde devam eder. Mantık olarak böyle. Kör enjeksiyon'un normal SQL Enjeksiyonundan farkı nedir dersek. Burda gelen cevaplar bazen sonuç vermeyebiliyor. Nasıl olduğunu DVWA üzerinden anlatacağım. Bu yüzden kör enjeksiyon deniliyor aslında.





Kör Enjeksiyonlar Nerelerde Rastlanabilir

İnputlara dayalı bir enjeksiyon mantığı olduğu için inputlar dan oluşan yerlerde rastlanabilir. Daha çok Post isteklerinde rastlanıyor. Neler olabilir derseniz örneğin şifre değiştirme , kullanıcı bilgisi edinme , bir film aratma vs. gibi . Aslında sistemin bizden bir veri isteyip bu veri karşılığında bilgiler çıkarılan yerlerde rastlanabiliyor.






Kör Enjeksiyon Kullanılarak Ne Elde Edilebilir?

Eğer bir site de kör enjeksiyon olması durumunda hedef sistem üzerinden gelen post istekleri üzerine oynamalar yapılabilir. Bu da nelere sebebiyet veriyor derseniz DVWA üzerinden blind injection'u anlatacağım. Ama genel olarak baktığımızda gelen geçen true - false değerleri kontrol altına alınabiliyor. Bir true veya false değerinin değiştirilmesi hedef sistemin kandırılması olarak. Bunlar gerçekleştirilince enjeksiyonun sömürülmüş olması durumu söz konusudur.






DVWA Üzerinden Blind İnjection Tespiti Yapmak

Şimdi öncelikle DVWA kurmamız gerekmekte. Kurulup açtıktan sonra security'i önce low alalım medium da da nasıl bypass edildiğini göstereceğim. Önce normal SQL İnjection a giriş yapalım. Ve tek tırnak yani ' bırakalım. Bunu yapınca ne yapacak örneğin bir username e tek tırnak girince ki sql sorgusu;

Kod:
SELECT * FROM users WHERE username='''


Şeklinde olacaktır. Hani SQL de gelen giden sorguları iki tane tek tırnaklar içine alıyordu bizde bundan yararlanarak sistemi bypass ediyorduk yani hackliyorduk. Bu sorgu yapıldığında üç tane tek tırnak durumunda bize SQL Syntax hatası verecektir. Aynı şekilde DVWA'da blind injection da tek tırnak girersek hata vermediğini göreceğiz.

NOT: SQL Enjeksiyon tespiti sırasında kullanılan tek tırnak gibi şeyler esnasında sistemin bize bir sonuç vermemesi sistemde bir enjeksiyon olmadığı manasına gelmez. Sistemde Kör enjeksiyon olabilir.

Hem normal SQL Enjeksiyonunda hem de Kör de bunu yapıp resimler halinde vereyim.









# Fark ederseniz ilkinde sql sytax verdi #
# Diğerinde ise böyle bir id database de kayıtlı değil dedi #

Genel olarak farkı bu aslında. Bazen hiç sonuç bile vermeyebilir tek tırnak koyunca. Aynı sayfayı verebilir size işte orda kör enjeksiyon olabilir olmayadabilir. Peki olup olmadığını nasıl test ederiz? Bir takım istekler atılmalıdır databse'e . Eğer sonuç verir ise bunun tespiti sağlanabilir. Yapalım tespitini.






# Öncelikle hedef sistemi tanıyalım. Hedef sistemimizde bir numara giriyoruz ve o numaraya ait bilgiyi bize veriyor #
# Bu sonuçlar iki tane first name ve last name #
# 1 girdiğimizde admin bilgisini veriyor #

Şimdi bu bilgileri öğrendik. Hedef sistem üzerinde şu tarz kodlar çalıştırabiliriz;

Kod:
1' union select 1,table_name from information_schema.tables#

Kod:
1' union select database(),user()#







# İlk kodumuzda birinci yani admin kullanıcısını seçip hedef sistemi bypass etmek için kandırmak için tek tırnak koyuyoruz. Daha sonra kendimiz bir sorgu bir select yaratmak için union select kullanıyoruz. Ve geriye kalan kodlar ile de bilgileri alıyoruz #
# İkinci kodda ise aynı şekilde. database() ve user() koyarak bilgileri alıyoruz. İki tane istek koyduk database ve user olarak sebebi karşımıza iki veri çıkartması. Sistemin bu özelliğini kullandık #

Bunları çalıştırdığımızda aslında bypass etmiş oluyoruz sistemi. Benim bir önceki SQL Enjeksiyonunu Anlamak konusuyla aynı mantık ama tek farkı bize enjeksiyon yok gibi gösterebiliyor. Bu kodları resimler halinde çalıştırıp atayım.

NOT: Benim sistemimde bir bozukluk olduğu için testi SQL İnjection da yapacağım siz Blind de yapabilirsiniz.




İlk resimde bir sürü tablo bilgisi. İkinci resimde ise database ismini öğrendik. Bu bilgiler ile SQL bilen adam database içinde gezinir bilgileri alır bu sayede. Peki biraz daha yüksel level da nasıl oluyor.






Medium'da Bypass Etmek

Not: Öncelikle # işareti ne anlama geliyor derseniz # den sonraki komutlar çalıştırılmıyor SQL de. Ama şöyle bir şey varki örneğin username e admin# girdiniz. Giden sorgu 'admin#' olacağı için burda işe yaramayacaktır sistem bunu user olarak algılar. Siz gidip admin'# yaparsanız bu sefer sql de bu 'admin'#' şeklinde olacağı için bypass edilecektir.

Şimdi medium da bir admin loginin de şu tarz bypass komutları denenebilir.

Kod:
'OR 20=20#


( Burda neden 20=20 verdik. 1=1 yapılyor genelde de burdaki mantık 20 20 ye eşit mi eşit o zaman true veriyor bize SQL de o şekilde. Web sitesini kodlayan adam php kodları if else ler ile 1=1 karakterlerine izin vermemiş olabilir ama 20=20 olabilir )

Veya..

Kod:
'AND 20=20#


( Her zaman OR kullanılmak zorunda değilsiniz. AND'de var. Ezbere iş yapmamak gerek )

Veya..

Kod:
'+OR+20=20#


( Burdaki + lar ne derseniz. Boşlukların yeri + lar ile doldurulabilir. Bunu order by de url de order+by+.....--+- olarak da kullanırken görüyoruz )

Veya..

Kod:
'+OR+20=20%23


( %23 # temsil ediyor. Tek tırnağı ise de %27 temsil ediyor. Bunları url de deniyerek görebilirsiniz. Örneğin url ye tek tırnak koyup enter basınca %27 gelecektir. )

Konunun devamında Burp Suite ile gelen giden true false değerleri üzerinde oynamayı göstereceğim. Blind mantığı normal sql ile aynı tek farkı bazen cevaplar arka planda çalışabilir. Bizde bunu göremediğimiz için enjeksiyon yok sanarız. Konum bu kadardı iyi forumlar dilerim :))