SQL Enjeksiyon Eğitimi: Örnekle Öğrenin
⚡ Akıllı Özet
SQL enjeksiyonu, kimlik doğrulamasını atlatmak veya verileri açığa çıkarmak için dinamik SQL ifadelerini zehirleyen ve temizlenmemiş kullanıcı girdilerinden sorgular oluşturan web uygulamalarını istismar eden bir saldırıdır. Bu sayfa, saldırının nasıl çalıştığını ve nasıl önleneceğini göstermektedir.

SQL Enjeksiyonu nedir?
SQL Enjeksiyonu, dinamik SQL ifadelerini zehirleyerek ifadenin belirli kısımlarını yorum satırı haline getiren veya her zaman doğru olacak bir koşul ekleyen bir saldırıdır. Kötü tasarlanmış web uygulamalarındaki tasarım kusurlarından yararlanarak SQL ifadelerini istismar eder ve kötü amaçlı SQL kodunu çalıştırır.
Veri, bilgi sistemlerinin en hayati bileşenlerinden biridir. Veritabanı tabanlı web uygulamaları, kuruluşlar tarafından müşterilerden veri almak için kullanılır. SQL, bunun kısaltmasıdır. Yapılandırılmış sorgu diliVeritabanındaki verileri almak ve işlemek için kullanılır.
SQL Enjeksiyon Saldırısı 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 geçirilen parametreler kullanılarak çalışma zamanında oluşturulan bir ifadedir.
SQL Enjeksiyon Örneği
Basit bir giriş formu içeren bir web uygulamasını ele alalım. HTML formunun kodu aşağıda gösterilmiştir.
<form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
İŞTE,
- Yukarıdaki form e-posta adresini ve şifreyi kabul eder ve ardından bunları bir sisteme gönderir. PHP index.php adlı dosya.
- Oturum açma işlemini çerezde saklama seçeneği mevcuttur. Bunu "beni hatırla" onay kutusundan çıkardık. Verileri göndermek için POST yöntemini kullanır. Bu, değerlerin görüntülenmediği anlamına gelir. URL.
Kullanıcı kimliğini kontrol etmek için arka uçta kullanılan ifadenin aşağıdaki gibi olduğunu varsayalım.
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
İŞTE,
- Yukarıdaki ifade, $_POST[] dizisinin değerlerini, bunları temizlemeden doğrudan kullanır.
- Parola, MD5 algoritması kullanılarak şifrelenmiştir.
SQL enjeksiyon saldırısını şu yöntemle açıklayacağız: SQL Fiddle. Aç URL http://sqlfiddle.com/ web tarayıcınızda. Aşağıdaki pencereyi göreceksiniz.
Not: SQL sorgularını kendiniz yazmanız gerekecek.
) 1 Adım Bu kodu soldaki panele 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 ('m@m.com',md5('abc'));
) 2 Adım Şema Oluştur'a tıklayın.
) 3 Adım Bu kodu sağdaki bölmeye girin.
select * from users;
) 4 Adım "SQL Çalıştır"a tıklayın. Aşağıdaki sonucu göreceksiniz.
Kullanıcının admin@admin.sys adresini ve 1234 şifresini verdiğini varsayalım. Veritabanına karşı yürütülecek sorgu şu şekilde olacaktır:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Yukarıdaki kod, parola kısmını yorum satırı haline getirip her zaman doğru olacak bir koşul ekleyerek istismar edilebilir. Saldırganın e-posta adresi alanına aşağıdaki girdiyi sağladığını varsayalım.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
Şifre için xxx.
Oluşturulan dinamik ifade aşağıdaki gibi olacaktır.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
İŞTE,
- xxx@xxx.xxx Tek bir tırnak işaretiyle sona erer ve bu da tırnak işareti dizesini tamamlar.
OR 1 = 1LIMIT 1 her zaman doğru olacak ve döndürülen sonuçları yalnızca bir kayıtla sınırlayacak bir durumdur.- — ' AND… şifre kısmını ortadan kaldıran bir SQL yorumudur.
Yukarıdaki SQL ifadesini kopyalayıp yapıştırın. SQL Fiddle Aşağıda gösterildiği gibi SQL metin kutusunu çalıştırın.
Hacking Etkinliği: SQL Bir Web Uygulamasını Enjekte Etme
Basit bir web uygulamamız var http://www.techpanda.org/ Bu, yalnızca gösterim amacıyla SQL Enjeksiyon saldırılarına karşı savunmasızdır. Yukarıdaki HTML form kodu giriş sayfasından alınmıştır. Uygulama, e-posta alanını temizleme gibi temel güvenlik önlemleri sağlar. Bu, yukarıdaki kodumuzun giriş işlemini atlatmak için kullanılamayacağı anlamına gelir.
Bunu aşmak için, bunun yerine parola alanını kullanıyoruz. Aşağıdaki şema izlenecek adımları göstermektedir.
Saldırganın aşağıdaki girdiyi sağladığını varsayalım.
- Adım 1: E-posta adresi olarak xxx@xxx.xxx girin
- Adım 2: xxx'i girin) VEYA 1 = 1 — ]
- Gönder düğmesine tıklayın.
- Gösterge paneline yönlendirileceksiniz.
Oluşturulan SQL sorgusu aşağıdaki gibi olacaktır.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Aşağıdaki diyagram, ifadenin nasıl oluşturulduğunu göstermektedir.
İŞTE,
- Bu ifade, akıllıca bir şekilde MD5 şifrelemesinin kullanıldığını varsaymaktadır.
- Tek tırnak işaretini ve kapanış parantezini tamamlar.
- İfadeye her zaman doğru olacak bir koşul ekler.
Genel olarak, başarılı bir saldırı yukarıda gösterilenler gibi çeşitli teknikleri bir araya getirir.
Diğer SQL Enjeksiyon Saldırısı Türleri
SQL enjeksiyon saldırıları, yalnızca oturum açma algoritmalarını atlatmaktan daha fazla zarar verebilir. Saldırıların bazı örnekleri şunlardır:
- Veri silme
- Verileri güncelleme
- Veri ekleme
- Truva atları gibi kötü amaçlı programları indirip yükleyebilecek sunucuda komutlar yürütmek
- Kredi kartı bilgileri, e-posta ve parolalar gibi değerli verilerin saldırganın uzak sunucusuna aktarılması
- Kullanıcı giriş bilgilerini alma, vb.
- Çerezlere dayalı SQL enjeksiyonu
- Hata Tabanlı SQL Enjeksiyonu
- Kör SQL Enjeksiyonu
Yukarıdaki liste kapsamlı değildir; sadece SQL Injection'ın neler yapabileceğine dair bir fikir vermektedir.
SQL Enjeksiyonu için Otomasyon Araçları
Yukarıdaki örnekte, SQL konusundaki geniş bilgimize dayanarak manuel saldırı teknikleri 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 da mevcuttur. Bu araçlar şunlardır:
- SQLMap – http://sqlmap.org/
- jSQL Enjeksiyonu – https://www.kali.org/tools/jsql/
SQL Enjeksiyon Saldırılarını Nasıl Önleyebilirsiniz?
Bir kuruluş SQL Injection saldırılarına karşı kendini korumak için aşağıdaki politikayı benimseyebilir.
- Kullanıcı girdilerine asla güvenilmemelidir. – Dinamik SQL ifadelerinde kullanılmadan önce her zaman temizlenmesi gerekir.
- Saklı yordamlar – Bunlar SQL ifadelerini kapsayabilir ve tüm girdileri parametre olarak ele alabilir.
- Hazırlanan ifadeler – Hazırlanmış sorgular, önce SQL sorgusunu oluşturarak, ardından gönderilen tüm kullanıcı verilerini parametre olarak ele alarak çalışır. Bu, SQL sorgusunun sözdizimini etkilemez.
- Düzenli ifadeler – Bunlar, potansiyel olarak zararlı kodları tespit etmek ve SQL sorgularını çalıştırmadan önce kaldırmak için kullanılabilir.
- Veritabanı bağlantısı kullanıcı erişim hakları – Yalnızca gerekli erişim hakları, kullanılan hesaplara verilmelidir. veritabanına bağlan. Bu, SQL ifadelerinin sunucuda gerçekleştirebileceklerinin azaltılmasına yardımcı olabilir.
- Hata mesajları – Bu mesajlar hassas bilgileri veya hatanın tam olarak nerede meydana geldiğini ifşa etmemelidir. Hata veren SQL ifadelerini göstermek yerine, "Üzgünüz, teknik hatalar yaşıyoruz. Teknik ekiple iletişime geçildi. Lütfen daha sonra tekrar deneyin" gibi basit özel hata mesajları kullanılabilir.
Hacking Etkinliği: SQL Enjeksiyonu için Havij'i kullanın
Bu uygulamalı senaryoda, bir web sitesini güvenlik açıkları açısından taramak için Havij Advanced SQL Injection programını kullanıyoruz.
Not: Havij eski ve bakımı yapılmayan bir yapıdır. Windows Yukarıdaki SQLMap aracı, mevcut açık kaynak standardıdır.
Not: Antivirüs programınız, dosyanın niteliği nedeniyle onu zararlı olarak işaretleyebilir. Dosyayı dışlama listesine eklemeli veya virüs taramanızı durdurmalısınız. antivirüs programı.
Aşağıdaki resimde Havij'in ana penceresi gösterilmektedir.
Yukarıdaki araç, bir web sitesinin veya uygulamanın güvenlik açıklarını değerlendirmek için kullanılabilir.








