Injection Flaws
Dinamik SQL sorgularının kullanıldığı sistemlerde oluşabilecek bir açıktır.
Bir kullanıcı adı parola sınaması yapılan SQL cümleciğinde kullanılabilir.
Select MemberID
From Member
Where Username = '" + txtUsername.Text + "' and Password = '" + txtPassword.Text + "'"
Şeklinde bir SQL cümlesinin kullanıldığı bir sistemde aşağıdaki ifadeleri girelim
txtUsername.Text : ' or 1=1 --
txtPassword.Text : 123
ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar
Select MemberID
From Member
Where Username = ' ' or 1=1 -- ' and Password = '" + txtPassword.Text + "'"
-- ifadesi SQL Server için yorum satırı anlamına geldi için çalıştırılmaz.
Where ifadesini inceleyelim :
Username = ' ' false döner, 1 = 1 ise true. Or karşılaştırmasında ise False or True’nun sonucu true’dur. Dolayısıyla doğru kullanıcı adı parola girilmese dahi geriye tüm kayıtlar döner ve saldırgan ilk kaydın yetkisi ile içeriye giriş yapmış olur.
Saldırgan “SQL Injection” yöntemi ile veritabanı hakkında daha detaylı bilgi edinebilir. SQL Server üzerinde System Administrator hesabı açabilir, Tüm Tabloların listesini ve bu tabolardaki bilgilere ulaşabilir. Hatta web uygulaması sa yetkisine sahip bir kullanıcı ile çalıştırılıyorsa xp_cmdshell ‘format C:’ ile sisteme format bile atabilir.
Dinamik SQL sorgularındaki bu içeri sızmaları engellemenin yolu parametre kullanmaktır.
Bunu SqlCommand nesnesine SqlParameter tipinde parametre ekleyerek yapabiliriz.
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "[ ConnectionString ]";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = " Select MemberID"
+ " From Member"
+ " Where Username = @username and Password = @password";
cmd.Parameters.AddWithValue("@username",txtUsername.Text);
cmd.Parameters.AddWithValue ("@password",txtPassword.Text);
conn.Open();
int MembetID = Convert.ToInst32(cmd.ExecuteScalar());
conn.Close();
Bu şekilde kullandığımız dinamik SQL sorgularında Injection yönetimini bertaraf etmiş oluruz.
Kaynaklar
http://www.owasp.org/index.php/Top_10_2007-A2
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.mutasyon.net/makaleoku.asp?id=728
SQL Injection - Injection Flaws
18 Aralık 2007Gönderen Aslı zaman: 21:29 3 yorum
Etiketler: ASP.NET-AJAX, Örnekli-Resimli Anlatım, SQL
Kötü Niyetli Dosya Çalıştırma
Kötü Niyetli Dosya Çalıştırma
Web uygulamanıza FileUpload ile dosya yüklemesi yapmak durumunda iseniz gelen dosyanın türünü mutlaka denetlemek gerekir. Örneğin bir Forum uygulaması yaptınız ve kullanıcılar kendi resimlerini resimler klasörüne upload edebilmekteler. Saldırgan hazırlamış olduğu bir asp sayfasını resimler klasörüne upload eder ve www.siteniz.com/resimler/foo.asp şeklinde tam yolu yazarak dışardan göndermiş olduğu bir dosyayı sisteminizde çalıştırabilir.
Bu şekilde sisteminizin izin verdiği ölçüde yeni dosyalar oluşturabilir. Örneğin anadizinde ki default.aspx dosyasını silip yerine bir default.asp dosyası oluşturabilir. Böylece siteniz açıldığında “hacked by hacker ana” yazısı ile karşılaşabilirsiniz.
Böyle üzücü durumların yaşanmaması için sisteminize upload edilen dosyaların türünü denetlemek gerek.
Bunun için System.IO.Path ve System.Text.Regex namespacelerinden yararlanacağız.
Önce upload edilen dosyasın uzantısı nı alacağız ve kabul ettiğimiz dosya türleri içerisinde olup olmadığını denetleyeceğiz.
string uzanti = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
System.IO.Path.GetExtension metodu uzntıyı bize “.jpg” gibi noktalı bir şekilde verir.
Kullanıcı tarafından gönderilen dosya ismi büyük harfler ile yazılmış olabilir. Buda birazdan yapacağımız karşılaştırmada farklıymış gibi algılanmasına sebep olur. Bu yüzden uzantı harflerini küçültelim.
uzanti = uzanti.ToLower();
Kabul edeceğimiz dosya uzantıları için teker teker if kontrolü yazmamak için Regular Expression ifadelerinden yararlacağız.
using System.Text.RegularExpressions;
.....
if(Regex.IsMatch(uzanti,".jpg.jpeg.gif.png.bmp") == false)
{
// gönderilen dosya formatı uygun değil
}
else
{
// gönderilen dosya formatı uygun.
}
Önemli bir konu. Umarım faydalı olmuştur.
Kaynak
http://www.owasp.org/index.php/Top_10_2007-A3
Gönderen Aslı zaman: 21:17 3 yorum
Etiketler: ASP.NET-AJAX, Örnekli-Resimli Anlatım, WEB
