Betül Sena Birinci
5 min readMay 31, 2023

SQL — SQL Injection Attack — Attack Types

SQL Nedir?

Yapısal sorgu dilidir. Verileri yönetmek ve şekillendirmek amacıyla kullanılan bir dildir. SQL, herhangi bir veritabanı ortamında kullanılan bir alt dildir. SQL’de işlemler yalnızca veritabanlarına karşı gerçekleştirilebilir. Veritabanındaki sisteme bilgi eklemek, bilgi değiştirmek, bilgi çıkarmak, bilgi sorgulamak için kullanılır.

SQL Sorgu Örneği

SQL Injection Nedir?

Bu, bir web uygulaması tarafından yürütülen SQL sorgularına müdahale ederek veritabanındaki verilere yetkisiz erişim sağlama yöntemidir.

OWASP

Injection Definition Based On OWASP

Bir uygulama şu durumlarda saldırıya açıktır:

· Kullanıcı tarafından sağlanan veriler, uygulama tarafından doğrulanmaz, filtrelenmez veya temizlenmez.

· Bağlama duyarlı çıkışlar olmadan dinamik sorgular veya parametreleştirilmemiş çağrılar doğrudan yorumlayıcı tarafından kullanılır.

· Ek hassas veri kümelerini çıkarmak için nesne ilişkisel eşleme (ORM) arama parametrelerinde riskli veriler kullanılır.

· Düşman verileri doğrudan veya kombinasyon halinde kullanılır. SQL veya komutlar, dinamik sorgularda, komutlarda veya saklı yordamlarda yapısal veya kötü amaçlı veriler içerir.

SQL Injection Attack Types

1. In Band SQLi (Klasik SQL)

Bant içi SQL enjeksiyonu, en yaygın ve kullanımı kolay SQL enjeksiyon saldırısıdır. Bant içi SQL enjeksiyonu, bir saldırgan bir saldırı başlatmak ve sonuçları toplamak için aynı iletişim kanalını kullanabildiğinde gerçekleşir. İkiye ayrılır.

1 A. Error Based SQLi

Hata tabanlı SQLi, veritabanının yapısı hakkında bilgi edinmek için veritabanı sunucusu tarafından yayınlanan hata mesajlarına dayanan bir bant içi SQL enjeksiyon tekniğidir. Bazı durumlarda, bir saldırganın tüm veritabanını numaralandırması için tek bir hata tabanlı SQL enjeksiyonu yeterlidir. Hatalar, bir web uygulamasının geliştirme aşamasında çok faydalıdır, ancak devre dışı bırakılmalı veya canlı bir sitede kısıtlı erişime sahip bir dosyada oturum açmalıdır.

1b. Union Based SQL Injection

Bu teknik, tek bir HTTP yanıtı almak için veritabanı tarafından oluşturulan birden çok seçme ifadesini birleştirmek için UNION SQL operatörünü kullanır. Bu yanıt, bir saldırganın kullanabileceği verileri içerebilir. Saldırganın orijinal sorgu tarafından döndürülen sonuçları genişleterek veritabanından bilgi çıkarmasına olanak tanır.

2. Inferential(Blind) SQL Injection

Bant içi SQLi’den farklı olarak, bir saldırganın istismar etmesi yavaş olabilir, ancak diğer herhangi bir SQL enjeksiyonu gibi tehlikelidir. Çıkarım SQLi saldırıları aslında verileri web uygulaması aracılığıyla iletmez ve saldırgan bant içi saldırının sonuçlarını göremez (bu nedenle bu tür saldırılara bazen “kör SQL enjeksiyon saldırısı” denir.) Bunun yerine, bir saldırgan, web uygulaması yanıtını ve sonuçta ortaya çıkan veritabanı sunucusu davranışını gözlemlerken bir veri yükü göndererek veritabanı yapısını yeniden oluşturabilir.

İki tür çıkarımsal SQL Enjeksiyonu vardır. Blind-boolean tabanlı SQLi ve Blind-time-based SQLi’dir.

2a. Blind Boolen Based SQL Injection

Kısmi kör enjeksiyonlar, HTTP Durum Kodlarını veya HTML yanıtında doğru veya yanlış ifadeleri gösteren diğer işaretçileri döndüren sorgulardır. Doğru veya yanlış sorgular, 1(Doğru) veya 0(Yanlış) satır döndürülerek de tanımlanabilir. Saldırgan, veritabanına bir SQL sorgusu gönderir ve uygulamadan sonuçları döndürmesini ister. Sonuç, sorgunun doğru veya yanlış olmasına bağlıdır. Sonuca bağlı olarak HTTP yanıtındaki bilgiler değişir veya aynı kalır. Saldırgan daha sonra mesajın doğru mu yoksa yanlış mı olduğunu belirleyebilir.

Balancing Query: Sonrasında gelen her şey ignore edilir.

  • Kod Bloğu
  • Normal input
  • SQL injection input
  • SQL Sorgusunun Son Hali
  • SQL Sorgusunun Zafiyetli Hali
  • Olası bir durum ve sorgu örnekleri

2b. Time Based Blind SQL Injection

Zamana dayalı bir saldırıda, bir saldırgan, sorgu yürütmede gecikmeye zorlamak için sunucuya kod içeren SQL komutları gönderir. Yanıt süresi, sorgu sonucunun doğru mu yoksa yanlış mı olduğunu gösterir. Yanıta bağlı olarak, saldırgan başka bir sorgu yürütür. Bu, saldırganın her bir karakteri ayrı ayrı saymasını gerektirdiğinden, özellikle büyük veritabanlarında genellikle yavaş bir penetrasyon tekniğidir.

Saldırganın bu özellikleri bir sorguda kullanmaya çalışması ve yanıtı yavaşlatmayı başarması, SQL enjeksiyonunun mümkün olduğunu ve sunucunun veritabanı olarak MySQL kullandığını kanıtlar. (SLEEP işlevi MySQL’de çalışır) Bu, saldırganın daha karmaşık bir yük eklemesine neden olabilir.

3. Out Of Band SQL Injection

Bant dışı SQL enjeksiyonu, bir saldırgan aynı kanalı kullanarak bir saldırı başlattığında ve sonuçları toplayamadığında gerçekleşir.

Buradaki görsel, sorgunun web uygulaması üzerinden uygulamanın veritabanına gönderildiğini göstermektedir. O zaman, ağdaki dinleme sunucusu, veri tabanı çıkış bant isteklerinin bazı DNS ve HTTP etkileşimlerinin bilgilerini yakalar. Bant dışı teknikleri kullanırken Burp Collaborator’ı kullanabiliriz.

%d : Bir dizeyi tamsayıya dönüştüren parametredir.

Nasıl Önlenir?

1. Kullanıcı girişlerinin kontrol edilip filtrelenmesi

2. Parametreli sorgu kullanımı (saldırgan komut eklese bile sorgunun amacını değiştiremez)

3. Kullanıcı rollerini minimum izinlerle sınırlamak

4. WAF’ın devrede olması

5. Yazılan sorguların baştan gözden geçirilmesi

6. Çift faktörlü doğrulamalar

7. Güncel sistemlerin kullanımı

8. Parametreyi sorguya göndermeden önce PDO (Php Data Object) ile yapılandırmak.

9. LIMIT Clause kullanımı

PDO: Veritabanlarına kolay ve kararlı erişimi kolaylaştıran bir arayüzdür ve PHP sürüm 5.1'den beri kullanılmaktadır.Köklü değişiklik yapılacağı zaman bunu arayüz üzerinden basitçe düzenleyerek yapmak mümkündür.

LIMIT: Döndürülecek kayıt sayısını belirtmek için kullanılır.

Kaynakça

· https://tr.wikipedia.org/wiki/SQL

· https://petri.com/sql-server-string-data-types/

· https://owasp.org/Top10/

· https://www.hackingloops.com/sql-statements-made-into-sql-injections/

· https://medium.com/@saqibshabbir/in-band-sql-injection-walk-through-part-1-d0a6f12ed69c

· https://sqlwiki.netspi.com/injectionTypes/unionBased/#mysql

· https://www.cloudflare.com/learning/security/threats/sql-injection/

· https://beaglesecurity.com/blog/vulnerability/time-based-blind-sql-injection.html

· https://www.drupal.org/forum/support/module-development-and-code-questions/2007-03-05/what-do-d-and-s-variables-mean-in-sql

· https://www.prplbx.com/resources/blog/sql-injection/

· https://blog.sqreen.com/sql-injection-explained/

Betül Sena Birinci

Erciyes University • Computer Engineering I'd like to share my favourite books , movies and experience about my department with you . Best wishes 🎈