Tarih : | at : | Safemode : ON
> root@redhatz:~# Alımlar Başlamıştır. İletişim Bölümünden Alım Yapan Yöneticimize Ulaşabilirsiniz.
> root@redhatz:~# #redhatzopturkey 2016 Yeni Dönemi Artık Aktiftir. BİZİ TERCİH ETTİĞİNİZ İÇİN TEŞEKKÜRLER..



Başlık Yazar Yetki Comt Düzenlenen Kategori

SQL injection nedir? Red Vukuat rwxr-xr-x 0 13:24:00

Başlık SQL injection nedir?
Yetki rw-r--r--
Yazar Red Vukuat
Zaman 13:24:00
Kategori
Share

Merhaba Yoldaşlar Bu günki konumuZda çok popüler olan bir konu hakkında bilgi vereceğiz konumuzun adi SQL İnjection. Konuya İsterseniz Nedir ne değildir bu diye terimi inceleyecek başlayalım SQL Injection web
uygulamalarında ki en ciddi
açıkların başında gelir. Özellikle
frameworkler ve ORM (Object
Relational Mapping ) gibi ekstra
veritabanı katmanlarının
popülerleşmesi ile eskisine göre
bugünlerde biraz daha az
görülmektedir ama emin olun hala
heryerdeler! Web uygulaması geliştiricilercileri SQL Injection’ ı tam anlamadıklarından dolayı bazı
ölümcül hatalar yaparlar. Bu
yüzden bugün bilinen basit SQL
Injection metodları o kadar çok
görünmese de ileri de
anlatacağımız ileri seviye SQL
Injection açıklarını çok büyük
firmalardan, hazır sistemlere
kadar bir çok yerde görebilirsiniz.

Güvenlik Günahı !
Ben hackleyemediysem kimse
hackleyemez. Güvenlikteki büyük günahlardan biri kişilerin bazı açıklar hakkında
“ben hackleyemediysem
güvenlidir. ” diye düşünmeleri. Yazıdizisi boyunca bu şekilde bir dizi SQL Injection şehir efsanelerine de yer vereceğiz.
Son olarak SQL Injection
hakkında önemli bir not,
SQL Injection veritabanından ve
dilden bağımsız olarak her türlü
uygulama-veritabanı ilişkisine
sahip sistemde bulunabilir ve bu
veritabanlarının bir açığı değildir.
SQL Injection’ dan korunmak web
geliştiricisinin görevidir.

SQL Nedir?
SQL ( Structured Query Language)
veritabanlarında data çekme,
silme ve değiştirme gibi işlemler
için kullanılan basit yapılı bir dildir.
Bugün hemen hemen tüm web
uygulamalarının altyapısında
veritabanı desteği vardır ve bu
web uygulamaları veritabanı ile
SQL aracılığıyla anlaşırlar.
Bir siteye mesaj bıraktığınızda bu
mesaj veritabanına kaydedilir. O
mesaj onaylandığında
veritabanındaki bir alan
güncellenmiş olur. Yönetici
veritabanındaki kaydı silerek o
mesajın siteden silinmesini sağlar.Örnek bir kayıt silme SQL cümlesi şu şekilde olabilir;
DELETE FROM members WHERE
id=17
Yukarıdaki kod veritabanı
tarafından çalıştırıldığında
members tablosunda id alanı 17
olan kayıt silinecektir.
Bu makale SQL dilinin basit
detaylarını ele almayacaktır. Eğer
SQL konusunda zayıf iseniz
makaleyi anlamanız güç olacaktır.
Makaleye devam etmeden önce
SQL in temel komutlarını
öğrenmenizi ve veritabanı
mantığınız anlamanızı tavsiye
ederim.

SQL Injection Nedir?
Web uygulamalarında bir çok
işlem için kullanıcıdan alınan veri
ile dinamik SQL cümlecikleri
oluşturulur. Mesela “SELECT *
FROM Products ” örnek SQL
cümleciği basit şekilde
veritabanından web uygulamasınatüm ürünleri döndürecektir. Bu
SQL cümlecikleri oluşturulurken
araya sıkıştırılan herhangi bir
meta-karakter SQL Injection’ a
neden olabilir.

Meta-Karakter Nedir?
Meta-karakter bir program için
özel anlamı olan karakterlere
verilen isimdir. Örnek olarak C
temelli C#, Javascript, PHP gibi
dillerde (\) backslash karakteri bir
meta-karakterdir. Compiler
(derleyici ) ya da Interpreter
(yorumlayıcı ) bu karakteri görünce
ondan sonraki karakteri ona göre
işler. SQL’ için kritik metakarakter (‘) tek tırnak’ tır. Çünkü iki tek tırnağın arası string olarak algılanır. Diğer bir önemli meta-karakter ise (;) noktalı virgüldür, satırın bittiğini ve yeni satır başladığını bildirir.
Genel bir web uygulamasında
olası bir üye girişi işlemi şu
şekildedir;
Formdan gelen kullanıcı adı ve
şifre bilgisi ile ilgili SQL cümleciği
oluşturulur ( SELECT * FROM
members WHERE user=’admin’
AND password=’sifre’ gibi)
SQL cümleciği kayıt döndürüyorsa
böyle bir kullanıcının var olduğu
anlamına gelir ve
session( oturum) açılır ve ilgili kullanıcı üye girişi yapmış olur.
Eğer veritabanından kayıt
dönmediyse "kullanıcı
bulunamadı" veya "şifre yanlış"
gibi bir hata ile ziyaretçi tekrar
üye girişi formuna gönderilir.
Örnek bir üye girişi kodu
ASP ile yazılmış örnek bir üye
girişi kodu;

<%
1. FUsername =
Request.Form("username")
2. FPassword =
Request.Form("password")
3.
4. Set RsLogin =
SQLConn.Execute("SELECT *
FROM Members WHERE
username = '" &
FUsername & "' AND Password
= '" & FPassword & "'")
5.
6. If RsLogin.EOF AND
RsLogin.BOF Then
7. Response.Redirect
"/error.asp"
8.
9. Else
10. Session("login") =
RsLogin("user_id")
11. Response.Redirect
"../"
12.
13. End If
%>

Kod gayet basit. 1. ve 2. satırda
“username” ve “password” form
değişkenlerinin değerlerini alıyor.

4. satırda SQL cümleciğinin
içerisine yerleştirip kullanıcı
kontrolü yapıyor.
Bu işlemden sonra 6. satırda
sonucun boş olup olmadığına
bakıyor. Eğer boş ise yani
kullanıcı veritabanında
bulunmadıysa 7. satırda
görüldüğü gibi kullanıcıyı hata
sayfasına gönderiyor.
Eğer bulunduysa 10 ve 11.
satırdaki işlemleri yapıyor. Yani
kullanıcıya id ’ si ile birlikte bir
session açıyor. Bu sayede
kullanıcı sisteme giriş yapmış
oluyor.
Bu klasik bir login prosedürü.
Tabii ki daha farklı ya da karışık
olabilir.
Kullanıcı adı ve şifreye bir
injection denemesi yapıp neler
olacağını inceleyelim. Eğer
kullanıcı adı ve şifre yerine “' OR
''='” ve “' OR ''=' ” girersek başarılı
bir şekilde üye giriş yapmış
oluyoruz ama nasıl ve niye?
Şimdi çalışan örnek kodu tekrar
hatırlayalım 1 ve 2. satır form
değerini alıyordu 4. satırda bu
gelen değerleri SQL’ in içerisine
yerleştirip veritabanında sorgu
yaptırtıyordu.
Form değerlerini yerlerine
yerleştirelim ve az önceki çalışan
SQL’ e bakalım;
SELECT * FROM Members
WHERE username = '' OR ''=''
AND Password = '' OR ''=''
Farkettiğiniz üzere bu SQL
sorgusu her zaman doğru
dönecek ve “Members”
tablosundaki tüm üyeleri
getirecektir. Bu SQL cümleciğini
tercüme edersek şu şekilde
olacaktır. Members tablosundan
username boş olanları ve
password ü boş olanları getir ya
da boş eşittir boş!
Birinci ve ikinci mantıksal
kontrolün kayıt döndürüp
döndürmesi önemli değil çünkü
üçüncü kontrol her zaman doğru
olarak döneceğinden ( boş her
zamana boşa eşit değil mi?) bu
SQL cümleciği her zaman tüm
kayıtları döndürecektir. Yani kayıt
boş mu dolu mu diye kontrol
ettiğimizde kayıt dolu olarak
gözükecektir. Farkettiyseniz OR
kullandık dolayıyla mantıksal
sorguların herhangi bir doğru
(true) olarak dönerse tüm kayıtlar
dönmüş oluyor. Dolayısıyla bu SQL Injection' ı yaptığımızda dönen kayıtlardaki ilk kullanıcı olarak giriş yapılmış olacaktır.
Gördüğünüz gibi SQL Injection;
SQL cümleciklerinin arasına
dışarıdan girdi yaparak SQL’ i
istediğiniz şekilde manipüle
etmenize izin veriyor.
Bizleri Tercih ettiğiniz Teşekkürler Blogumuz Hızla Büyümeye Devam ediyor ne kadar çok kitleye ulaşabilirsek bizler için o denli Tatmin edici olacaktır.Kolay gelsin.

0 yorum:

Yorum Gönder

Makalemizi Okuduysanız Yorum yapabilirsiniz. Küfürlü Yorumlar Silinir Ve Kullanıcı Engellenir. İlginiz İçin Teşekkür Ederiz
#RedHatzOpTurkey

Blogger tarafından desteklenmektedir.