İçeriğe atla

SQL enjeksiyonu

Vikipedi, özgür ansiklopedi
13.12, 21 Nisan 2017 tarihinde Ayşegül Kahya (mesaj | katkılar) tarafından oluşturulmuş 18463413 numaralı sürüm (translation from https://en.wikipedia.org/wiki/SQL_injection)

SQL Injection, veri tabanına dayalı uygulamalara saldırmak için kullanılan bir atak tekniğidir; burada,saldırgan SQL dili özelliklerinden faydalanarak standart uygulama ekranındaki ilgili alana yeni SQL ifadelerini ekler.(Örneğin saldırgan,veritabanı içeriğini kendisine aktarabilir).<ref>Microsoft"SQL Injection"</ref> [1] SQL Injection, uygulamaların yazılımları içindeki bir güvenlik açığından faydalanır,örneğin, uygulamanın kulanıcı giriş bilgileri beklediği kısma SQL ifadeleri gömülür, eğer gelen verinin içeriği uygulama içerisinde filtrelenmiyorsa ve ya hatalı şekilde filtreleniyorsa, uygulamanın içine gömülmüş olan kodla beraber hiçbir hata vermeden çalıştığı görülür.SQL Injection, çoğunlukla web siteleri için kullanılan bir saldırı türü olarak bilinse de SQL veritabanına dayalı tüm uygulamalarda gerçeklenebilir.

SQL enjeksiyon saldırıları, saldırganların, sistemdeki kullanıcılardan birinin bilgileriyle giriş yapmasına,  mevcut verilere müdahale etmesine, bazı işlemleri iptal etmesine veya değiştirmesine, veri tabanındaki tüm verileri ifşa etmesine, veri tabanındaki tüm verileri yok etmesine, veri tabanı sunucusunda sistem yöneticisi olmasına olanak sağlar.

2012'de yapılan bir araştırmada,bir web uygulamasının ayda ortalama 4 saldırı  aldığı ve perakendecilerin diğer endüstrilerden iki kat fazla saldırı aldığı görülüyor. [2]

Tarih

SQL Injection, 1998 yılı civarında tartışılmaya başlanmıştır.[3] Örneğin, 1998'de Phrak dergisinde yayımlanan bir makalede SQL Injection'dan söz edilmiştir.  [4]

Form

Açık Web Uygulaması Güvenlik Projesi kapsamında SQL Injection'ın,2007-2010 yılları arasında Web uygulamalarında en fazla görülen 10 güvenlik açığından biri olduğu belirtilmiştir.[5] 2013'te ise yine AWUGP kapsamında, SQLI'ın web uygulamalarına en fazla yapılan saldırı olduğu kabul edildilmiştir.[6] SQL Injection'ın dört ana alt sınıfı vardır:

Teknik Uygulamaları

Saldırgan, uygulama üzerinde kullanıcı giriş ifadesine SQL ifadeleri ekleyerek güvenlik açığı arar. Bunu gerçekleştirebilmek için SQL ifadelerini ve sözdizimini yeteri kadar bilmek gerekir. Aşağıdaki kod satırı, bu güvenlik açığını göstermektedir:

sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi + " ';"

Yukarıdaki SQL sorgusunda kullaniciAdi alanına kullanıcı girdisi gelecektir, bu girdiye göre veritabanında arama yapılacak ve sonuç olumlu ise yazılımcının belirlediği işlemler gerçekleşecektir. Bu işlemler muhtemelen arayüzünde kullanıcıAdi verisi girişi için bir alana sahip ve bu veriye göre sisteme dahil edilme işlemini ayarlayan uygulama yazılımıdır. Arka planda girilen veriye göre veritabanında karşılaştırma yapacak ve veri veritabanında bulunuyor ise sisteme giriş sağlanacak, bulunmuyor ise sağlanmayacaktır. Günümüzde uygulamalar güvenliğin daha üst düzey olması için kullanıcı adı verisinin yanında parola da istemektedirler. Burada SQL Injection atağının etkili olabileceği bir açık varsa aşağıdaki şekilde:

' or '1'='1

SQL verisini giriş verisi olarak gönderir isek uygulama tabanında çalışacak sorgu:

sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi ' or '1' = '1 + " ';"

şeklinde olur. kullaniciAdi verisi ne olursa olsun '1'='1' koşulu sağlanacağından ve aradaki işlemin OR olmasından dolayı sorgu sonucu her zaman olumlu olacaktır ya da SQL sözdiziminin yorum satırı haline getirme karakterlerini kullanarak:

' or '1'='1' -- 
' or '1'='1' ({ 
' or '1'='1' /* 

olumlu sonuç elde edilir. Bu karakterlerden sonra gelen tüm karakterler yorum niteliği kazanacaktır ve bir önemi kalmayacaktır.

Dış bağlantılar

Kaynakça