Sql İnjection ve Korunma Yöntemi

INFeRNaL

Özel Üye
22 Nis 2009
6,516
1
Mersin
Sql Injection Nedir?
Her webmaster, coder sitesini yazarken belirli bir şifreleme kullanır. Genellikle bu md5 tir. Şifreler db ye md5 lenmiş halde gider. Böylece db ye yönelik bir saldırıda şifreler hala güvende kalır. Fakat şunu atlıyoruz. Yani şifreler yolda giderken saldırıya uğrarsa?

Hiçbirimiz şunu unutmamalıyız ki zırhlı bir aracın en güvensiz olduğu yer yol üstünde giderken ki halidir. Çünkü bir eylem içinde ve etrafını kontrol edemiyor. İşte sql injection ( ben kısaca sj diyeyim ) böyle bir saldırıdır. Bizim html veya php olan giriş sayfamıza yapılır. Bir diğer yazımda hatırlarsanız php tamamen dinamiktir demiştim. Sj de bu dinamiklikten yararlanır ve bizi aynı kodlarla hataya düşürür. Sj direk bir hack yöntemi değildir.
Şöyle örnek vereyim maçlarda oyuncu pres yaparsa karşısındaki hataya zorlanır ve genelde hata yapar. İşte sj de böyledir.
Kısaca Sj nin mantığını öğrendik. Birde bunu php dilinde anlatalım…
uyegirisislem.php kısaca şöyledir:

PHP:
<?$kullanici=$_POST["nick"];$sifre=$_POST["sifre"];İşte en kısa hali bu. Bunlar db den onaylanıyor değil mi? Evet gerçektende öyle:[code=php]$sifremd5=md5($sifre);select * from uyelik where nick='$kullanici' and sifre='$sifremd5'?>

Tamam buraya kadar php bilgisi olmayan bile anlar bunları. Fakat ben üye girişte adamın yerine // karakterleri eklersem ne olur?
?
1
select * from uyelik where nick='//' and sifre='$sifremd5'



gerisi tamamen uçtu gitti... Gördüğünüz gibi veriler yolda saldırıya uğradı. Sj nümerik olmayan veya olan karakterleri bize karşı kullanır. Asp de de yanılmıyosam /* şeklinde. Kişi // karakterlerini kullanıp şifreyi kafadan sallasa geri kalan db nin işi. Eğer herhangi bir aksilik olmasa direkt olarak içeriye sızar. İşin kötü yani admin hesabının id sini biliyorsa:
?
1
select * from uyelik where nick='admin//' and sifre='$sifremd5'



şeklinde direk ona da dalabilir. Bu yöntem genelde kullanılmaz. Nedeni nümerik karakterler db tarafından fark edilme olasılığı yüksektir. Bu gibi bir durumda eğer biz nick ile şifreyi daha önceden de db de aratıyorsak ne yaparsanız yapın sj işe yaramaz.
Bundan başka bir nümerik karakterleri db de çalıştırma yöntemi vardır.
OR ” = ” gibi acayip görünen yanlız nick= VEYA Boş Eşittir Boş şeklinde nick i de iptal edebilir. Böylece nick= veya durumunda boş görünecek ve Boşluk içerisinde Admin hesabı daha doğrusu db de ilk kim varsa o hacklenecek.turkhackteam/INFeRNaL

Korunma Yöntemleri

Size 3 tarz yöntem vereceğim, içinden size en uygun olanını seçin...
SJ anlattığım gibi from işlemlerine veya daha farklı yollara direk olarak müdahale eder. Veri yoldayken hasar görür. Buna hackerlar "deface" yani "bozmak" derler.
Sunucu olarak yani bütün heryeri korumak istiyorsanız php.ini de ki
magic-quotes değerini on yapın. Her ne kadar bu da bir yerde işe yaramasada lamer denilen ilk bölüğü durduracak kuvettedir.
Bir diğer yöntem ise benimde kullandığım mysql_real_escape_string() kodudur.
Örnek:
?
1
<? mysql_real_escape_string($_POST[’kullanici’]); ?>



Son yöntem ve bu en kesinidir // gibi karakterleri veri yolunda değiştirmektir
Örnek:
PHP:
<? function duzelt($deger){// /’ yerine ‘ bırakıyoruz.if (get_magic_quotes_gpc()) {$deger = stripslashes($deger);}// sayısal değer değilse mysql_real_escape_string() işlevini uyguluyoruzif (!is_numeric($deger)) {$deger = “‘” . mysql_real_escape_string($deger) . “‘”;}return $deger;}$sorgu = sprintf(”SELECT * FROM kullanicilar WHERE kullanici=%s AND parola=%s”,duzelt($_POST[’kullanici’]),duzelt($_POST[’parola’]));mysql_query($sorgu); // temiz bir sorgu ?>

alıntıdır.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.