Sayfayı Yazdır | Pencereyi Kapat

Asp (Sql Injection Ve Korunma)

Nereden Yazdırıldığı: Bilginin Adresi
Kategori: Bilgisayar Güvenliði / Computer Security
Forum Adı: Güvenlik / Security Makaleleri
Forum Tanımlaması: Bilgisayarýnýzý Her Türlü Saldýrýya Karþý Korumak Ýçin Yapmanýz Gerekenler
URL: https://www.bilgineferi.com/forum/forum_posts.asp?TID=7957
Tarih: 07-07-2024 Saat 05:11


Konu: Asp (Sql Injection Ve Korunma)
Mesajı Yazan: megabros
Konu: Asp (Sql Injection Ve Korunma)
Mesaj Tarihi: 23-08-2009 Saat 22:55

Eminimki bir çoðunuzun sql injection hakkýnda azda olsa bilgisi vardýr.

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.

Tabiki 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 :
<%
Set baglanti = Server.Createobject(”ADODB.Connection”)
baglanti.open “Provider=Microsoft.Jet.Oledb.4.0;Data Source=” & Server.MapPath(”uyelik.mdb”)
%>

Ü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
<!– #include file=”ayar.asp” –>
<%
kullanici = Request.Form(”kullanici”)
parola = Request.Form(”parola”)
If kullanici=”" or parola=”" Then
Response.Write “Lütfen boþ alan býrakmayýn !”
Response.End
END IF
sql=”Select * From uyeler Where onay=1 and kullanici = `”& kullanici &”` and parola = `” &parola& “`”
Set Kontrol = Baglanti.ExeCute(sql)
IF Kontrol.eof Then
Response.Write “Böyle bir kullanýcý yok be gülüm”
Else
Session (”girdinmihocam”) = “evetgirdim”
Session (”id”) = Kontrol(”id”)
Session (”kullanici”) = Kontrol(”kullanici”)
Response.Redirect “../fentanyl/index/index.asp”
END IF
%>

Þimdi 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 ;)

<%
function guvenlik(degistir)
degistir = replace(degistir,chr(13),”")
degistir = replace(degistir,chr(34),”")
degistir = replace(degistir,chr(39),”")
degistir = replace(degistir,”,”,”")
degistir = replace(degistir,”/”,”")
degistir = replace(degistir,”\”,”")
degistir = replace(degistir,”?”,”")
degistir = replace(degistir,”*”,”")
degistir = replace(degistir,”‘”,”")
degistir = replace(degistir,”OR”,”")
degistir = replace(degistir,”AND”,”")
degistir = replace(degistir,”%”,”")
degistir = replace(degistir,”&”,”")
degistir = replace(degistir,”<”,”")
degistir = replace(degistir,”$”,”")
degistir = replace(degistir,”>”,”")
degistir = replace(degistir,”=”,”")
degistir = replace(degistir,”!”,”")
degistir = replace(degistir,”–”,”")
degistir = replace(degistir,”#”,”")
degistir = replace(degistir,”like”,”")
degistir = replace(degistir,”drop”,”")
degistir = replace(degistir,”create”,”")
degistir = replace(degistir,”modify”,”")
degistir = replace(degistir,”rename”,”")
degistir = replace(degistir,”alter”,”")
degistir = replace(degistir,”cast”,”")
degistir = replace(degistir,”join”,”")
degistir = replace(degistir,”union”,”")
degistir = replace(degistir,”where”,”")
degistir = replace(degistir,”insert”,”")
degistir = replace(degistir,”delete”,”")
degistir = replace(degistir,”update”,”")
guvenlik = degistir
end function
%>

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..



Cevaplar:
Mesajı Yazan: kral
Mesaj Tarihi: 23-08-2009 Saat 23:04
Teþekkürler  bir örnekte ben ekleyeyim
 
<%
Function security(Filtre )

security = Filtre

security = Replace(security, "<", "<" )
security = Replace(security, ">", ">" )
security = Replace(security, "^", "-" )
security = Replace(security, vbcrlf, "<br>" )
security = Replace(security, "script", "script", 1, -1, 0 )
security = Replace(security, "SCRIPT", "SCRIPT", 1, -1, 0 )
security = Replace(security, "Script", "Script", 1, -1, 0 )
security = Replace(security, "script", "Script", 1, -1, 1 )
security = Replace(security, "object", "object", 1, -1, 0 )
security = Replace(security, "OBJECT", "OBJECT", 1, -1, 0 )
security = Replace(security, "Object", "Object", 1, -1, 0 )
security = Replace(security, "object", "Object", 1, -1, 1 )
security = Replace(security, "applet", "applet", 1, -1, 0 )
security = Replace(security, "APPLET", "APPLET", 1, -1, 0 )
security = Replace(security, "Applet", "Applet", 1, -1, 0 )
security = Replace(security, "applet", "Applet", 1, -1, 1 )
security = Replace(security, "embed", "embed", 1, -1, 0 )
security = Replace(security, "EMBED", "EMBED", 1, -1, 0 )
security = Replace(security, "Embed", "Embed", 1, -1, 0 )
security = Replace(security, "embed", "Embed", 1, -1, 1 )
security = Replace(security, "event", "event", 1, -1, 0 )
security = Replace(security, "EVENT", "EVENT", 1, -1, 0 )
security = Replace(security, "Event", "Event", 1, -1, 0 )
security = Replace(security, "event", "Event", 1, -1, 1 )
security = Replace(security, "document", "document", 1, -1, 0 )
security = Replace(security, "DOCUMENT", "DOCUMENT", 1, -1, 0 )
security = Replace(security, "Document", "Document", 1, -1, 0 )
security = Replace(security, "document", "Document", 1, -1, 1 )
security = Replace(security, "cookie", "cookie", 1, -1, 0 )
security = Replace(security, "COOKIE", "COOKIE", 1, -1, 0 )
security = Replace(security, "Cookie", "Cookie", 1, -1, 0 )
security = Replace(security, "cookie", "Cookie", 1, -1, 1 )
security = Replace(security, "form", "form", 1, -1, 0 )
security = Replace(security, "FORM", "FORM", 1, -1, 0 )
security = Replace(security, "Form", "Form", 1, -1, 0 )
security = Replace(security, "form", "Form", 1, -1, 1 )
security = Replace(security, "on", "on", 1, -1, 0 )
security = Replace(security, "ON", "ON", 1, -1, 0 )
security = Replace(security, "On", "On", 1, -1, 0 )
security = Replace(security, "on", "on", 1, -1, 1 )
security = Replace(security, "or", "or", 1, -1, 0 )
security = Replace(security, "OR", "OR", 1, -1, 0 )
security = Replace(security, "Or", "Or", 1, -1, 0 )
security = Replace(security, "or", "or", 1, -1, 1 )
security = Replace(security, "document.cookie", "Document.cookie", 1, -1, 1 )
security = Replace(security, "javascript:", "javascript ", 1, -1, 1 )
security = Replace(security, "vbscript:", "vbscript ", 1, -1, 1 )
security = Replace(security, "SELECT", "Select ", 1, -1, 1 )
security = Replace(security, "DROP", "Drop ", 1, -1, 1 )
security = Replace(security, ";", "; ", 1, -1, 1 )
security = Replace(security, "--", "-- ", 1, -1, 1 )
security = Replace(security, "INSERT", "Insert ", 1, -1, 1 )
security = Replace(security, "DELETE", "Delete ", 1, -1, 1 )
security = Replace(security, "xp_", "xp_ ", 1, -1, 1 )
security = Replace(security, "UNION", "Union ", 1, -1, 1 )
security = Replace(security, "'", "`" )

End Function
%>


-------------
“Bilginin elde edilmesi... bizi iyiye ulaþtýracaktýr.



Sayfayı Yazdır | Pencereyi Kapat