SQL Enjeksiyon Eğitimi: Örnekle Nasıl Öğrenilir

SQL Enjeksiyonu nedir?

SQL Enjeksiyonu, dinamik SQL ifadelerini zehirleyerek ifadenin belirli bölümlerini yorumlayan veya her zaman doğru olacak bir koşulu ekleyen bir saldırıdır. Kötü niyetli SQL kodunu yürütmek amacıyla SQL ifadelerinden yararlanmak için kötü tasarlanmış web uygulamalarındaki tasarım kusurlarından yararlanır.

Veri, bilgi sistemlerinin en hayati bileşenlerinden biridir. Veritabanı destekli web uygulamaları kuruluş tarafından müşterilerden veri almak için kullanılır. SQL Yapılandırılmış Sorgu Dili'nin kısaltmasıdır. Veritabanındaki verileri almak ve değiştirmek için kullanılır.

SQL Injection

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 göre değişir. Saldırı dinamik SQL ifadeleri üzerinde çalışıyor. Dinamik bir ifade, bir web formundan veya URI sorgu dizesinden parametre parolası kullanılarak çalışma zamanında oluşturulan bir ifadedir.

SQL Enjeksiyon Örneği

Giriş formuna sahip basit bir web uygulamasını düşünelim. 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 bunları bir PHP index.php adlı dosya.
  • Oturum açma oturumunu bir çerezde saklama seçeneği vardır. Bunu remember_me onay kutusundan çıkardık. Veri göndermek için post metodunu 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.

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

İŞTE,

  • Yukarıdaki ifadede aşağıdaki değerler kullanılmaktadır: $_POST[] bunları sterilize etmeden doğrudan dizi.
  • Şifre MD5 algoritması kullanılarak şifrelenir.

Sqlfiddle kullanarak SQL enjeksiyon saldırısını göstereceğiz. URL'yi aç http://sqlfiddle.com/ web tarayıcınızda. Aşağıdaki pencereyi göreceksiniz.

Not: SQL ifadelerini yazmanız gerekecektir.

SQL Enjeksiyon İşleri

) 1 Adım 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 ('m@m.com',md5('abc'));

) 2 Adım Şema Oluştur'a tıklayın

) 3 Adım Bu kodu sağ bölmeye girin

select * from users;

) 4 Adım SQL Çalıştır'a tıklayın. Aşağıdaki sonucu göreceksiniz

SQL Enjeksiyon İşleri

Kullanıcı malzemelerini varsayalım admin@admin.sys ve 1234 şifre olarak. Veritabanına karşı yürütülecek ifade şu şekilde olacaktır:

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

Yukarıdaki kod, şifre kısmını yorumlayarak ve her zaman doğru olacak bir koşul ekleyerek kullanılabilir. Bir 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 dize alıntısını tamamlayan tek bir tırnak işaretiyle biter
  • OR 1 = 1 LIMIT 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 FiddleAşağıda gösterildiği gibi SQL Metin kutusunu çalıştırın

SQL Enjeksiyon İşleri

Hacking Etkinliği: SQL Bir Web Uygulamasını Enjekte Etme

Basit bir web uygulamamız var http://www.techpanda.org/ yalnızca gösteri 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ı temizlemek gibi temel güvenlik sağlar. Bu, yukarıdaki kodumuzun girişi atlatmak için kullanılamayacağı anlamına gelir.

Bunu aşmak için şifre alanını kullanabiliriz. Aşağıdaki şemada izlemeniz gereken adımlar gösterilmektedir

SQL Bir Web Uygulamasını Enjekte Etme

Bir 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 — ]

SQL Bir Web Uygulamasını Enjekte Etme

  • 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 = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

Aşağıdaki diyagram ifadenin oluşturulduğunu göstermektedir.

SQL Bir Web Uygulamasını Enjekte Etme

İŞTE,

  • İfade akıllıca md5 şifrelemesinin kullanıldığını varsayıyor
  • Tek alıntıyı ve kapanış parantezini 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 Enjeksiyon Saldırısı Türleri

SQL Enjeksiyonları, oturum açma algoritmalarını geçmekten daha fazla zarar verebilir. Saldırılardan bazıları şunları içeriyor:

  • 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ı oturum açma bilgilerini vb. alma
  • Çerezlere dayalı SQL enjeksiyonu
  • Hata Tabanlı SQL Enjeksiyonu
  • Kör SQL Enjeksiyonu

Yukarıdaki liste kapsamlı değildir; bu size sadece SQL Enjeksiyonunun ne olduğu hakkında bir fikir verir.

SQL Enjeksiyonu için Otomasyon Araçları

Yukarıdaki örnekte, geniş SQL bilgimize dayanarak 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:

SQL Enjeksiyon Saldırılarına Karşı Nasıl Önlenir?

Bir kuruluş SQL Injection saldırılarına karşı kendini korumak için aşağıdaki politikayı benimseyebilir.

  • Kullanıcı girişine asla güvenilmemelidir – Dinamik SQL ifadelerinde kullanılmadan önce her zaman temizlenmelidir.
  • Saklı prosedürler – bunlar SQL ifadelerini kapsülleyebilir ve tüm girdileri parametre olarak değerlendirebilir.
  • Hazırlanan beyanlar – Önce SQL ifadesini oluşturarak, ardından gönderilen tüm kullanıcı verilerini parametre olarak değerlendirerek hazırlanan ifadeleri çalışır hale getirin. Bunun SQL ifadesinin sözdizimi üzerinde hiçbir etkisi yoktur.
  • Düzenli ifadeler - bunlar, olası zararlı kodu tespit etmek ve SQL ifadelerini çalıştırmadan önce onu kaldırmak için kullanılabilir.
  • Veritabanı bağlantısı kullanıcı erişim hakları – kullanılan hesaplara yalnızca gerekli erişim hakları verilmelidir. veritabanına bağlan. Bu, SQL ifadelerinin sunucuda gerçekleştirebileceklerinin azaltılmasına yardımcı olabilir.
  • Hata mesajları - bunlar hassas bilgileri ve hatanın tam olarak nerede meydana geldiğini ifşa etmemelidir. "Üzgünüz, teknik hatalar yaşıyoruz. Teknik ekiple iletişime geçildi. Lütfen daha sonra tekrar deneyin" gibi basit özel hata mesajları, hataya neden olan SQL ifadelerini görüntülemek yerine kullanılabilir.

Hacking Etkinliği: SQL Enjeksiyonu için Havij'i 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: sizin antivirüs programı doğası gereği işaretleyebilir. Bunu istisnalar listesine eklemeli veya anti-virüs yazılımınızı duraklatmalısınız.

Aşağıdaki resim Havij'in ana penceresini göstermektedir

SQL Enjeksiyonu için Havij'i kullanın

Yukarıdaki araç bir web sitesinin/uygulamanın güvenlik açığını değerlendirmek için kullanılabilir.

ÖZET

  • SQL Enjeksiyonu, hatalı SQL ifadelerinden yararlanan bir saldırı türüdür
  • SQL enjeksiyonu, oturum açma algoritmalarını atlamak, verileri almak, eklemek ve güncellemek ve silmek için kullanılabilir.
  • SQL enjeksiyon araçları arasında SQLMap, SQLPing ve SQLSmack vb. bulunur.
  • SQL ifadesi yazarken iyi bir güvenlik politikası, SQL enjeksiyon saldırılarının azaltılmasına yardımcı olabilir.