SQL Injection (SQLi), kötü amaçlı SQL ifadelerinin yürütülmesini mümkün kılan bir enjeksiyon saldırısı türüdür. Bu ifadeler, bir web uygulamasının arkasındaki veritabanı sunucusunu denetler. Saldırganlar, uygulama güvenlik önlemlerini atlamak için SQL Injection güvenlik açıklarını kullanabilir. Bir web sayfasının veya web uygulamasının kimlik doğrulaması ve yetkilendirmesi etrafında dolaşabilir ve tüm SQL veritabanının içeriğini alabilirler. Ayrıca veritabanına kayıt eklemek, değiştirmek ve silmek için SQL Injection kullanabilirler.
SQL Injection güvenlik açığı, MySQL, Oracle, SQL Server veya diğerleri gibi SQL veritabanı kullanan herhangi bir web sitesini veya web uygulamasını etkileyebilir. Suçlular bunu hassas verilerinize yetkisiz erişim elde etmek için kullanabilir: müşteri bilgileri, kişisel veriler, ticari sırlar, fikri mülkiyet ve daha fazlası. SQL Injection saldırıları en eski, en yaygın ve en tehlikeli web uygulaması güvenlik açıklarından biridir. OWASP kuruluşu (Open Web Application Security Project) OWASP Top 10 2017 belgelerindeki enjeksiyonları web uygulama güvenliğine bir numaralı tehdit olarak listeliyor.
SQL sorgusu nedir?
SQL, her kullanıcı için özelleştirilebilir veri görünümleri oluşturmak üzere veritabanlarına erişmek ve bunları yönetmek için kullanılan standartlaştırılmış bir dildir. SQL sorguları veri alma, güncelleme ve kayıt kaldırma gibi komutları yürütmek için kullanılır. Farklı SQL öğeleri bu görevleri gerçekleştirir, örneğin, kullanıcı tarafından sağlanan parametrelere dayalı olarak verileri almak için SELECT deyimini kullanan sorgular.
SQL Injection Türleri
SQL Injectionları genellikle üç kategoriye ayrılır: Bant içi SQLi (Klasik), Çıkarımsal SQLi (Kör) ve Bant Dışı SQLi. SQL Injection türlerini, arka uç verilerine erişmek için kullandıkları yöntemlere ve hasar potansiyellerine göre sınıflandırabilirsiniz.
Bant içi Sql
Saldırgan, saldırılarını başlatmak ve sonuçlarını toplamak için aynı iletişim kanalını kullanır. Bant içi SQLi'nin sadeliği ve verimliliği, onu en yaygın SQLi saldırısı türlerinden biri haline getirir. Bu yöntemin iki alt varyasyonu vardır:
- Hata tabanlı SQL — saldırgan, veritabanının hata iletileri üretmesine neden olan eylemler gerçekleştirir. Saldırgan, veritabanının yapısı hakkında bilgi toplamak için bu hata iletileri tarafından sağlanan verileri kullanabilir.
- Birliğe dayalı SQL —Bu teknik, tek bir HTTP yanıtı almak için veritabanı tarafından oluşturulan birden çok seçme ifadeyi birleştiren UNION SQL işlecinden yararlanır. Bu yanıt, saldırgan tarafından kullanılabilecek veriler içerebilir.
Çıkarımsal (Kör) Sql
Saldırgan, sunucuya veri yükleri gönderir ve yapısı hakkında daha fazla bilgi edinmek için sunucunun yanıtını ve davranışını gözlemler. Veriler web sitesi veritabanından saldırgana aktarılmadığından bu yöntem kör SQLi olarak adlandırılır, böylece saldırgan bant içi saldırı hakkında bilgi göremez.
Kör SQL Injectionları, sunucunun yanıtına ve davranış kalıplarına dayanır, bu nedenle yürütülmesi genellikle yavaştır, ancak aynı derecede zararlı olabilir. Kör SQL Injectionları aşağıdaki gibi sınıflandırılabilir:
- Boolean — saldırganın veritabanına bir SQL sorgusu göndererek uygulamanın bir sonuç döndürmesini ister. Sonuç, sorgunun doğru veya yanlış olmasına bağlı olarak değişir. Sonuca dayanarak, HTTP yanıtı içindeki bilgiler değişecek veya değişmeden kalacaktır. Saldırgan, ileti doğru veya yanlış bir sonuç oluşturduysa bu sorunu çözebilir.
- Zamana dayalı —attacker veritabanına bir SQL sorgusu gönderir, bu da veritabanının tepki vermeden önce beklemesini sağlar (saniyeler içinde). Saldırgan, bir sorgunun doğru veya yanlış olup olmadığını, veritabanının yanıt verdiği andan itibaren görebilir. Sonuca dayanarak, anında veya bir bekleme süresinden sonra bir HTTP yanıtı oluşturulur. Böylece saldırgan, kullandıkları iletinin veritabanındaki verilere dayanmadan doğru veya yanlış döndürdüğü takdirde çalışabilir.
SQL Injection Saldırısı Nasıl ve Neden Gerçekleştirilir?
SQL Injection saldırısı yapmak için, saldırganın önce web sayfası veya web uygulaması içinde savunmasız kullanıcı girdileri bulması gerekir. SQL Injection güvenlik açığı olan bir web sayfası veya web uygulaması, bu tür kullanıcı girişlerini doğrudan bir SQL sorgusunda kullanır. Saldırgan giriş içeriği oluşturabilir. Bu tür içeriğe genellikle kötü amaçlı yük denir ve saldırının anahtar parçasıdır. Saldırgan bu içeriği gönderdikten sonra, veritabanında kötü amaçlı SQL komutları yürütülür.SQL, ilişkisel veritabanlarında depolanan verileri yönetmek için tasarlanmış bir sorgu dilidir. Verilere erişmek, değiştirmek ve silmek için kullanabilirsiniz. Birçok web uygulaması ve web sitesi tüm verileri SQL veritabanlarında depolar. Bazı durumlarda, işletim sistemi komutlarını çalıştırmak için SQL komutlarını da kullanabilirsiniz. Bu nedenle, başarılı bir SQL Injection saldırısının çok ciddi sonuçları olabilir.
- Saldırganlar, veritabanındaki diğer kullanıcıların kimlik bilgilerini bulmak için SQL Injectionlarını kullanabilir. Daha sonra bu kullanıcıları taklit edebilirler. Kimliğe bürünülen kullanıcı, tüm veritabanı ayrıcalıklarına sahip bir veritabanı yöneticisi olabilir.
- SQL, veritabanından veri seçmenize ve çıktı almanıza olanak tanır. SQL Injection güvenlik açığı, saldırganın bir veritabanı sunucusundaki tüm verilere tam erişim sağlamasına izin verebilir.
- SQL ayrıca bir veritabanındaki verileri değiştirmenize ve yeni veriler eklemenize olanak tanır. Örneğin, bir finansal uygulamada, bir saldırgan dengeleri değiştirmek, işlemleri geçersiz kılmak veya hesaplarına para aktarmak için SQL Injection kullanabilir.
- Bir veritabanından kayıtları silmek, hatta tabloları bırakmak için SQL'i kullanabilirsiniz. Yönetici veritabanı yedeklemeleri yapsa bile, verilerin silinmesi veritabanı geri yükleninceye kadar uygulamanın kullanılabilirliğini etkileyebilir. Ayrıca, yedeklemeler en son verileri kapsamayabilir.
- Bazı veritabanı sunucularında, veritabanı sunucusunu kullanarak işletim sistemine erişebilirsiniz. Bu kasıtlı veya kazara olabilir. Bu durumda, bir saldırgan ilk vektör olarak bir SQL Injectionu kullanabilir ve ardından bir güvenlik duvarının arkasındaki dahili ağa saldırabilir.