CyberFlow Logo CyberFlow BLOG
Owasp Injection

UNION Tabanlı SQL Injection Tekniği: Derinlemesine İnceleme

✍️ Ahmet BİRKAN 📂 Owasp Injection

UNION tabanlı SQL Injection tekniğini anlayarak siber güvenlik becerilerinizi geliştirin. Uygulama davranışlarını ve saldırı aşamalarını öğrenin.

UNION Tabanlı SQL Injection Tekniği: Derinlemesine İnceleme

UNION tabanlı SQL Injection, uygulama sorgularını manipüle etmenin etkili bir yöntemidir. Bu blog yazısında, teknik detayları ve uygulanabilir adımları keşfedeceksiniz.

Giriş ve Konumlandırma

Giriş

Siber güvenlik dünyasında, SQL injection saldırıları, özellikle veri tabanları ile etkileşimde bulunan web uygulamaları açısından en yaygın ve etkili saldırı tekniklerinden biri olarak öne çıkmaktadır. Bu yazıda, UNION tabanlı SQL injection tekniğinin derinlemesine incelemesine geçmeden önce, bu tekniğin temelini anlamak ve neden bu kadar kritik bir konu olduğunu ortaya koymak önem arz etmektedir.

SQL Injection Nedir?

SQL injection, bir saldırganın, veri tabanına gönderilen SQL sorgularını manipüle ederek yetkisiz erişim sağlamak için kullandığı bir tekniktir. Saldırganlar, kullanıcı girişi veya sorgu parametreleri aracılığıyla kötü niyetli SQL kodları ekleyerek veri tabanlarında hassas bilgilere erişim sağlayabilir, bu verileri değiştirebilir veya silebilir. SQL injection'ının çeşitli türleri bulunmaktadır ve UNION tabanlı SQL injection, bu türler arasında önemli bir yere sahiptir.

UNION Tabanlı SQL Injection Tekniği

UNION tabanlı SQL injection, mevcut bir SQL sorgusunun sonucuna başka bir sorgunun sonuçlarını eklemek için UNION anahtar kelimesinin kullanımına dayanmaktadır. Bu teknik, bazı özel koşullar altında oldukça etkili olabilir. Saldırgan, ilk olarak mevcut sorgunun nasıl bir sonuç döndürdüğünü anlamak zorundadır. Bu adım, UNION denemelerinin başarısı açısından kritik öneme sahiptir. Çünkü eklenen sorgunun sütun sayısı ve veri tipleri mevcut sorgunun yapısıyla uyumlu olmalıdır.

Neden Önemli?

UNION tabanlı SQL injection'ın önemi, hem saldırganların hem de siber güvenlik profesyonellerinin dikkatini çeken bazı faktörlerden kaynaklanmaktadır:

  1. Hassas Bilgilere Erişim: Bu saldırı türü, bir saldırgana kullanıcı bilgileri, şifreler ve diğer hassas veriler gibi kritik verilere erişim sağlama imkanı tanır.
  2. Veri Manipülasyonu: Saldırganlar, uygulamanın veritabanındaki mevcut verileri değiştirme veya silme yeteneğine de sahip olabilirler.
  3. Uygulama Güvenliği Zafiyetleri: UNION tabanlı SQL injection, iyi yapılandırılmamış veya güvenliği yeterince sağlanmamış web uygulamalarında sıklıkla kullanılmaktadır. Bu, siber güvenlik ekiplerinin uygulama güvenliğini artırmaları için kritik bir iş alanı sunmaktadır.
  4. Ağ Analizi: Bu teknik, yalnızca veri çekme işleminden ibaret değildir; aynı zamanda, mevcut sistemin yapı analizi için bir fırsat sunmaktadır. Sütun sayısı, veri tipi ve yansıyan alan gibi detayların doğru şekilde tespit edilmesi, saldırganların hedef alacağı noktaları belirlemesine yardımcı olur.

Ön Hazırlık

UNION tabanlı SQL injection tekniği, uygulamadaki veri tabanı sorgularının yapılarını anlamayı gerektirir. Saldırganın ilk yapması gereken şey, normal sorgu davranışını gözlemlemek ve sorgunun hangi veri türlerini döndürdüğünü anlamaktır. Bu aşama, sonraki adımlar için sağlam bir temel oluşturur. Saldırının temel mantığını yakalayabilmek için, PHP veya SQL gibi dilleri kullanarak çeşitli örnekler üzerinde çalışmak faydalı olacaktır.

Aşağıdaki örnek, bir saldırgana sunulan bir sorgu ile nasıl bir SQL injection gerçekleştirebileceği hakkında temel bir fikir vermektedir:

SELECT * FROM users WHERE id = 1

Bu sorguya aşağıdaki şekilde bir UNION eklenerek veri çekilmeye çalışılabilir:

SELECT * FROM users WHERE id = 1 UNION SELECT username, password FROM admin

Bu örnek, saldırganın uygulamanın veri çıkışını manipüle ederek hassas verilere erişimini sağlamaktadır.

Bundan sonraki aşamalarda, UNION tabanlı SQL injection tekniğinin aşamalarını, uygulama üzerindeki etkisini, kullanılması gereken SQL komutlarını ve bu süreçte dikkat edilmesi gereken noktaları derinlemesine ele alacağız. Okuyucular, bu içerik sayesinde hem saldırı yöntemlerini anlayacak hem de bu tür saldırılara karşı önlem alma yollarını keşfedeceklerdir.

Teknik Analiz ve Uygulama

UNION Öncesi Normal Sorgu Davranışını Görmek

UNION tabanlı SQL Injection tekniğini anlamanın ilk adımı, uygulamanın nasıl normal veri döndürdüğünü gözlemlemektir. Bir saldırgan, mevcut sorgunun sonucuna ek veri kümeleri iliştirebilmek için, ilk olarak normal bir istek yaparak sorgunun geri dönüşünde yer alan sütun sayısını ve veri türlerini öğrenmelidir. Bu süreç, öncelikle geçerli bir istekte bulunarak başlar:

curl http://target.local/product?id=1

Yukarıdaki komut, hedef uygulamaya id parametresi ile bir bütünlükte verilmiş bir istek gönderir. Bu sorgunun döndürdüğü sonuç, sorunlu bölgeyi analiz edebilmek için kritik öneme sahiptir.

Tekniğin Merkezindeki SQL Anahtar Kelimesini Tanımak

UNION tabanlı SQL Injection, temel olarak mevcut sorgunun sonucunu değiştirmek için kullanılan UNION anahtar kelimesine dayanır. Bu kelime, farklı sorgu sonuçlarını birleştirmeyi sağlar. Bu bağlamda, saldırgan, mevcut sorguyu değiştirip kendi SELECT ifadesini eklemeye çalışır.

Örneğin, şu şekilde bir sorgu yapabiliriz:

curl http://target.local/product?id=-1%20UNION%20SELECT%201,2,3

Yukarıdaki komut, orijinal sorgunun dışında, 1, 2 ve 3 değerlerini döndürmektedir. Ancak burada dikkat edilmesi gereken nokta, eklenen sorgunun mevcut sorgunun sütun yapısına uyum sağlaması gerektiğidir.

UNION Saldırısının Başarılı Olması İçin Gerekli Şartlar

UNION tabanlı SQL Injection’ın başarılı olabilmesi için saldırganın dikkate alması gereken bazı şartlar vardır. Bunlar:

  1. Sütun Sayısı Uyumu: Eklenen sorgunun mevcut sorgunun döndüreceği sütun sayısıyla aynı sayıda sütun içermesi zorunludur.
  2. Veri Tipi Uyumu: Uygulamanın kabul ettiği veya veritabanının yorumlayabileceği türlerde veriler kullanılmalıdır.

Bu unsurlar, saldırganın başarılı bir şekilde veri çekebilmesi için son derece kritik öneme sahiptir. Yani, ilk önce mevcut sorgu yapısını anlamak ve bu bilgiyi kendi sorgusuna yansıtmak gerekir.

UNION ile Sütun Yapısını Test Etmek

Saldırganlar, UNION tabanlı SQL Injection sürecinde genellikle ilk olarak kaç sütun olduğunu belirlemeye çalışır. Bunun için, ORDER BY ifadesi ile deneme yaparak ulaşmak istedikleri veriye yönelik ipuçları elde edebilirler. Örneğin, aşağıdaki gibi denemeler yaparak doğru sayıyı bulmaya çalışabilirler:

curl http://target.local/product?id=1 ORDER BY 1
curl http://target.local/product?id=1 ORDER BY 2

UNION ile kullanılabilecek sütun sayısını belirlemek için bu tür ORDER BY denemeleri yapmak önemlidir. Eğer sonuç başarılı ise, bu durumda rapor edilen sütun sayısı kadar ORDER BY elemanı artırılarak denemeler devam ettirilir. Hangi değerlerden sonra hata alındığı gözlemlenerek, mevcut sorgunun kaç sütun içerdiği hakkında bilgi sahibi olunabilir.

Sütun Sayısını Belirlemede Kullanılan İpucunu Tanımak

UNION tabanlı saldırılarda, sütun sayısını belirtmek için en klasik yöntemlerden biri, ORDER BY kullanarak yapılan sıradaki denemelerdir. Bu yaklaşımda dikkat edilmesi gereken, hangi sayıya ulaşıldığında hata meydana geldiğidir. Bu, sorgunun kaç sütunun olduğunu anlamaya yardımcı olur.

curl http://target.local/product?id=1 ORDER BY 3

Yukarıdaki örnek, "3" parametresi ile eğer uygulama hata vermezse, sorgunun 3 sütuna sahip olduğu sonucuna varabiliriz.

UNION Saldırısının Aşamalarını Doğru Sırada Anlamak

UNION tabanlı SQL Injection yalnızca veri çekme stratejisi değil, aynı zamanda sorgu yapısını analiz etme sürecidir. İlk önce mevcut sorgunun özelliklerini (sütun sayısı, veri tipleri ve çıktı) anlamak gerekir. Doğru aşamaların belirlenmesi, verimlilik açısından da oldukça önemlidir.

Aşağıdaki adımlar, saldırının başarılı olabilmesi için gereken mantığı ortaya koyar:

  1. Normal bir istek yaparak mevcut yapılan sorgunun çıktısını gözlemleme.
  2. ORDER BY kullanarak mevcut sorgunun kaç sütun içerdiğini belirleme.
  3. UNION SELECT yapısıyla, mevcut sorgunun döndürmediği verilere ulaşma.

Sonuç olarak, UNION tabanlı SQL Injection, ilk başta analiz ve gözlemi gerektiren zorlu bir süreçtir. Ancak uygulanacak adımlar doğru bir şekilde takip edilirse, başarılı sonuçlar alınması mümkündür.

Risk, Yorumlama ve Savunma

Risk Analizi

UNION tabanlı SQL Injection, web uygulamalarının SQL sorgularında bulunan zafiyetlerden faydalanarak, saldırganların veri çekmelerine olanak tanır. Bu sızma tekniği, kullanıcı girdi validasyonlarının yetersiz olduğu sistemlerde ciddi riskler barındırır. İlk olarak, saldırganın potansiyel olarak erişim sağlayabileceği veri türlerini göz önünde bulundurduğumuzda, kullanıcı bilgileri, finansal veriler ve daha fazlasının hedef alınabileceğini belirtmek gerekir. Bu da, sızan verilerin doğrudan işletmelerin itibarını zedeleyebileceği anlamına gelir.

Yorumlama

Bir UNION tabanlı SQL Injection gerçekleştirilmeden önce, saldırganın uygulamada kullanılan mevcut SQL sorgularının yapısını anlaması gerekir. Mevcut sorgunun sütun sayısı ve veri tipleri, saldırının başarılı olması için kritik öneme sahiptir. Eğer uygulama, beklenmedik veya yanlış yapılandırılmış bir sorgu sonucunda hata veriyorsa, saldırgan daha fazla veri çekme şansına sahip olur. Bu durum, yanlış yapılandırılmış bir uygulamanın, sızma girişimlerine karşı savunmasız kalmasına yol açar.

Örneğin, SQL sorgusunda sütun sayısının uyuşmazlığına bağlı olarak hata alındığında, saldırgan bu durumu kullanarak mevcut yapıyı çözmeye çalışacaktır:

curl http://target.local/product?id=-1 UNION SELECT 1, 'test', 3

Eğer sorgu bu şekilde hatalı ise, saldırgan mevcut yapı hakkında bilgi sahibi olmaya başlayabilir.

Yanlış Yapılandırma veya Zafiyetler

UNION tabanlı SQL Injection, genellikle yanlış yapılandırmalar veya zayıf güvenlik uygulamaları yüzünden ortaya çıkar. Özellikle kullanıcı girdisinin doğru bir şekilde filtrelenmemesi, veri türleri ile sütun sayısının kontrol edilmemesi gibi durumlar, saldırganların UNION sorgularını manipüle etmesine olanak tanır. Örneğin, bir web uygulaması, sağlanan kullanıcı girdilerini yeterince temizlemediğinde, potansiyel saldırganlar SQL koşullarını değiştirebilmek için bu girdileri kullanabilir.

Aşağıdaki örnek, yanlış yapılandırmanın nasıl bir zafiyete yol açabileceğine dair bir örnek sunar:

-- Eğer bu tür bir sorgu çalıştırılıyorsa
SELECT * FROM products WHERE id = '$user_input';

Yukarıdaki kodda $user_input kısmı doğru şekilde sanitize edilmediği için, saldırgan bu alana SQL ifadeleri ekleyebilir.

Sızan Veri ve Topoloji

UNION tabanlı SQL Injection girişimlerinin sonuçları, sızan verilere bağlı olarak değişiklik gösterebilir. Temel olarak, saldırgan uygulamanın sunucusundan veri çekerek, sistemin yapısını analiz etmekte ve daha derinlemesine veri elde etmekte başarılı olabilir. Kullanıcı bilgileri, uygulama konfigürasyonları, veritabanı yapıları gibi çeşitli bilgiler elde edilebilir.

Bununla birlikte, saldırının aşamaları sırasında, kullanılan tekniklere ve elde edilen verilere bağlı olarak, uygulamanın güvenlik topolojisi de analiz edilebilir. Saldırgan, UNION sorguları aracılığıyla, güvenlik duvarlarının ve diğer koruma önlemlerinin potansiyel zaaflarını belirleyebilir.

Savunma Stratejileri

UNION tabanlı SQL Injection saldırılarına karşı güçlü savunma stratejileri oluşturmak kritik öneme sahiptir. Aşağıda bazı öneriler belirtilmiştir:

  1. Girdilerin Doğrulanması ve Temizlenmesi: Kullanıcıdan gelen tüm girdiler, SQL sorguları içerisinde kullanılmadan önce dikkatlice kontrol edilmeli ve uygun şekilde temizlenmelidir.

  2. Hazır Sorgu Kullanımı (Prepared Statements): SQL sorguları hazır ifadeler (prepared statements) kullanılarak geliştirilmeli, bu sayede kullanıcı girdileri ile SQL komutları arasındaki ayrım belirgin şekilde sağlanmalıdır.

  3. Veritabanı Erişim Yetkilerinin Sınırlandırılması: Uygulamalara ait veritabanı erişimleri, sadece gerekli yetkilerle sınırlı tutulmalı, böylece yanlışlıkla ya da kötü niyetli erişimler kısıtlanmalıdır.

  4. Gelişmiş Güvenlik Ağları: Web uygulama güvenlik duvarları (WAF), kötü niyetli trafik akışını tespit edebilir ve engelleyebilir. Bu tür çözümler, siber saldırılara karşı önleyici bir koruma sağlamak için kullanılmalıdır.

Sonuç

UNION tabanlı SQL Injection, eksik güvenlik önlemleri ve hatalı yapılandırmalardan yararlanarak kritik verilere erişim sağlayabilir. İyi yapılandırılmış bir güvenlik politikası, girdilerin doğrulanması ve temizlenmesi gibi savunma yöntemleri ile bu riski yönetilebilir. Potansiyel veri sızıntılarının ve kullanıcı bilgilerine yönelik saldırıların önüne geçmek için, yukarıda belirtilen önlemlerin uygulanması önemlidir.