SQL Injection Nedir?

E-posta Hosting Kampanya

SQL Injection , genellikle web uygulamalarında görülen ve owasp top10 listesinde de yer alan kritik güvenlik açıklarından birisidir. SQL Injection saldırıları yazılımcının arkaplanda yolladığı SQL sorgusunda kullanıcıdan aldığı parametreleri filtreleme işlemine sokmaması (kontrol etmemesi) sonucunda saldırganın sorguya dilediği gibi müdahale etmesi meydana gelir.


SQL Injection ile Neler Yapılabilir?


SQL Injection bulunan bir sistemde saldırgan direkt olarak sorguya müdahale edebildiği için veritabanınızda kayıtlı tüm verilere erişebilir. Kullanılan veritabanı yönetim sistemine göre değişkenlik gösterebilen durumlar da mevcut.

Örneğin MSSQL kullanılan bir sistemde xp_cmdshell fonksiyonu kullanılarak sistemde komut çalıştırılabilir. Veya MySQL kullanılan bir sistemde doğru yapılandırılmaz ise mysql_load_file fonksiyonu ile çeşitli dosyalar okunabilir.

SQL Injection Tipleri


– Blind SQL Injection

Başındaki “blind” kelimesinden de anlaşılacağı üzere kör atış sql injection saldırı tipidir. Blind sql injection bulunan bir sistemde veritabanındaki tablo isimleri , kolonlar direkt olarak görüntülenemez. Blind sql injection saldırısı gerçekleştirmenin en bilindik yöntemi sistemdeki kolon isimlerini harf harf deneyerek bulmaktadır. Örneğin “admin” isimli tabloyu bulmak istediğinizde sorguda tek tek A-Z tüm karakterleri yollayıp sorgudan dönen sonuca göre yollanan karakterin tablo isminde olup olmadığını anlayabilirsiniz

Blind SQL Injection kendi içinde 2’ye ayrılmaktadır.

-Time Based Blind SQL Injection

Blind SQL Injectionun bir tipi olan time-based blind sql injection adından da anlaşılacağı üzere zamana dayalı sql injection saldırılarıdır. Yine “admin” tablosundan örneklendirecek olursak admin tablosunu bulmak isteyen saldırganın göndereceği SQL sorgusunda “eğer tablonun içinde a harfi varsa 3 saniye uyut” şeklinde atak gerçekleştirerek SLEEP , DELAY gibi fonksiyonlar yardımı ile harf harf tablo , kolon isimlerine ulaşacaktır.

-Boolean Based Blind SQL Injection

Boolean bilindiği üzere true-false değerlere dayanan bir veri tipidir. Boolean Based Blind SQL Injection’da saldırgan hedef sistemdeki tablo – kolon adlarını öğrenmek için time-baseddekine benzer bir atak senaryosu kullanır. Tek değişen kısım time-based sql injection’da SLEEP,DELAY gibi fonksiyonlar kullanılarak sistemin uyuyup / uyumadığına göre karakterin mevcut olduğunu anlıyorduk. Boolen based blind sql injectionda ise yolladığımız sorgunun sonucunun doğru / yanlış döndürdüğü cevaba göre karakterin bulunduğunu anlayabiliyoruz.

-Union Based SQL Injection

Union Based SQL Injection tespiti ve istismarı en kolay olan sql injection tipidir. Union based sql injection bulunan bir sistemde sorguyu bozacak herhangi bir karakter ile müdahale ettiğinizde sayfada bir hata mesajı ile karşılacaksınız. Yolladığınız sorgularda harf harf denemeye yahut true-false değerleri ile uğraşmadan direkt olarak kolon sayılarını , tablo adlarını payloadınızı şekillendirerek öğrenebilirsiniz.

SQL Injection Araçları
1 – Sqlmap
https://github.com/sqlmapproject/sqlmap

2 – jSQL
https://github.com/ron190/jsql-injection
3 – BBQSQL
https://github.com/Neohapsis/bbqsql

SQL Injection Saldırılarından Nasıl Korunulur?
Kullanıcıdan alınan verileri sql sorgusuna direkt olarak katmadan önce çeşitli filtreleme işlemine tabii tutarak sorguya katmanız sql injection ataklarından korunmanızı sağlayacaktır.

Cookie , local stroage , site üzerindeki parametreleri kesinlikle direkt olarak POST veya GET ‘ ten olduğu gibi almamalı , kontrolden geçirdikten sonra sorguya sokmalısınız.