SQL Injection Nedir?

sql-injectionSon yıllarda WEB tabanlı uygulamalar ve internet siteleri vasıtasıyla Data Base (Veri tabanı) kullanımı muazzam çeşitliliğe ve rakamlara ulaşmış; devletlerden büyük-orta-küçük ölçekli firmalara ve kişisel sitelere kadar geniş bir kullanım alanına yayılmıştır. İşte bu tip uygulama ve siteler, Framework ve Object Relational Mapping-ORM gibi ekstra veri tabanı katmanları için “SQL Injection” önemli ve saldırganların tercih ettiği, popülerliği yüksek bir saldırı/sızma/manipüle etme yöntemidir. Bu yazıda yüzeysel olarak SQL Injection’ı anlatacağım.

SQL – (Structured Query Language) Nedir?

Bir veri tabanında işlem yapmak için kullanılan bir dildir. Bu dil vasıtası ile veri çağırma, değiştirme, silme, düzenleme işlemleri gerçekleştirilir. CMS, Blog Yazılımları, Web Uygulamaları gibi birçok unsurda ya SQL çalışıyordur ya da alt yapısı mevcuttur. Bir Web ya da ilgili veri tabanı kullanan bir uygulama üzerinde işlem icra edilirken, uygulama, veri tabanı üzerinde SQL ile işlem yapar ya da haberleşir. Bu süreçte SQL Cümlecikleri oluşur.

Özet olarak SQL Injection;

Bir veri tabanında “yetkisiz kişilerce” veri sızdırma, veri çağrısı yaptırma ya da silme işlemlerini yaptırma olarak kabaca tanımlayabiliriz.

Bir SQL Injection saldırısını gerçekleştirmek için en önemli unsur, veri tabanı üzerinde çalışan/yazılan kodun “Dinamik” yapıda olmasının gerekliliğidir. Yani SQL, işlem – çalışma esnasında oluşan bir yapıdadır.

Bu saldırı nasıl gerçekleşir;

Örnek olarak SQL verilen bir işlemi yaparken, dinamik yapıda olan SQL Cümlecikleri oluşmaktadır. Bu cümleler meydana gelirken, araya eklenebilecek bir Meta Karakter, SQL Injection’a sebep olabilir.  Peki ama nasıl? Hemen örneklendirelim;

Örnek olarak “X” bir site için oturum açacağız:

 

User_name = Request.Form(“username”)Password = Request.Form(“password”)Set RsLogin = SQLConn.Execute(“select * from Members where username = ‘ “ & User_name & ” ’ and password = ‘ “ & Password & ” ’ ”)İf RsLogin.EOF and RsLogin.BOF then Response.Redirect “/error.asp”else Session(“login”) = RsLogin(“user_id”)Response.Redirect ”../”end if

 

Bu basit bir yapıda olan “X” siteye oturum açmak için kullanılan bir SQL Cümlesi yani kayıt açmak için döndürülen kodlardır. Biz bu sisteme aslında kullanıcısı olmadığımız halde girmek istiyoruz, yani SQL Injection aracılığı ile sızmak istiyoruz. Ne yapıyoruz? META-DATA kullanıyoruz;

Var olan yukarıdaki kodları şu şekilde manipüle edersek;

User_name  alanına  “ ‘ or 1 = 1 ” , Password olması gereken yere ise “ ‘ or 1 = 1 ” şeklinde değiştirirsek, bu döngünün karşılığı şu şekilde olacaktır:

 Select * from Members  where username = ‘ ‘ or 4 = 4 ’ and password = ‘ ‘or 4 = 4 ’

 

Yukarıdaki döngü sayesinde siteye giriş yapmış olacağız. Peki neden?

Öncelikle yukarıdaki döngüyü dilimize çevirmemiz gerekecek;

“Kullanıcılar tablosunda yer alan kullanıcı ve şifre alanları boş olan kayıtları getir.”

Bu SQL cümlesi her zaman saldırganın istediği gibi dönecek ve kullanıcı tablosundan yer alan kayıtları listeleyecektir. İlk kontrole takılmadan son yapılacak olan yani 4=4 kontrolü her zaman doğru sonuç verecek ve SQL cümlesi saldırganın arzu ettiği gibi çalışıp, kayıtlı olan kullanıcı tablosundan tüm kullanıcılar listelenecektir.

Burada saldırganın müdahalesine izin veren ve SQL’ in manipülasyonuna imkân sağlayan başlıca sebep, kullanıcı ya da istemci tarafından emredilen işlemleri doğrulayıp kontrol etmeden, incelemeden yapıyor oluşudur. Bu tip durumları engellemenin kilit noktası, sayısal olarak girilmesi beklenen ya da sayısal değer olarak istenen değerlerin sayısal olup olmadığının kontrol edilmesini sağlamaktır ve META-KARAKTER kullanımlarından kaçınmaktır.

Açıklar saptandığında;  ” ‘ ” karakteri ile girdiye başlanır ve bunun sonucunda SQL’e istenilen komutu göndermek için ” ‘ ” yardımıyla “STRING” bölümünden kaçınılır. Bunun gibi veya farklı yollar kullanılarak müdahale edilirse, söz konusu Veri tabanında yer alan bilgiler saldırgan ya saldırganların eline geçebilir.

Kaynaklar;

–          CEH® Certified Ethical Hacker Study Guide – Chapter 9. Attacking Applications: SQL Injection and Buffer Overflows

–          http://en.wikipedia.org/wiki/Exploit_(computer_security)

–          Oracle Database SQL Reference, 10g Release 2 (10.2). B14200-02

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir