Tüm Detayları İle SQL Injection


Bu yazımda sizlere SQL Injection hakkında detaylı şekilde bilgi vermeye çalışacağım ve örnekler ile sizlerin daha kolay şekilde anlamanızı sağlayacağım. Tabi bunun için sizlere birkaç terim hakkında açıklama yapmam gerekiyor.

SQL nedir? SQL çeşitleri nelerdir?

SQL, veri tabanlarını yönetmek  için kullanılan bir sorgu dilidir. SQL ile veri tabanı üzerinde işlemler yapılır ve kolay bir biçimde verilerin yönetimini  sağlanır. Bunları kendi içerisindeki çeşitli söz dizimleri   ile  yapar. Bu  söz  dizimleri ve komutları SQL dilini oluşturur.

SQL dili birçok farklı çeşidi vardır. En yaygın örnekleri Microsoft SQL Server, Oracle, Mysql, Postgresql ürünleridir. Bu farklı SQL çeşitleri, sql söz dizimi ve anlam açısından birbirine çok benzemesine rağmen bazı kurallarda birbirinden oldukça farklı yapılar olduğu söylenebilir. Yaygın olarak kullanılan  bu veri tabanı yönetim sistemleri, amaca uygun olarak çeşitli birçok platformda kullanılırlar.

SQL Injection nedir?

SQLI olarak da bilinen SQL Injection, bizim görüntülememize izin verilmeyen bilgilere erişmek amacıyla veri tabanı manipülasyonu için kötü amaçlı SQL kodu kullanan yaygın bir saldırı türüdür. Bu bilgiler, hassas şirket verileri, kullanıcı listeleri veya özel müşteri ayrıntıları dahil olmak üzere herhangi bir sayıda öğeyi içerebilir.

SQL Injection, bir işletme üzerindeki etkisi çok geniştir. Başarılı bir saldırı, kullanıcı listelerinin yetkisiz olarak görüntülenmesine, tüm tabloların silinmesine ve bazı durumlarda saldırganın bir veri tabanı üzerinde yönetici hakları kazanmasına neden olabilir ve bunların tümü bir işletme için son derece zararlıdır.

Bir SQLi’nin potansiyel maliyetini hesaplarken, telefon numaraları, adresler ve kredi kartı bilgileri gibi kişisel bilgilerin çalınması durumunda müşteri güveninin kaybedileceğini dikkate almak önemlidir.

Bu saldırıda herhangi bir SQL veri tabanına saldırmak için kullanılabilirken, web siteleri en sık hedeflerdir.

SQL Injection Türleri

SQL Injection, ciddi sorunlara neden olmak için çeşitli şekillerde kullanılabilir. Saldırgan, SQL Injection’dan yararlanarak, bir veri tabanındaki kimlik doğrulamasını atlayabilir, erişebilir, verileri değiştirebilir ve silebilir. Bazı durumlarda, SQL Enjeksiyonu işletim sistemindeki komutları yürütmek için bile kullanılabilir ve potansiyel olarak bir saldırganın bir güvenlik duvarının arkasında bulunan bir ağın içinde daha zarar verici saldırılara yükselmesine izin verir.

SQL Enjeksiyonu üç ana kategoriye ayrılabilir:

  1. In-band SQLi (Classic)
    • Error-based SQLi
    • Union-based SQLi
  2. Inferential SQLi (Blind)
    • Boolean-based SQLi 
    • Time-based SQLi
  3. Out-of-band SQLi

1) In-band SQLi (Classic)

SQL Injection saldırılarının en yaygın ve kullanımı kolay olanıdır. Bir saldırgan hem saldırıyı başlatmak hem de sonuçları toplamak için aynı iletişim kanalını kullanır.

a) Error-based SQLi

Veri tabanının yapısı hakkında bilgi edinmek için veri tabanı sunucusu tarafından atılan hata mesajlarına dayanan bir SQL Injection tekniğidir. Bazı durumlarda, bir saldırganın tüm veri tabanını numaralandırması için tek başına hata tabanlı SQL enjeksiyonu yeterlidir. Hatalar bir web uygulamasının geliştirme aşamasında çok yararlı olsa da, canlı bir sitede devre dışı bırakılmalı veya bunun yerine sınırlı erişime sahip bir dosyaya giriş yapılmalıdır. Bu kategori için internette bulduğum birkaç örnek şu şekildedir.

Select * from stores where product_id = blah’ or 1=1-- (buradan sonraki her şey sistem tarafından görmezden gelinecektir)
Select * from users where username=’blah’ or ‘a’=’a’ -- and password=’pass’

b) Union-based SQLi

İki veya daha fazla “SELECT” ifadesinin sonuçlarını tek bir sonuçta birleştirmek için UNION SQL operatörünü kullanan ve daha sonra HTTP yanıtının bir parçası olarak döndürülen bir SQL Injection tekniğidir. Bu HTTP yanıtında, saldırgan tarafından kullanılabilecek veriler içerebilir. Bu kategori için bulduğum örnekler şunlardır:

Select * from stores where product_id=1 union select 1,database(),user(),4#
Select * from stores where id=1’

2) Inferential SQLi (Blind)

Inferential SQL Injection, In-band SQL Injection’dan farklı olarak, bir saldırganın istismar etmesi daha uzun sürebilir, ancak diğer SQL Injection türleri kadar tehlikelidir. Inferential SQLi saldırısında, web uygulaması aracılığıyla gerçekte hiçbir veri aktarılmaz ve saldırgan, saldırının sonucunu göremez (bu nedenle bu tür saldırılara genellikle “kör SQL Injection saldırıları” adı verilir) . Bunun yerine bir saldırgan, veri göndererek, web uygulamasının yanıtını ve veri tabanı sunucusunun sonuçta ortaya çıkan davranışını gözlemleyerek veri tabanı yapısını yeniden oluşturabilir.

a) Boolean-based Blind SQL Injections

Veri tabanına bir SQL sorgusu göndermeye dayanan ve sorgunun DOĞRU veya YANLIŞ sonucu döndürmesine bağlı olarak uygulamayı farklı bir sonuç döndürmeye zorlayan bir SQL Enjeksiyon tekniğidir.

Sonuca bağlı olarak, HTTP yanıtı içindeki içerik değişecek veya aynı kalacaktır. Bu, bir saldırganın veri tabanından hiçbir veri döndürülmemiş olsa bile kullanılan payload doğru mu yoksa yanlış mı döndürdüğünü anlamasına olanak tanır. Bir saldırganın bir veri tabanını karakter karakter numaralandırması gerekeceğinden, bu saldırı genellikle yavaştır (özellikle büyük veri tabanlarında).

www.shop.com/item.php?id=34 and 1=2

b) Time-based Blind SQL Injections

Saldırgan, veri tabanına bir SQL sorgusu göndererek veri tabanının tepki verebilmesi için (saniye cinsinden bir süre) beklemesini sağlar. Saldırgan, veri tabanının yanıt vermesi için geçen süreyi, bir sorgunun doğru mu yanlış mı olduğunu görebilir. Sonuca bağlı olarak, anında veya bir bekleme süresinden sonra bir HTTP yanıtı oluşturulacaktır. Saldırgan, veri tabanındaki verilere güvenmeden, kullandıkları mesajın doğru mu yanlış mı döndürdüğünü hesaplayabilir.

http://wwwshop.local/item.php?id=34 and if(1=1, sleep(10), false)

3) Out-of-band SQLi

Bu teknik çok yaygın değildir, çünkü çoğunlukla web uygulaması tarafından kullanılan veri tabanı sunucusunda etkinleştirilen bazı özelliklere bağlıdır. Bu saldırıda saldırgan, saldırıyı başlatmak ve sonuçları toplamak için aynı kanalı kullanamadığında oluşur.

Out-of-band teknikleri, bir saldırgana özellikle de sunucu yanıtları çok kararlı olmadığı zamanlarda, inferential time-based tekniklere bir alternatif sunar, (inferential time-based saldırıyı güvenilmez kılar).

Out-of-band SQLi teknikleri, veri tabanı sunucusunun bir saldırgana veri sağlamak için DNS veya HTTP talepleri yapma becerisine dayanır.


SQL Injection saldırılarını önleme ve azaltma

SQLI saldırılarının gerçekleşmesini önlemenin yanı sıra, bunlara karşı korunmanın birkaç etkili yolu vardır.

İlk adım, kullanıcı girdilerini kontrol edilmesi gerekmektedir. Kullanıcı herhangi bir SQL cümlesi girmesi halinde sistem tarafından bu girdinin kontrol edilmesi, değerlendirilmesi zorunlu olmalıdır.

Diğer bir çözüm ise SQL Injection veya diğer çevrimiçi tehditleri filtrelemek için yaygın olarak bir web uygulaması güvenlik duvarı (WAF) kullanılması gerekmektedir. Modern web uygulaması güvenlik duvarları da genellikle diğer güvenlik çözümleriyle entegredir.

Genel olarak toparlamak gerekirse:

  1. Dinamik SQL kullanmayın
  2. Kullanıcı tarafından sağlanan girdileri kontrol edilmesi
  3. Hassas verileri düz metin olarak bırakmayın
  4. Veritabanı izinlerini ve ayrıcalıklarını sınırlayın
  5. Veritabanı hatalarını doğrudan kullanıcıya göstermekten kaçının
  6. Veritabanlarına erişen web uygulamaları için bir Web Uygulaması Güvenlik Duvarı (WAF) kullanın
  7. Veritabanlarıyla etkileşim kuran web uygulamalarını rutin olarak test etmek için bir web uygulaması güvenlik testi çözümü kullanın
  8. Veri tabanlarını güncel tutun

Buraya kadar olan kısımda sizlere SQL Injection hakkında detaylı bir şekilde bilgi vermeye çalıştım. Daha önceden yazmış olduğum SQL Injection Cheet Sheet yazımda da bu saldırılar için kullanabileceğiniz yöntemleri bulabilirsiniz.

Bir sonraki yazımda görüşmek üzere kendinize iyi bakın 🙂

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

WordPress.com'da Blog Oluşturun.

Yukarı ↑

%d blogcu bunu beğendi: