SQL INJECTION

SQL Injection hakkında bilgi verdim. İyi okumalar!

SQL INJECTION

SQL INJECTION NEDİR?

 

Merhabalar, bu yazımda sizlere SQL enjeksiyonundan bahsedeceğim. Umarım yararlı bir yazı olur.

Yazıya geçmeden önce daha iyi anlamak için SQL nedir, ne işe yarar kısmından bahsedelim.

 

Structured Query Language kelimelerinin kısaltılmışı Yapılandırılmış Sorgu Dili SQL, veri yönetimi amacıyla kullanılan bir dildir. Girmiş olduğumuz uygulama ile veri tabanı arasındaki ilişkiyi sağlayan yapıya verilen isimdir. Veri tabanı sistemleri günden güne geliştikçe verileri yönetmek için SQL dili ortaya çıkmıştır. Peki SQL dili ne işe yarar, neler yapılabilir bunlara bakalım.

 

SQL, büyük verilerin daha kolay ve güvenilir bir şekilde yönetilmesini sağlar. Veri tabanında var olan verileri kaydetmeye, yeni veriler çekmeye, verilerin tamamını güncellemeye, her türlü veri üzerinden sorgulama ve arama yapmaya yarar.       

         

  

SQL tanımını ve ne işe yaradığıyla ilgili ufak bir bilgi edindikten sonra SQL enjeksiyonu nedir konusuna geçebiliriz.

 

SQL Injection Nedir?

SQL Injection veya SQLI denilen siber saldırı türü, bir saldırganın bir uygulamanın veri tabanına yaptığı sorgulara müdahale etmesine izin veren bir web güvenlik açığıdır. Bu veri tabanı yapısı bazı hassas veriler de dahil olmak üzere verileri almak için kullanılabilir.

     

 

 

 

Başarıyla Sonuçlanan Bir SQL Injection Saldırı Amacı ve Sonucu

 

SQL Injection yapılmasının amacı hedeflenen internet sitesine SQL sorgu girişi eklenerek veya enjekte ederek güvenlik açığı yaratmaktır. Bunun olması için de güvenlik açığı olan bir giriş bulunması gerekir.

 

Başarıyla sonuçlanan bir SQL Injection saldırısı bir web uygulamasının veri tabanına ulaşılıp onu yönetebilmesini, değiştirilmesine olanak sağlar. Web uygulamaları genellikle kullanıcıların bilgilerini, kullanıcıyla alakalı istatistikleri ve bilgileri depolamak için veri tabanını kullanır. Yani doğru bir şekilde yapılmış SQL Injection saldırısı bilgisayarınızdaki hassas verileri okuyabilir. Kredi kartı bilgileriniz, e-posta şifreleriniz ve şahsi bilgilerinizi ele geçirip müdahale edebilir.

 

 

1=1 Mantığı ile SQL Injection

 

1=1 demek her zaman doğru anlamına gelir. Kişinin admin olup olmadığına bakarken şu kontrolü kullanacağımızı varsayalım.

 

select * from users where type = 'admin'

 

Bu sorgu sayesinde sadece admin olanlar giriş yapabilecek. Sorguyu şu hale getirirsek

 

select * from users where type = 'admin' or 1=1

 

Sorguyu bu hale getirirsek artık herkesin girebileceği formata getirmiş olduk. Halbuki ilk yazılan SQL kodunun amacı sadece adminlerin girmesiydi. Saldırganların bu şekildeki kodları hedeflerin sorgularına ekleyerek admin panellerine girmeye çalışır. Bu tür girişimleri engellemek gerekir. Sonuçlarına bakacak olursak

 

select * from users where type = 'admin' or 1=1 bu sorgu her zaman doğru anlamını döndürür. Bununla beraber kullanılan or bu sorgunun sonucunun her zaman 1 olarak döndürülmesini sağlar. Saldırgan bu şekilde sisteme admin olarak giriş yapmış olur.

 

 

SQL Injection Saldırı Türleri

 

SQLi saldırılarında veri tabanına erişimini elde etmek için kullanılan yöntemlerin sınıflandırılması tablodaki gibi olur.

   

       

Temel olarak 3 kısma ayırdığımız saldıları detaylıca inceleyelim.

 

1.In-band SQLi

 

Saldırgan saldırı başlatmak için kullandıkları iletişim kanalını kullanarak sonuçlarını toplar. Bu kod yerleştirme tekniği, veri tabanı sunucusuna erişmek için basit ve verimli bir yol sunduğu için yaygın olarak kullanılır.

 

  • Error based SQLi: Saldırgan, veri tabanı yapısı hakkında bilgi edinmek için veri tabanı sunucusu tarafından iletilen hata mesajlarına güvenir. Bazen hata mesajları, tüm veri tabanını numaralandırmak için yeterli veri sağlayabilir.

 

  • Union-Based SQLi: Bu durumda birkaç SELECT ifadesinin sonuçları HTTP yanıtıyla birlikte döndürülen tek bir çıktıda birleştirmek için SQLs UNION operatörü kullanılır.

 

2.Out of Band:

Bir saldırgan saldırıyı başlatmak ve sonuçları toplamak için aynı kanalı kullanamadığında meydana gelir. Veri tabanı sunucusu, DNS veya HTTP istekleri yapma yeteneği ile bir saldırgana veri gönderebilir.

         

3.Inferential

 

Bu saldırıda, web uygulama veri tabanı verileri iletmediği için saldırgan sonuçları göremez. Bu nedenle saldırgan sorgular gönderir ve web uygulamasının yanıtını ve veri tabanının davranışını gözlemleyerek veri tabanının yapısını oluşturmaya çalışır.

 

  • Boolean-Based: Bu teknik, sorgunun veri tabanına sorgular göndererek doğru veya yanlış sonuçlar döndürmesine bağlı olarak uygulamadan farklı yanıtlar almaya zorlar.

 

  • Time-Based: Bu teknik, sorgunun veri tabanına sorgular göndererek doğru veya yanlış sonuçlar döndürmesine bağlı olarak uygulamadan farklı yanıtlar almaya zorlar.

 

 

Diğer SQLi  Saldırı Türleri

 

SQL Enjeksiyonları yalnızca oturum açma algoritmalarını geçmekten farklı zararlar da verebilir. Saldırılardan bazıları şunlardır:

  • Veri silme
  • Veriler güncelleme
  • Veri ekleme
  • Truva atları gibi kötü amaçlı programları indirip yükleyebilen sunucu üzerinde komutların çalıştırılması
  • Kredi kartı bilgileri, e-posta ve parolalar gibi değerli verileri saldırganın uzak sunucusuna aktarma
  • Kullanıcı giriş bilgilerini alma vb.

 

Peki SQLi saldırılarına karşı neler yapılabilir?

 

  • Kullanıcı girdisine asla güvenilmemelidir.

Dinamik SQL deyimlerinde kullanılmadan önce her zaman temizlenmelidir.

 

  • Veri tabanı bağlantısı kullanıcı erişim hakları

Veri tabanına bağlanmak için kullanılan hesaplara yalnızca gerekli erişim hakları verilmelidir. Bu, SQL deyimlerinin sunucuda gerçekleştirebileceklerini azaltmaya yardımcı olabilir.

 

  • Hata mesajları

Hassas bilgileri ve tam olarak nerede bir hata oluştuğunu göstermemelidir.

 

  • Güncellenmiş Web Teknolojileri Kullanımı

Yazılım güncellemeleri genellikle keşfedilen güvenlik açıkları düzenlemeler içerir. Saldırganlar, kötü amaçlı yükleri dağıtmak için genellikle bu güvenlik açıklarına güvenir.

 

 

SQLi hakkındaki yazım buraya kadar. Umarım faydalı olmuştur.

Fırat Üniversitesi Adli Bilişim Mühendisliği 1.sınıf öğrencisiyim. Siber güvenlik ve adli bilişim alanında eğitimler alarak kendimi geliştirmekteyim.