Header Ads

SQL Injection Nedir ?

Merhaba CyberGuilty Okurları;

Bugün "SQL Injection" hakkında konuşacağım.
Sql Injection, bir veri tabanı güvenliği açığı olarak bilinmektedir. SQL Injection saldırısı ile yetkisiz olarak veri tabanına sızılabilmektedir. SQL Injection, günümüzde halen yaygın olarak kullanılmakta olup, birçok sitede bulunmaktadır. SQL Injection açıkları yazılan SQL kodlardan meydana gelmektedir. Yine bu kodlar dikkatsizlik ve yanlış kodlama sonucu oluşmaktadır. SQL Injection yöntemi ile bir web uygulamanın tüm veri bilgilerini çalabilir, web uygulamayı hacklenebilmektedir. SQL Injection açıkları küçük sitelerden tutun büyük bir firma sitelerine kadar tüm sistemlerde olabilmektedir. SQL Injection açığını hazır sistemlerdede arayabilirsiniz. SQL Injection tam ifadesi "Structured Query Language Injection"'dur.
SQL Injection, açıklarında en önemli etken, meta karekterleri oluştururken birden fazla meta karekter yazma sebebi de, SQL Injection açıklarının oluşmasını sağlamaktadır. SQL Injection saldırıları genelde üye giriş alanlarında yapılmaktadır. Eğer üye giriş bilgileri doğru ise başarılı şekilde panele erişim sağlayacak. Üye giriş bilgileri yanlış ise, yani veritabanından kayıt dönmediği zaman tekrardan giriş paneline yönlendirecektir. Örnek bir üye giriş kodunu inceleyelim.
 <%
CSKullaniciadi = Request.Form("kullaniciadi")
CSSifre = Request.Form("sifre")
set RsLogin = SQLConn.Execute("SELECT * FROM UYELER WHERE
kullaniciadi = '"& CSKullaniciai & "' AND sifre = '" & CSSifre &"'")

If RsLogin.EOF AND RsLogin.BOF Then
Response.Redirect "/hata.asp"
else
Session("login") = RsLogin("kadi_id")
Response.Redirect "../"
End If
%>
Üye giriş kodumuzda anlatılmak istenen ilk ve ikinci satırımızda kullaniciadi ve sifre değişkenlerin değerini almaktadır. Aşağıdaki kodumuzda SQL veri tabanında bulunup bulunmadığını kontrol etmektedir. Bu sayede veri tabanında kullanıcı bulunuyor ise, başarılı bir şekilde giriş yapıyor.
Eğer bulamıyorsa ise "/hata.asp" olarak yazılan sayfaya yönleniyor.
 set RsLogin = SQLConn.Execute("SELECT * FROM UYELER WHERE
kullaniciadi = '"& CSKullaniciai & "' AND sifre = '" & CSSifre &"'")
Yukarıdaki kodumuda SQL veri tabanında bulunup bulunmadığını kontrol etmektedir. Bu sayede veri tabanında kullanıcı bulunuyor ise, başarılı bir şekilde giriş yapıyor. Eğer bulamıyor ise /hata.asp olarak yazılan sayfaya  yönlenmektedir. Yukarıdaki üye giriş formumuzda SQL Injection denemesi yapılabilir. Bu deneme bypass olarak da adlandırılabilir. Üye giriş panellerinde deyebileceğiniz bazı kodlar aşağıdaki gibidir.
'OR', OR 1=1--, 'OR A=A--, "OR 0 = 0-- , OR 0=0"
SQL Injection saldırılarından korunmak için aşağıdaki kodlar yeterli olacaktır.
 <%
Function security(veri)
veri = Replace (veri ,"'","",1,-1,1)
veri = Replace (veri ,"&","",1,-1,1)
veri = Replace (veri ,"%","",1,-1,1)
..// Burayı Kestim
security = veri
End Fuction
%>
Yukarıdaki kodlar örnek kodlardır ve bu kodları sizler tamamen kendinize göre geliştirilebilirsiniz. Böylece SQL Injection açığını bir nevi önlemiş olacaksınız. 
Üye giriş paneliniz bu şekilde daha güvenli olacaktır. Yukarıda eklenen kodları aşağıdaki gibi sayfaya eklemeniz gerekecektir. 
<%
sKadiID = security(Request.Form("kadiid"))
sKadiID = security(Request.Form("sifreid"))
%>
Burada eklediğimiz kod ve değişkenleri düzenlediğimiz zaman üye giriş panelimiz aktif olacaktır. SQL Injection açıkları, bir diğer yönden site sonuna eklenen kodlarla denenmektedir. SQL Injection açığını denemek için site sonuna bazı dorklar getirerek kolayca deneme yapabilirsiniz.
Bazı SQL Injection dorkları:
"inurl:news.php?id=", "inurl:index.php?id=", "inurl:section.php?id="
Yukarıdaki bazı hazır "dorklar" sayesinde arama motorlarında bu dorkları aratarak açıklı siteler taranabilmektedir. Bir web uygulaması geliştiriyorsa, bu dorkların oluşmaması için sitemizdeki kodları özenle analiz etmemiz gerekmektedir. Yukarıdaki dorklar genellikle hazır sistemlerde bulunmaktadır. Bir web uygulaması geliştirmek, her zaman daha yararlı olacaktır. SQL Injection denemeleri manuel olarak yapılacağı gibi programlarla da yapılabilrmektedir.
Web uygulaması geliştirmenizde otomatik olarak SQL Injection taraması yapmanızı tavsiye etmekteyim. Bu sayede gözden kaçırmış olduğunuz noktoları, yazmış olduğunuz denetimler sayesinde bularak uyarı verebilir.
Böylece kötü niyetli kişiler açığı bulmadan önce siz bulursunuz ve bulduğunuz açığı kapatabilirsiniz.
SQL Injection açıklarını özetlemek gerekirsek; iki çeşit açık tespitimiz bulunmaktadır bu tespitler aşağıdaki gibidir.
  1. Manuel SQL Injection
  2. Auto (Software) SQL Injection
Official Twitter Accounts
CyberGuilty INC. Blogger tarafından desteklenmektedir.