Login Sayfası İstismarı
Login Sayfası İstismarı Nedir ?
Arkadaşlar günümüz uygulamarındaki (web,desktop) hemen hemen hepsinde kimlik doğrulama mekanizmaları
bulunmaktadır. Bu kimlik doğrulama işlevi ise bir veritabanı tablosunda bulunan kullanıcı adı ve parola
bilgilerinin kullanıcının girmiş olduğu veriler ile karşılaştırılması ile yapılmaktadır. Bu karşılaştırma
SQL cümleciği bir SQL enjeksiyonu zafiyetine sahip ise ,uygulamanın kimlik doğrulama mekanizmasını göz
ardı edilerek , herhangi bir bazen özellikle seçtiğimiz kullanıcı ile uygulama giriş yapma olanağı oluşabilmektedir.
Bu kontrol ise kimlik doğrulama işlevi barındırdan her uygulamaya yapılacak ilk testlerinden biridir.
İlgili kimlik doğrulama mekanizmalarına basit bir örnek vererek , zafiyeti örnekleme adına bişiler yapalım ;
public Users login (String username, String password) {
Users user = new Users();
...
ResultSet rs=stmt.executeQuery(’’select*FROM users WHERE username=’’+username+’’ and password=’’+password+’’);
while (rs.next()) {
user=newUsers(rs.getInt(’’userıd’’),Usertype.USER,rs.getstring(’’username’’));
}
...
return user ;
}
Login metoduna gönderilen username ve password parametrelerinin hiç bir kontrolden geçmeden SQL cümleciği içerisine
eklendiğini varsayalım . İlgili SQL cümleciği ise users tablosunda kullanıcıdan gelen kullanıcı adı ve parola bilgilerine
bakarak kullanıcının bilgilerini bir obje içine doldurmaktadır.Dolayısıyla uygulamada bu obje içerisindeki verinin varlığını
kontrol ederek , kullanıcıya giriş hakkı vermektedir.Şimdi kullanıcıdan gelebilecek ne tür bir girdi ile bu kontrolün
aşılabileceğine bakalım .
Resimdeki örnekte arkadaşlar parolaya ihtiyaç yoktur , ister CW yazın isterseniz Ordu-yu Lojistik yazın önemi yoktur .
İlgili örneğimizde kullanıcı adı ve parolanın sorgulandığı SQL cümleciği içerisine yerleştiğinde SQL cümleciği oluşacaktır ;
SELECT * FROM users WHERE username=’a’ or ’1’=’1’--’ and password=’t4’
Cümleciğine baktığımızda ise users tablosundan username bilgisi a olanlar veya 1=1 olanlar diye bir ifade görülüyor olacaktır.
İfade içerisinde veya(OR) kullanıldığı için WHERE’in sağ tarafı her zaman 1(true) dönecektir.İlgili veritabanının da ORACLE
olduğunu varsayarak -- karakteri sonrası yorum satırı olarak algılanacak ve işlenmeyecektir.Dolayısıyla bu sorgu ;
SELECT * FROM users WHERE username=’a’ or ’1’ halini alacaktır .
Buda users tablosundaki tüm kullanıcıların listelenmesini sağlayacaktır ve tek bir user objesi oluştuğu için ilgili tablodaki
son kullanıcının bilgileri dolacaktır.Bu sayede uygulamanın users tablosundaki son kullanıcı ile uygulamaya giriş yapılacaktır.
Bu durumda ilk kanı arkadaşlar ; İlk kullanıcının yönetici olduğu yönündedir , açıkcası genelde durum böyledir.Eğerki arkadaşlar
lk kullanıcı ile girilmek isteniyorsa aşağıdaki fotoğraf daki gibi bir yöntem izlenebilir .
Şimdi resimdeki test parametresi girildikten sonra SQL cümleciği aşağıdaki gibi olacaktır .
SELECT * FROM users WHERE username=’a’ or’1’=’1’ and rownum=1-- and password’’t4’’
rownum=1 sayesinde ilgili SQL cümleciğinin döndürmeye çalışacağı kullanıcılardan sadece ilki alınacaktır. İlk kullanıcının da yönetici
olma varsayımıyla uygulamaya yönetici kullanıcısı ile giriş yapmış olunur.
Aynı şekilde arkadaşlar aynı şekilde olmasa bile UNION sorguları yardımı ile uygulama üzerinde tanımlı olmayan bir kullanıcıyla da kimlik
doğrulama mekanizmasını geçme imkanımız vardır. Hedef uygulamamızın ’users’ tablosunun id,username,password,name,lastname, alanlarından
oluştuğunu varsayalım yani varsayım yapalım öyle bir uygulamanın olduğunu düşünelim ; Varsayım yanlış olsa da bulmak sadece deneme ve
yanılmalardan ibaret olacaktır.
Bu arkadaşlar fotoğrafta varsayım olarak yapmış olduğumuz test parametremizi SQL sorgusu içine girdiğinde aşağıdakine benzer bir sordu oluşacaktır ;
SELECT *FROM users WHERE username=’’UNION SELECT 999,’T4’,’D3’,’İSMAİL’,’bülbül’ FROM dual--’andpassword=’x’
Bu sorgu sayesinde kullanıcı adı : İSMAİL olan bir kullanıcı ile uygulamaya giriş imkanı bulacaktır.
Konuyu daha İyi anlayabilmeniz için videolar ;
https://www.youtube.com/watch?v=wDRCTy8tPUA
https://www.youtube.com/watch?v=glScQ9qqMlI
https://www.youtube.com/watch?v=W0OUEOEMLOI
Login Sayfası İstismarı Nedir ?
Arkadaşlar günümüz uygulamarındaki (web,desktop) hemen hemen hepsinde kimlik doğrulama mekanizmaları
bulunmaktadır. Bu kimlik doğrulama işlevi ise bir veritabanı tablosunda bulunan kullanıcı adı ve parola
bilgilerinin kullanıcının girmiş olduğu veriler ile karşılaştırılması ile yapılmaktadır. Bu karşılaştırma
SQL cümleciği bir SQL enjeksiyonu zafiyetine sahip ise ,uygulamanın kimlik doğrulama mekanizmasını göz
ardı edilerek , herhangi bir bazen özellikle seçtiğimiz kullanıcı ile uygulama giriş yapma olanağı oluşabilmektedir.
Bu kontrol ise kimlik doğrulama işlevi barındırdan her uygulamaya yapılacak ilk testlerinden biridir.
İlgili kimlik doğrulama mekanizmalarına basit bir örnek vererek , zafiyeti örnekleme adına bişiler yapalım ;
public Users login (String username, String password) {
Users user = new Users();
...
ResultSet rs=stmt.executeQuery(’’select*FROM users WHERE username=’’+username+’’ and password=’’+password+’’);
while (rs.next()) {
user=newUsers(rs.getInt(’’userıd’’),Usertype.USER,rs.getstring(’’username’’));
}
...
return user ;
}
Login metoduna gönderilen username ve password parametrelerinin hiç bir kontrolden geçmeden SQL cümleciği içerisine
eklendiğini varsayalım . İlgili SQL cümleciği ise users tablosunda kullanıcıdan gelen kullanıcı adı ve parola bilgilerine
bakarak kullanıcının bilgilerini bir obje içine doldurmaktadır.Dolayısıyla uygulamada bu obje içerisindeki verinin varlığını
kontrol ederek , kullanıcıya giriş hakkı vermektedir.Şimdi kullanıcıdan gelebilecek ne tür bir girdi ile bu kontrolün
aşılabileceğine bakalım .
Resimdeki örnekte arkadaşlar parolaya ihtiyaç yoktur , ister CW yazın isterseniz Ordu-yu Lojistik yazın önemi yoktur .
İlgili örneğimizde kullanıcı adı ve parolanın sorgulandığı SQL cümleciği içerisine yerleştiğinde SQL cümleciği oluşacaktır ;
SELECT * FROM users WHERE username=’a’ or ’1’=’1’--’ and password=’t4’
Cümleciğine baktığımızda ise users tablosundan username bilgisi a olanlar veya 1=1 olanlar diye bir ifade görülüyor olacaktır.
İfade içerisinde veya(OR) kullanıldığı için WHERE’in sağ tarafı her zaman 1(true) dönecektir.İlgili veritabanının da ORACLE
olduğunu varsayarak -- karakteri sonrası yorum satırı olarak algılanacak ve işlenmeyecektir.Dolayısıyla bu sorgu ;
SELECT * FROM users WHERE username=’a’ or ’1’ halini alacaktır .
Buda users tablosundaki tüm kullanıcıların listelenmesini sağlayacaktır ve tek bir user objesi oluştuğu için ilgili tablodaki
son kullanıcının bilgileri dolacaktır.Bu sayede uygulamanın users tablosundaki son kullanıcı ile uygulamaya giriş yapılacaktır.
Bu durumda ilk kanı arkadaşlar ; İlk kullanıcının yönetici olduğu yönündedir , açıkcası genelde durum böyledir.Eğerki arkadaşlar
lk kullanıcı ile girilmek isteniyorsa aşağıdaki fotoğraf daki gibi bir yöntem izlenebilir .
Şimdi resimdeki test parametresi girildikten sonra SQL cümleciği aşağıdaki gibi olacaktır .
SELECT * FROM users WHERE username=’a’ or’1’=’1’ and rownum=1-- and password’’t4’’
rownum=1 sayesinde ilgili SQL cümleciğinin döndürmeye çalışacağı kullanıcılardan sadece ilki alınacaktır. İlk kullanıcının da yönetici
olma varsayımıyla uygulamaya yönetici kullanıcısı ile giriş yapmış olunur.
Aynı şekilde arkadaşlar aynı şekilde olmasa bile UNION sorguları yardımı ile uygulama üzerinde tanımlı olmayan bir kullanıcıyla da kimlik
doğrulama mekanizmasını geçme imkanımız vardır. Hedef uygulamamızın ’users’ tablosunun id,username,password,name,lastname, alanlarından
oluştuğunu varsayalım yani varsayım yapalım öyle bir uygulamanın olduğunu düşünelim ; Varsayım yanlış olsa da bulmak sadece deneme ve
yanılmalardan ibaret olacaktır.
Bu arkadaşlar fotoğrafta varsayım olarak yapmış olduğumuz test parametremizi SQL sorgusu içine girdiğinde aşağıdakine benzer bir sordu oluşacaktır ;
SELECT *FROM users WHERE username=’’UNION SELECT 999,’T4’,’D3’,’İSMAİL’,’bülbül’ FROM dual--’andpassword=’x’
Bu sorgu sayesinde kullanıcı adı : İSMAİL olan bir kullanıcı ile uygulamaya giriş imkanı bulacaktır.
Konuyu daha İyi anlayabilmeniz için videolar ;
https://www.youtube.com/watch?v=wDRCTy8tPUA
https://www.youtube.com/watch?v=glScQ9qqMlI
https://www.youtube.com/watch?v=W0OUEOEMLOI
Hiç yorum yok: