SQL Enjeksiyon Güvenlik Açıklarını Test Etme

SQL Injection saldırıları, dinamik içerik oluşturmak için bir veritabanı arka ucuna bağlı web uygulamalarında büyük riskler doğurur. Bu tür saldırılarda, bilgisayar korsanları bir web uygulamasını, kendi SQL komutlarını veri tabanı tarafından verilenlere enjekte etme girişiminde kullanırlar. Örnek olarak, Veritabanlarındaki SQL Enjeksiyon Saldırıları makalesine bakın. Bu makalede, SQL Injection saldırılarına karşı hassas olup olmadıklarını belirlemek için web uygulamalarınızı test edebileceğiniz çeşitli yollara göz atacağız.

Otomatik SQL Enjeksiyon Taraması

Bir olasılık, HP'nin WebInspect, IBM'in AppScan veya Cenzic'in Hailstorm'u gibi bir otomatik web uygulaması güvenlik açığı tarayıcı kullanıyor. Bu araçların tümü, potansiyel SQL Injection güvenlik açıkları için web uygulamalarınızı analiz etmenin kolay ve otomatik yollarını sunar. Ancak, oldukça pahalı, koltuk başına 25.000 dolara kadar çıkıyorlar.

Manuel SQL Enjeksiyon Testleri

Kötü bir uygulama geliştiricisi ne yapmalı? Web uygulamalarınızı bir web tarayıcısından başka bir şey kullanmadan değerlendirmek için SQL Injection güvenlik açıklarını değerlendirmek üzere bazı temel testleri kullanabilirsiniz. İlk olarak, bir uyarı kelimesi: Tanımladığım testler sadece temel SQL Injection kusurlarını araştırıyor. İleri teknikler tespit etmeyecek ve kullanımı biraz sıkıcı. Ödeyebileceğinizden, otomatik bir tarayıcı ile gidin. Ancak, bu fiyat etiketini kaldıramıyorsanız, manuel testler büyük bir ilk adımdır.

Bir uygulamanın savunmasız olup olmadığını değerlendirmenin en kolay yolu, eğer başarılı olursa veritabanınıza zarar vermeyecek, ancak bir sorunu düzeltmeniz gerektiğine dair size kanıt sunacak olan zararsız enjeksiyon saldırılarını denemektir. Örneğin, bir veritabanında bir kişiye bakan ve sonuç olarak iletişim bilgileri sağlayan basit bir web uygulaması olduğunu varsayın. Bu sayfa aşağıdaki URL biçimini kullanabilir:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Bu sayfanın, aşağıdakine benzer bir sorgu kullanarak bir veritabanı araması gerçekleştirdiğini varsayabiliriz:

SELECT phone FROM directory WHERE lastname = 'chapple' ve firstname = 'mike'

Bununla biraz deneyelim. Yukarıdaki varsayımımızla, SQL enjeksiyon saldırılarını test eden URL’ye basit bir değişiklik yapabiliriz:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Web uygulaması SQL enjeksiyonuna karşı düzgün bir şekilde korunmamışsa, bu sahte adın veritabanına karşı yürüttüğü SQL deyimine takılmasıyla sonuçlanır:

SELECT telefon FROM dizini WHERE lastname = 'chapple' ve firstname = 'mike' VE (select'i (*) 'dan sahte olarak seçin)> 0 VEYA' 1 '=' 1 '

Yukarıdaki sözdiziminin orijinal URL’den biraz farklı olduğunu fark edeceksiniz. Örneği takip etmeyi kolaylaştırmak için URL kodlu değişkeni ASCII eşdeğerleri için dönüştürme özgürlüğünü aldım. Örneğin,% 3d '=' karakteri için URL kodlamasıdır. Benzer amaçlar için bazı satır sonları ekledim.

Sonuçları Değerlendirme

Test, web sayfasını yukarıda listelenen URL’yi yüklemeye çalıştığınızda gelir. Web uygulaması iyi bir davranış sergiliyorsa, sorguyu veritabanına aktarmadan önce tek tırnakları girdiden çıkaracaktır. Bu sadece bir grup SQL içeren bir adla birileri için garip bir arama sonucunu doğuracak! Aşağıdakine benzer bir uygulamadan bir hata mesajı göreceksiniz:

Hata: Hiçbir kullanıcı, mike + AND + adıyla bulunamadı (+ sayım + (+) + sahte) öğesini seçin +% 3e0 + VEYA +% 1 3d1 Chapple!

Öte yandan, uygulama SQL enjeksiyonuna karşı savunmasız ise, ifadeyi doğrudan veritabanına aktarır ve bu da iki olasılıktan biriyle sonuçlanır. İlk olarak, sunucunuzda ayrıntılı hata mesajları varsa (bunu yapmamalısınız!), Şunun gibi bir şey görürsünüz:

ODBC Sürücüleri için Microsoft OLE DB Sağlayıcısı hatası '80040e37' [Microsoft] [ODBC SQL Server Sürücüsü] [SQL Server] Geçersiz nesne adı 'sahte'. /directory.asp, satır 13

Öte yandan, web sunucunuz ayrıntılı hata mesajları göstermiyorsa, daha genel bir hata alırsınız:

Dahili Sunucu Hatası Sunucu bir iç hata veya yanlış yapılandırma ile karşılaştı ve isteğinizi tamamlayamadı. Hatanın oluştuğu ve hataya neden olabilecek herhangi bir şey hakkında bilgi almak için lütfen sunucu yöneticisine başvurun. Bu hata hakkında daha fazla bilgi sunucu hata günlüğünde bulunabilir.

Yukarıdaki iki hatadan birini alırsanız, uygulamanız SQL enjeksiyon saldırısına karşı savunmasızdır! SQL Injection saldırılarına karşı uygulamalarınızı korumak için atabileceğiniz bazı adımlar şunlardır: