Sql injection nedir? Sql Injection nasıl yapılır? Sql injection hack saldırılarının tehlike analizi, programlar, örnek hacking saldırısı ve bu saldırıları önleme, SQL injection’dan korunma yolları.

SQL Injection Saldırısı Nedir?

SQL Injection, çoğunluklu dışarıdan (remote) SQL komutları çalıştırılması yoluyla gerçekleştirilen veritabanına yönelik bir saldırı türüdür. Günümüzde, hemen herkesin ulaşabileceği programlarla, eklentilerle veya tarayıcının adres satırından, GET veya POST metodlarıyla SQL injection açıkları taranabilir ve bu açıklar suistimal edilebilir.

SQL Injection Saldırısı Tehlikeli Midir?

  1. Saldırgan, veritabanınızın ismini, SQL içindeki tabloları ve verileri görebilir.
  2. Veritabanınızdaki kullanıcı adları, emailler, şifreler, kart numaraları vb. ele geçirilebilir. Hatırlatma: Şifrelerinizi MD5 veya Sha512 gibi şifreleyicilerle kriptolasanız dahi bunları çözmek birkaç saniye içinde olanaklıdır.
  3. Veritabanınızdaki bilgilerden yola çıkarak yönetici veya kullanıcı panelinize ulaşılabilir.
  4. Dosya yükleme, veritabanından kod işletme olanağı varsa sitenizin bulunduğu tüm sunucu shell adı verilen araçlarla hacklenebilir. Yalnızca kendi sitenizi değil sunucudaki tüm siteleri büyük bir tehlikeyle karşı karşıya bırakabilirsiniz.

“Benim Sitemle Kim Uğraşır?” Yanılgısı

Sitenizle uğraşılması için özel olarak hedef alınmanız gerekmez. Arama motorlarında uygun terimlerle (“Dork” adı veriliyor) yapılacak aramalar sonucunda veya bu amaca yönelik programlar yardımıyla sitenizin içinde bulunduğu bir listeye ulaşılabilir. Eğer “önemsiz”, “küçük” sitenizde SQL Injection açığı varsa birkaç gün içinde size de uğrayacaklarına emin olabilirsiniz. Hergün on binlerce kişi bu tür açıkları harıl harıl tarıyor.

SQL Injection Açığı Olan Siteler Nasıl Bulunur?

Arama motorlarında belirli terimler aratılarak yapılan aramalar yoluyla veya hazır listelerle açık olabilecek sitelere ulaşılır. Örneğin; “inurl:musteriler.php?id=” gibi bir arama sonucunda adresi içerisinde musteriler.php?id= geçen siteler listelenir. Ardından siteye giren saldırgan bu adresin sonuna tek tırnak işareti ekleyerek veya %27 (tek tırnağın url encode biçimi) yazarak sayfada hata mesajı olup olmadığını kontrol eder. Eğer SQL ile ilişkili bir hata mesajıyla karşılaşılıyorsa adres satırından, bir tarayıcı eklentisi ile veya Havij benzeri bir programla veritabanı adı, tablo yapısı ve verilere ulaşmaya çalışır. Bir sonraki başlıkta saldırganların sıkça kullandığı basit eklenti ve programları tanıyabilirsiniz.

SQL Injection Araçları, Programları

Gr3eNoX Exploit Scanner, Google üzerinden belirli terimlerle (dork) sonuçları tarayan, bu sonuçlar içerisinde açık bulunabilecek adresleri listeleyen bir programdır.

gr3enox exploit scanner

Aşağıda bir Firefox eklentisi olan Hackbar‘ı görüyorsunuz. Bu eklenti yardımıyla SQL injection açığı tespit edilen sitelerde SQL komutları kolayca denenebiliyor.

Hackbar Firefox Eklentisi

Komutlarla içli dışlı olmak istemeyen saldırganların gözdesi ise açık tespit edilen siteyi, SQL açıklarından faydalanarak tarayan Havij programıdır. Örnek taramada dünyaca ünlü, on binlerce kullanıcıya sahip bir yazılım sitesinin Havij ile elde edilen verileri görülmektedir.

Havij

Havij ile veritabanı bilgileri, tablo yapısı ve veriler elde edildikten sonra tüm kullanıcıların kullanıcı adlarına, şifrelerine (md5’li), e-mail adreslerine ulaşmak mümkün oluyor. Şifre Md5’li olsa bile büyük çoğunluğu program içinden kolayca kırılabiliyor. Örnekte bir kullanıcının decrypt edilmiş şifresinin “abhilash” olduğu görülüyor. Bu kullanıcı adı ve şifreyle siteye giriş yapılabiliyor.

Havij Md5

 

SQL Injection Saldırılarından Kurtulmak İçin En Etkili Yöntemler

Artık SQL injection açığı kullanan hackerların nasıl çalıştığını bildiğimize göre önlem de alabiliriz. Aşağıdaki sıralayacağım güvenlik önemleri Mysql kullanan tüm PHP yazılımları için (WordPress, Vbulletin, Smf, Xenforo, özel php scripti) geçerlidir.

  1. Mysql bağlantısı yaptığınız dosyaya veya kod satırına (Mysql bağlantılı tüm dosyalara) gelerek, sayfanın en üstüne şunu ekleyin:

    Bu Php kodu, hata raporlarının gösterilmesini engelleyecektir. Böylece hata mesajı tarayarak veritabanı bilgilerine ulaşmak isteyen hacker bunu gerçekleştiremeyecektir.
  2. PHP sayfanız veritabanına GET/POST yöntemiyle bir sorgu gönderiyorsa dışarıdan alınan bu verinin güvenli olup olmadığını kontrol etmeli ve bu veriyi uygunlaştırmalısınız. beybut.com/makale.php?id=5 şeklindeki bir urlnin Php dosyamızca veritabanındaki 5 id numaralı makaleyi çağırdığını düşünelim. Burada SQL query (sorgu) içine direkt olarak id değerini girmeniz bir faciaya neden olabilir. Bu id değerini önce bir değişkene atamalı ardından bu değişkeni ayıklamalısınız.

    Burada url’den aldığımız id’yi sırasıyla şu işlemlerden geçirdik: id’yi url decode işlemiyle okunaklı hale getir (%27 gibi ifadeleri kaldır), özel html karakterlerini kaldır (htmlspecialchars), html etiketlerini kaldır (strip_tags), tırnakları kaldır (str_replace içinde), boşlukları sil (trim), preg_replace ile sayı olmayan tüm değerleri (örn. harf, özel işaretler) sil. En son olarak elde kalan değer bir sayı değilse exit; ile çıkış yap dedik. Artık $makaleid değişkenini Mysql Query içinde rahatlıkla kullanabiliriz. Burada bir noktayı hatırlatmak gerekir ki; Sql içindeki tüm sorgularınızı (örneğin arama için post edilen veri) bu tür bir filtreye tabi tutmalısınız.
  3. Phpmyadmin ve admin panelinizi .htaccess yardımıyla şifreleyin. Bu, aynı zamanda brute force (deneme yanılma) saldırılarının da önüne geçecektir.
  4. http://tr.0day.today/ gibi sitelerde yeni açıkları takip ederek; scriptinizle ilgili bir açık varsa derhal önlem almalısınız. Bu 4 madde Sql Injection saldırılarından korunmak için site bazında alabileceğiniz en temel ve etkili önlemlerdir.
  5. Sunucu temelinde: Eğer kendinize ait bir sunucu kullanıyorsanız; mod_security, CSF (ayarları doğru yapılmak kaydıyla) gibi yazılımsal firewall’ler ve sorguçlar kullanın. Böylece saldırıyı daha sitenize ulaşmadan veya sorgu aşamasında engelleyebilirsiniz. PHP’nin, MYSQL ve web sunucusunun (örn. Apache, Nginx, Litespeed), Kernel’inizin güncel ve stabil olduğundan emin olun. Mysql ayar dosyası olan my.cnf içerisine

    satırlarını ekleyin. Php’nin engelli fonksiyonlarına (php.ini disabled_functions bölümüne) “exec”, “shell_exec”, “cat” gibi tehlikeli olabilecek komutları ekleyin. Sunucunuzda Perl, CGI, C kodlarının derlenip çalıştırılabilmesine yalnızca root’tan izin verin.  Dosya ve klasör izinlerinin (Chmod) doğru ayarlandığına emin olun.
  6. Eğer siteniz veya sunucunuz için güvenlik kaygılarınız varsa bu yazı altına yorum bırakarak Beybut’tan destek isteyebilir; yorum bölümüne ulaşılabilir bir e-mail bırakarak sizinle iletişim kurmamı sağlayabilirsiniz.