Bilginin Adresi Ana Sayfa
Forum Anasayfası Forum Anasayfası > Bilgisayar Güvenliği / Computer Security > Güvenlik / Security Makaleleri
  Aktif Konular Aktif Konular RSS - Giriş Seviyesi Sql Injection Ve Korunma
  SSS SSS  Forumu Ara   Events   Kayıt Ol Kayıt Ol  GiriÅŸ GiriÅŸ

Giriş Seviyesi Sql Injection Ve Korunma

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
megabros Açılır Kutu Gör
Security Professional
Security Professional
Simge

Kayıt Tarihi: 08-06-2009
Konum: Turkey
Status: Aktif DeÄŸil
Points: 752
Mesaj Seçenekleri Mesaj Seçenekleri   Thanks (0) Thanks(0)   Alıntı megabros Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Giriş Seviyesi Sql Injection Ve Korunma
    Gönderim Zamanı: 24-08-2009 Saat 00:38

Giriş Seviyesi Sql Injection Ve Korunma

Bu yazımızda Sql Inj. hakkında hiç birşey bilmediğinizi varsayarak yola çıkıyorum. Tabii ki asp bilmeniz gereklidir. Sql injection`u sql server`ın meta karakteri olan (`) meydana getiriyordu.Sql server`da bundan etkilenmemek için tek tırnak yerine ” kullanmamız gerekiyor. Bu yazımızda sql servera tek tırnağı çift tırnak gibi algılamasını sağlatacak fonksiyonu yazacağız.Bu sayede güvelik açığımız kalmayacak.

Tabii ki bundan önce en önemli güvenlik zaaflarından biri olan blacklisting yöntemini anlatacağım.

Blacklisting = kara liste yöntemi

Yani bir takım sql cümleciklerini kara listeye ekleyerek çalışmalarını engelliyoruz. Bu yöntem sql injection`u engelleme de en büyük zaafları oluşturur (xss içinde blacklisting vardır ve O da aynı şekilde güvenlik zaafıdır).

Öncelikle en basit şekilde yazılmış üyelik sistemimizi inceleyelim.

Yazıyı daha iyi anlamanız açısından üyelik sistemini biraz açıklayalım :

Giriş yapıp içeriğini görüntülemek istediğimiz sayfa olan sayac.asp

<body><html>

<!–#include file=”ayar.asp”–>

<center><table border=”0″ width=”100%” cellpadding=”0″ style=”border-collapse: collapse” height=”99″>

<%
IF Not Session (”girdinmihocam”) = “evetgirdim” Then
%>

<form action=”giris.asp” method=”post”>
<tr><td><p align=”right”>&nbsp;Kullanıcı adı : </td>
<td>&nbsp;<input type=”text” name=”kullanici” size=”20″></td></tr>
<tr><td><p align=”right”>&nbsp;Parola : </td>
<td>&nbsp;<input type=”text” name=”parola” size=”20″></td></tr>
<tr><td><p aling=”right”>&nbsp;</td>
<td>&nbsp;<input type=”submit” value=”Giriş”></td></tr></form>

<%
Else
%>

<tr><td>&nbsp;</td><td>Hoşgeldiniz</td></tr>
<center><tr><td>& ; ; ;nbsp;</td><td>
<p align=”center”>&nbsp;<a href=”logout.asp” style=”text-decoration: none”>
<font color=”#FF0000″>Oturumu Kapat</font></a></td></center>

<%
END IF
%>

</table></center></body></html>

İnclude ettiğimiz ayar.asp :

 

Üyelik.mdb içinde üyeler adında bir tablomuz var.5 adet sütundan oluşuyor.id – kullanıcı – parola – giris_tarihi ve onay

Giris.asp sayfamız

gelelim asıl mevzuya.

Sayac.asp sayfasını çağırdığızda karşınıza kullanıcı adı – parola soran sayfa geliyor.

Buraya normalde admin-admin yazarak giriş yaparız ve index.asp`ye yönleniriz.Daha sonra geri dönüp sayfayı yenilediğimizde sayac.asp`ye giris yapmış oluruz.

(Bu kendi kodladığım bişey. Böyle bi saçmalığa gerek yok aslında :)

Boş alan bırakarak giriş yapmaya çalışınca `Lütfen boş alan bırakmayın` hatası alıyoruz.Peki bunu sağlayan kodlar neler?

KodIf kullanici=”” or parola=”” Then
Response.Write “Lütfen boş alan bırakmayın !”
Response.End
END IF

Eğer kullanici değeri boş bir değere eşitse `lütfen boş bırakmayın` yazdırıyoruz ve response.end komutuyla komutu durduruyoruz. End if ile şart cümleciğimizi kapatıyoruz.

Bu mantıkla biz bir blacklisting yapabiliriz.

Eğer kullanıcı=x ise `lütfen sql deneme` gibi bir mantıkla bunu uygulayacağız.

Çok bilindik sql cümleciklerinden biri olan `OR` ile giriş yapmayı deneyelim.
Kullanıcı adı ve şifre değeri yerine bunu yazınca giriş yapmış oluyoruz. Demekki üyelik sistemimiz bu cümleciğe karşı bir zaaf taşıyor.
Bunu engellemek için daha doğrusu engellediğini düşünenlerin en çok düştüğü hata tek tek cümlecikleri üyelik sistemine tanıtmak.

Örnek :

KodIf kullanici=”`OR`” or parola=”`OR`” Then
Response.Write “Lütfen sql denemeyin !”
Response.End
END IF

Bu iki kod parçasını sayfanıza eklediğizde artık `OR` kodu ile giriş yapılamayacak.

Peki bu güvenlimi ? Diyelimki bütün bilindik sql kodlarını tek tek blacklisting yaptınız güvende olduğunuzu düşünüyorsunuz peki sizi hacklemeye düşünen kişi ya sizden biraz farklı düşünüyorsa ???
`OR` bu kod ile giriş yapamıyoruz peki (`OR` ) parantez içindeki kod ? Sonuna eklediğim boşluklar dahil bunu kullanıcı adı ve parola alanına aynen yazıyoruz. Tabiki parantez işaretleri hariç.

Denediğiniz zaman bu kod ile gayet güzel bir şekilde giriş yapıldığını göreceksiniz. Hadi diyelim bu ihtimalide düşünüp bunuda engellediniz. Peki aşağıda parantez içinde vereceğim kodların hepsini nasıl engelleyebilirsiniz ? Kodun sonundaki boşluk sayısı değiştikçe sizin yaptığınız blacklisting çuvallıyor.

(`OR` )
(`OR` )
(`OR` )
(`OR` )

yaptığım şey sadece boşluk sayısını arttırmak.Her koyduğum boşluk için yeni bir sql açığı meydana geliyor.
Demekki blacklisting uygulaması aslında büyük bir güvenlik zaafıymış.
Şimdi aklınızdan `Peki ben giris.asp içinde boşluk karakteri yazılmasını engellersem?` diye düşünebilirsiniz.

Tamam hadi sizi kırmayalım ve boşluk karakterini de engelleyelim. Peki sizce bütün bilindik sql cümleciklerini engelleyebilir misiniz?

`OR`
`or
`or“`
““or“or`

Tamamen kafanızdan türetebileceğiniz zilyar tane sql cümleciği var :)
Bu verdiğim cümleciklerin tamamı bu yazıyı yazarken kendi deneyerek 2-3 sn`de bulduğum şeyler. Sizde kafadan deneme yanılma ile sql kodları bularak bu tip basit üyelik sistemlerini aşabilirsiniz.

Demekki ne olursa olsun üyelik sistemimizi blacklisting uygulamalarına emanet etmeyeceğiz.

Peki ne yapmalıyız ? Tek tırnak ile çift tırnağı değiştirecek bir fonksiyon bizim işimizi görür

 

Bu kod parçası sıradan bir güvenlik sistemidir fakat ilk aşamada bizim işimizi görür. Giriş yapılan paneldeki form’u denetleyen kod parçasıdır.

Saygılar..
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu Gör



Bu Sayfa 0.141 Saniyede Yüklendi.