Enjeksiyon açıkları (SQL, komut) ve kapatılması
Komut ve SQL enjeksiyonunun nedeni, günlükte izi ve kalıcı düzeltmesi.
Seviye 201 · 18 ders · 15 pratik lab
Dersler
Enjeksiyonun kökü
- Enjeksiyon nedir: verinin komutla karışması: Enjeksiyonun, uygulamanın kullanıcıdan gelen veriyi komut sanması olduğunu ve bunun neden tehlikeli olduğunu anlayacaksın.
- Kendi uygulamanı test etmek: araçlar ve sınırlar: Kendi uygulamanı enjeksiyona karşı test ederken hangi araçları ve hangi sınırları kullanman gerektiğini öğreneceksin.
- Tehlikeli çağrılar: kodda enjeksiyonun girdiği noktalar
- Kısa görev: lab kodunda girdinin sorguya ya da komuta karıştığı yerleri işaretle
SQL enjeksiyonu
- SQL enjeksiyonunun anatomisi: SQL enjeksiyonunun sorgu metninin birleştirilmesinden nasıl doğduğunu ve veritabanında neye yol açabileceğini anlayacaksın.
- Burp Repeater ile SQL hatasını tanımak
- Parametreli sorgularla düzeltmek: Parametreli sorguların veriyi komuttan ayırarak SQL enjeksiyonunu nasıl kökten çözdüğünü kendi kodunda uygulayacaksın.
- Veritabanı hesabını en az yetkiye indirmek: Veritabanı hesabının yetkilerini yalnızca gerekenle sınırlamanın, bir açık olsa bile zararı nasıl küçülttüğünü göreceksin.
- sqlmap ile kendi uygulamanda düzeltmeyi doğrulamak: Düzelttiğin bir sorgunun artık enjeksiyona açık olmadığını sqlmap ile kendi test ortamında, ölçülü ayarlarla doğrulayabileceksin.
- Kısa görev: arama sayfasındaki SQL enjeksiyonunu kapat ve sqlmap ile doğrula
Komut ve NoSQL enjeksiyonu
- Komut enjeksiyonunun anatomisi: Komut enjeksiyonunun uygulama kodunda hangi hatadan doğduğunu ve kodda bu hatayı nasıl tanıyacağını öğreneceksin.
- Komut enjeksiyonunu kapatmak: Komut enjeksiyonunu, kabuğa hiç başvurmayan güvenli yöntemlerle ve sıkı girdi kontrolüyle kalıcı olarak kapatmayı öğreneceksin.
- NoSQL enjeksiyonu: MongoDB sorgularında operatör girdisini engellemek: Kullanıcı girdisinin MongoDB sorgusunda operatöre dönüşmesini fark edebilecek, tür denetimi ve şema doğrulamasıyla bunu kapatabileceksin.
- Girdi doğrulama ve kaçış: Girdi doğrulama ve kaçışın ne zaman işe yaradığını, tek başına neden yetmediğini ve doğru yerde nasıl kullanılacağını öğreneceksin.
- Kısa görev: komut ve NoSQL enjeksiyonunu kapat, ikisini de yeniden test et
Tespit ve yeniden test
- Günlüklerde ve uyarılarda enjeksiyon izleri: Uygulama ve sunucu günlüklerinde enjeksiyon denemelerinin izlerini tanıyıp bunlar için bir uyarı kuralı düşünebileceksin.
- Enjeksiyonun geri gelmesini önleyen testler yazmak
- Bitirme görevi: bir uygulamadaki enjeksiyonları bul ve kapat: Bitirme görevinde kurgusal bir şirketin küçük uygulamasındaki enjeksiyon hatalarını bulup kalıcı düzeltmelerini raporlayacaksın.
Pratik lablar
- Arama sayfasında dize birleştirme: Arama sayfasının kodunda girdinin sorguya birleştirildiği satırı bul ve parametreli sorguyla düzelt.
- Repeater'da SQL hatasını tanı: Sipariş filtresine gönderilen özel karakterlerin SQL hatası ürettiğini Repeater'da göster ve hatanın kullanıcıya dönmesini engelle.
- Uygulama hesabı her tabloya yazabiliyor: Uygulamanın veritabanı hesabının gereğinden fazla yetkisini listele, salt okunur raporlama için ayrı bir hesap tanımla ve yetkileri daralt.
- Düzeltmeyi sqlmap ile doğrula: Düzelttiğin bir uç noktayı sqlmap ile sınırlı ayarlarla yeniden test et ve önce-sonra çıktısını kanıt olarak kaydet.
- Sıralama parametresinde enjeksiyon: Parametrelenemeyen bir sıralama alanındaki enjeksiyonu kanıtla ve sütun adlarını izin listesiyle sınırlayarak kapat.
- Dosya dönüştürücüde komut enjeksiyonu: Dosya adını kabuk komutuna geçiren dönüştürücüdeki açığı kanıtla ve çağrıyı kabuksuz argüman listesine çevir.
- DNS sorgulama aracında kör komut enjeksiyonu: Çıktı göstermeyen bir DNS sorgulama aracında komut enjeksiyonunu zamanlama farkıyla doğrula, kodu düzelt ve yeniden test et.
- Girdi doğrulama mı kaçış mı: Yedekleme sayfasındaki komut çağrısı için hem doğrulama hem kaçış seçeneğini dene ve hangisinin neden yeterli olduğunu testle göster.
- Komut enjeksiyonu için regresyon testi: Kapattığın komut enjeksiyonu için kötü girdileri deneyen birim testleri yaz ve açığı geri getiren bir değişikliğin testte yakalandığını göster.
- Giriş formunda MongoDB operatörü: JSON giriş isteğine operatör nesnesi gönderilince doğrulamanın atlandığını kanıtla ve alanları dize türüne zorla.
- Arama filtresinde $regex ile veri sızıntısı: Arama filtresinin kullanıcıdan gelen operatörleri kabul ettiğini göster, operatör anahtarlarını reddeden şema doğrulaması ekle.
- NoSQL ve SQL enjeksiyonunu aynı serviste kapat: İki veritabanı kullanan bir serviste her iki enjeksiyonu bul, ikisini de kapat ve tek bir test setiyle yeniden doğrula.
- Erişim günlüğünde enjeksiyon denemeleri: URL kodlamalı bir erişim günlüğünde enjeksiyon denemelerini çözerek bul ve hangi parametrelerin hedeflendiğini listele.
- Veritabanı hata günlüğünden saldırgan isteği: Veritabanı hata günlüğündeki sözdizimi hatalarını web günlüğüyle eşleştir ve hataları üreten isteği ve istemciyi bul.
- Enjeksiyon için uyarı kuralı ve yanlış pozitifler: Enjeksiyon denemelerini yakalayan bir günlük kuralı yaz, meşru aramalardaki yanlış pozitifleri ayıkla ve kuralı tekrar oynatılan trafikle test et.
Kurs hakkında
Komut ve SQL enjeksiyonunun nedeni, günlükte izi ve kalıcı düzeltmesi.
Ne öğreneceksin
- Enjeksiyonun kökü
- SQL enjeksiyonu
- Komut ve NoSQL enjeksiyonu
- Tespit ve yeniden test
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde ve ona bağlı özel bir lab ağında geçer. Kurulum gerekmez.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.