IRC ve mIRC Kullanıcılarının Buluşma Noktası
  Mobil Sohbet, Sohbet ve Sohbet Odaları




Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 07 Mart 2010, 15:02   #1
Çevrimiçi
Injection Flaws


-- Sponsor Baglantı --


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.


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
txtUsername.Text : ' or 1=1 -- txtPassword.Text : 123


ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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.


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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.
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.


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
txtUsername.Text : ' or 1=1 -- txtPassword.Text : 123


ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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.


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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.
  Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
radyo44.com.tr
Cevapla

Etiketler
flaws, injection

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Anti-SQL Injection Function hAte PHP 0 07 Kasım 2014 06:33
Beyonce - Flaws And All Blood Yabancı Şarkı Sözleri 0 27 Eylül 2014 19:25
SQL injection ve Korunma Yöntemleri CeSaRCripS MySQL 0 10 Nisan 2013 14:57
PHP'de SQL injection Güvenliği CeSaRCripS PHP 0 15 Aralık 2012 20:21