it-swarm-tr.com

Giriş alanları olan bir sitede SQL enjeksiyon güvenlik açıklarını nasıl test edebilirim?

SQL enjeksiyon güvenlik açıklarını test etmek için hangi yöntemler mevcuttur?

48
John S

Bir uygulamayı SQL Injection gibi güvenlik açıklarına karşı test etmenin birkaç yolu vardır. Testler üç farklı metodolojiye ayrılır:

Kör Enjeksiyon:

MySQL örneği:

http://localhost/test.php?id=sleep(30)

Bu SQL ifadesi veritabanı tarafından yorumlanırsa sayfanın yüklenmesi 30 saniye sürer.

Hata Mesajları:

http://localhost/test.php?id='"

Hata bildirimi etkinse ve bu istek sql enjeksiyonuna açıksa, aşağıdaki hata üretilecektir:

SQL sözdiziminizde bir hata var; 5. satırda '"' yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın

Tautoloji Tabanlı Enjeksiyon :

http://localhost/test.php?username=' or 1=1 /*&password=1

Bu durumda Tautology veya her zaman doğru olan bir ifade verilmesi tahmin edilebilir bir sonuç sağlar. Bu durumda öngörülebilir sonuç, genellikle yönetici olan veritabanındaki ilk kullanıcıyla saldırganda oturum açmak olacaktır.

Bir web uygulamasında SQL Enjeksiyonunu tespit etmek için yukarıdaki yöntemlerin kullanımını otomatikleştiren araçlar vardır. Bunu yapan Wapiti ve Skipfish gibi ücretsiz ve açık kaynak araçlar vardır. Sitewatch bu açık kaynaklı araçlardan çok daha iyi ücretsiz bir hizmet sunar. Bunu söyleyebilirim çünkü Sitewatch için geliştiriciyim.

52
rook

Sitenizi SQL enjeksiyonu için test etmemek en iyisidir. Sadece potansiyel SQL enjeksiyonundan kaçınmak en iyisidir. Kullanıcı girişi olduğunda asla dize işleme yaparak SQL sorguları oluşturmayın. Tüm sorgularda bağlı parametreler kullanın (ayrıca herhangi bir zararlı şekilde kullanılabiliyorsa ve sorgulara mantıklı sınırlar koyarsa tüm kullanıcı verilerini dezenfekte edin). Bu, sql_execute("select user from user_db where id="+input_id) sorgusunun güvensiz olduğu anlamına gelir (input_id = "1 OR 1==1 --", Ancak stored_procedure = "select user from user_db where id = ? LIMIT 1;", sql_execute_with_param(stored_procedure, input_id); öğesinin güvenli olup olmadığını hayal edin.

Açıkçası, bu sadece kendi sitenizi güvenli hale getirmeye çalışıyorsanız. Başka uygulamalardaki kusurları bulmaya çalışıyorsanız, başka bir hikaye ve potansiyel olarak bu sitenin siyah şapkalar için olmadığını belirten FAQ 'a karşı). SQL enjeksiyon .

13
dr jimbob

Sıfırdan başlıyorsanız aşağıdakilerden birini öneririm:

  1. Ne yaptığını bilen birini işe al
  2. Bir otomatik durdurma aracını ilk durdurma boşluğu olarak kullanın. Bazı seçenekler Burp Pro, ZAP ve SQL Map'i içerir.

Bununla birlikte, bir web uygulamasına garip ve potansiyel olarak tehlikeli girdiler gönderdiğinizde, uygulamanızın bütünlüğüne zarar verme konusunda önemli bir şansınız olduğunu unutmayın.

Web uygulamanızı doğrudan kesebilir veya daha sonra bir şekilde çekilip ayrıştırılan ve belki de uygulamanız tarafından olmasa da uygulamanın veritabanında garip girdiler depolayabilirsiniz.

Bu tür testlerin genel kuralı basittir: iyi bilinen bir yedeklemeden geri yükleninceye kadar testi bitirmediniz. Otomatik enjeksiyon testinden sonra, uygulamanıza kadar uygulamanızı normal çalışma koşullarında dikkate almamalısınız.

5
Daniel Miessler