Görev ve Zafiyet Senaryosu
Sistem kasası sorgusunda id parametresi doğrudan SQL ifadesine eklenmektedir. Hatalar try/catch ile gizlenmediği için CAST((SELECT secret FROM ...) AS INTEGER) hatası ekrana dönmektedir.
Hedef (Objective)
🎯 Görev: id parametresine tip uyuşmazlığı hatası üretecek bir SQL ifadesi ekleyerek kilitli sistem kasasındaki gizli bayrağı hata mesajı içinde okuyun.
Adım Adım Çözüm Metodolojisi
Ayrıntılı Hata Mesajlarını Tetikleme
id parametresine tek tırnak veya geçersiz ifade göndererek SQLite hata yanıtı alıp almadığınızı görün.
Hata Üreten Fonksiyon Enjeksiyonu
Metin veriyi sayıya çevirmeye zorlayan CAST() sorgusunu alt sorgu (subquery) ile birleştirin.
Veriyi Hata Mesajından Okuma
Veritabanı hatasında beliren secret_name veya flag bilgisini alarak görevi tamamlayın.
Örnek Payload ve İstismar Kalıpları
1 AND CAST((SELECT secret_name FROM system_secrets LIMIT 1) AS INT)1' OR 1=CAST((SELECT sqlite_version()) AS INT)--1 UNION SELECT 1, CAST(tbl_name AS INT) FROM sqlite_master--
Güvenli Kodlama ve Savunma Mekanizmaları
Zafiyet Nasıl Kapatılır?
- Canlı (production) ortamlarda ayrıntılı veritabanı hata mesajlarının (verbose errors) kullanıcıya gösterilmesini engelleyin.
- Tüm dinamik veritabanı sorgularında Parametreli Sorgular (Prepared Statements) kullanın.
- Web uygulama güvenlik duvarı (WAF) kuralları ile veritabanı hata kalıplarını maskeleyin.
Uygulamaya Başlamaya Hazır mısınız?
SiberAdam interaktif arenasında hedef tarayıcı, DevTools ve CyberTerminal ile bayrağı hemen yakalayın.
Şimdi Çözmeye Başla ⚡