Veri, bilgi sistemlerinin en hayati bileşenlerinden biridir. Kuruluş tarafından müşterilerden veri almak için veritabanı destekli web uygulamaları kullanılır. SQL, Yapılandırılmış Sorgu Dili'nin kısaltmasıdır. Veritabanındaki verileri almak ve işlemek için kullanılır.
SQL Enjeksiyonu nedir?
SQL Enjeksiyonu, ifadenin belirli kısımlarını yorumlamak veya her zaman doğru olacak bir koşul eklemek için dinamik SQL ifadelerini zehirleyen bir saldırıdır. Kötü tasarlanmış web uygulamalarındaki tasarım kusurlarından, kötü amaçlı SQL kodunu yürütmek için SQL ifadelerinden yararlanmak için yararlanır.
Bu eğitimde, SQL Enjeksiyon tekniklerini ve web uygulamalarını bu tür saldırılardan nasıl koruyabileceğinizi öğreneceksiniz.
- SQL Enjeksiyonu Nasıl Çalışır?
- Hacking Activity: SQL Inject a Web Application
- Diğer SQL Injection saldırı türleri
- SQL Enjeksiyonu için Otomasyon Araçları
- SQL Enjeksiyon Saldırılarına Karşı Nasıl Önlenir
- Bilgisayar Korsanlığı Etkinliği: SQL Enjeksiyonu için Havji Kullanın
SQL Enjeksiyonu Nasıl Çalışır?
SQL enjeksiyonu kullanılarak gerçekleştirilebilecek saldırı türleri, veritabanı motorunun türüne bağlı olarak değişir. Saldırı, dinamik SQL ifadeleri üzerinde çalışır . Dinamik ifade, bir web formundan veya URI sorgu dizesinden parametreler parolası kullanılarak çalışma zamanında oluşturulan bir ifadedir.
Giriş formu olan basit bir web uygulamasını düşünelim. HTML formunun kodu aşağıda gösterilmiştir.
İŞTE,
- Yukarıdaki form e-posta adresini kabul eder ve şifre daha sonra bunları index.php adlı bir PHP dosyasına gönderir.
- Oturum açma oturumunu bir çerezde saklama seçeneği vardır. Bunu Remember_me onay kutusundan çıkardık. Verileri göndermek için gönderi yöntemini kullanır. Bu, değerlerin URL'de görüntülenmediği anlamına gelir.
Kullanıcı kimliğini kontrol etmek için arka uçtaki ifadenin aşağıdaki gibi olduğunu varsayalım
SEÇİN * Kullanıcılardan E-posta = $ _POST ['e-posta'] VE şifre = md5 ($ _ POST ['şifre']);
İŞTE,
- Yukarıdaki ifade, $ _POST [] dizisinin değerlerini, onları dezenfekte etmeden doğrudan kullanır.
- Parola, MD5 algoritması kullanılarak şifrelenir.
Sqlfiddle kullanarak SQL enjeksiyon saldırısını göstereceğiz. Web tarayıcınızda http://sqlfiddle.com/ URL'sini açın. Aşağıdaki pencereyi göreceksiniz.
Not: SQL ifadelerini yazmanız gerekecek
Adım 1) Bu kodu sol bölmeye girin
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Adım 2) Şema Oluştur'u tıklayın
Adım 3) Bu kodu sağ bölmeye girin
kullanıcılardan * seçin;
Adım 4) SQL Çalıştır'a tıklayın. Aşağıdaki sonucu göreceksiniz
Kullanıcı malzemelerini varsayalım Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. ve şifre olarak 1234 . Veritabanına karşı yürütülecek ifade şöyle olacaktır:
SELECT * FROM users WHERE email = ' Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. ' VE şifre = md5 ('1234');
Yukarıdaki kod, parola kısmının yorumlanması ve her zaman doğru olacak bir koşul eklenmesiyle kullanılabilir. Bir saldırganın e-posta adresi alanına aşağıdaki girişi sağladığını varsayalım.
Bu e-posta adresi spambot'lardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. ' VEYA 1 = 1 SINIR 1 - ']
şifre için xxx.
Oluşturulan dinamik ifade aşağıdaki gibi olacaktır.
SELECT * FROM users WHERE email = ' Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. ' VEYA 1 = 1 SINIR 1 - '] VE şifre = md5 (' 1234 ');
İŞTE,
- Bu e-posta adresi spambot'lardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. dize teklifini tamamlayan tek bir alıntı ile biter
- VEYA 1 = 1 SINIR 1, her zaman doğru olacak ve döndürülen sonuçları yalnızca bir kayıtla sınırlayan bir koşuldur.
- - 'VE… şifre kısmını ortadan kaldıran bir SQL yorumudur.
Yukarıdaki SQL ifadesini kopyalayın ve aşağıda gösterildiği gibi SQL FiddleRun SQL Metin kutusuna yapıştırın
Hacking Activity: SQL Inject a Web Application
Http://www.techpanda.org/ adresinde , yalnızca gösterim amacıyla SQL Injection saldırılarına açık olan basit bir web uygulamamız var . Yukarıdaki HTML form kodu giriş sayfasından alınmıştır. Uygulama, e-posta alanını temizleme gibi temel güvenliği sağlar. Bu, yukarıdaki kodumuzun girişi atlamak için kullanılamayacağı anlamına gelir.
Bunu aşmak için şifre alanını kullanabiliriz. Aşağıdaki şema, izlemeniz gereken adımları göstermektedir
Bir saldırganın aşağıdaki girdiyi sağladığını varsayalım
- Adım 1: Girin Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. e-posta adresi olarak
- Adım 2: xxx ') girin VEYA 1 = 1 -]
- Gönder düğmesine tıklayın
- Kontrol paneline yönlendirileceksiniz
Oluşturulan SQL ifadesi aşağıdaki gibi olacaktır
SELECT * FROM users WHERE email = ' Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntülemek için JavaScript'in etkin olması gerekir. ' VE şifre = md5 ('xxx') VEYA 1 = 1 -] ');
Aşağıdaki diyagram, ifadenin oluşturulduğunu göstermektedir.
İŞTE,
- İfade akıllıca md5 şifrelemesinin kullanıldığını varsayar
- Tek alıntı ve kapanış ayracını tamamlar
- İfadeye her zaman doğru olacak bir koşul ekler
Genel olarak, başarılı bir SQL Enjeksiyon saldırısı, başarılı bir saldırı gerçekleştirmek için yukarıda gösterilenler gibi bir dizi farklı tekniği dener.
Diğer SQL Injection saldırı türleri
SQL Enjeksiyonları, yalnızca oturum açma algoritmalarını geçirmekten daha fazla zarar verebilir. Saldırılardan bazıları şunları içerir:
- Verilerin silinmesi
- Verileri güncelleme
- Veri eklemek
- Truva atları gibi kötü amaçlı programları indirip yükleyebilen sunucuda komutları yürütmek
- Kredi kartı bilgileri, e-posta ve parolalar gibi değerli verileri saldırganın uzak sunucusuna dışa aktarma
- Kullanıcı oturum açma ayrıntılarını alma vb.
Yukarıdaki liste kapsamlı değildir; size yalnızca SQL Enjeksiyonunun
SQL Enjeksiyonu için Otomasyon Araçları
Yukarıdaki örnekte, engin SQL bilgimize dayanan manuel saldırı tekniklerini kullandık. Saldırıları daha verimli ve mümkün olan en kısa sürede gerçekleştirmenize yardımcı olabilecek otomatik araçlar vardır. Bu araçlar şunları içerir:
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
SQL Enjeksiyon Saldırılarına Karşı Nasıl Önlenir
Bir kuruluş, kendisini SQL Enjeksiyon saldırılarına karşı korumak için aşağıdaki ilkeyi benimseyebilir.
- Kullanıcı girdisine asla güvenilmemelidir - Dinamik SQL ifadelerinde kullanılmadan önce her zaman temizlenmelidir.
- Depolanan prosedürler - bunlar SQL ifadelerini kapsayabilir ve tüm girdileri parametre olarak değerlendirebilir.
- Hazırlanmış ifadeler - önce SQL ifadesini oluşturarak ve ardından gönderilen tüm kullanıcı verilerini parametre olarak ele alarak çalışmak üzere hazırlanmış ifadeler. Bunun SQL deyiminin sözdizimi üzerinde hiçbir etkisi yoktur.
- Normal ifadeler - bunlar olası zararlı kodu tespit etmek ve SQL ifadelerini yürütmeden önce onu kaldırmak için kullanılabilir.
- Veritabanı bağlantısı kullanıcı erişim hakları - veritabanına bağlanmak için kullanılan hesaplara yalnızca gerekli erişim hakları verilmelidir. Bu, SQL ifadelerinin sunucuda gerçekleştirebileceklerini azaltmaya yardımcı olabilir.
- Hata mesajları - bunlar hassas bilgileri ve tam olarak nerede bir hatanın meydana geldiğini açığa çıkarmamalıdır. "Maalesef teknik hatalarla karşılaşıyoruz. Teknik ekiple iletişime geçildi. Lütfen daha sonra tekrar deneyin ”, hataya neden olan SQL ifadelerini görüntülemek yerine kullanılabilir.
Bilgisayar Korsanlığı Etkinliği: SQL Enjeksiyonu için Havij Kullanın
Bu pratik senaryoda, bir web sitesini güvenlik açıklarına karşı taramak için Havij Advanced SQL Injection programını kullanacağız.
Not: anti-virüs programınız, doğası gereği onu işaretleyebilir. Bunu dışlamalar listesine eklemeli veya anti-virüs yazılımınızı duraklatmalısınız.
Aşağıdaki resim Havij için ana pencereyi göstermektedir.
Yukarıdaki araç, bir web sitesinin / uygulamanın güvenlik açığını değerlendirmek için kullanılabilir.
Özet
- SQL Injection, kötü SQL ifadelerinden yararlanan bir saldırı türüdür
- SQL enjeksiyonu, oturum açma algoritmalarını atlamak, verileri almak, eklemek, güncellemek ve silmek için kullanılabilir.
- SQL enjeksiyon araçları arasında SQLMap, SQLPing ve SQLSmack vb. Yer alır.
- SQL deyimi yazarken iyi bir güvenlik politikası, SQL enjeksiyon saldırılarını azaltmaya yardımcı olabilir.