NoSQL İNJECTİON
No SQL injection nedir?
NoSQL İNJECTİON
Photo by Rubaitul Azad on Unsplash
No SQL injection nedir?
NoSQL Injection, uygulamanın kullanıcı girdisini doğrudan NoSQL veritabanı sorgularına (ör. MongoDB, CouchDB, Redis vb.) yerleştirmesi sonucunda ortaya çıkan bir zafiyettir. SQL injection’a benzer şekilde saldırgan, gönderdiği verinin yapısını veya türünü değiştirerek sorgunun mantığını manipüle edebilir. Bu durum; yetkisiz veri erişimi, kimlik doğrulama atlatma, veri manipülasyonu veya bilgi sızıntısına yol açabilir. NoSQL mimarileri JSON benzeri veri ve operatörler kullandığından, tip ve şema kontrolleri zayıf olduğunda risk artar.
NoSQL Injection — Nasıl Tespit Edilir?
Aşağıdaki tespit yöntemleri, hem manuel inceleme hem de otomatik gözlem için kullanılabilir. (Not: Gerçek sistemlerde test yapmadan önce daima yetki alın.)
1. Uygulama Davranışını İzleme
- Beklenmeyen sonuçlar: Basit bir filtreleme veya aramada tüm kayıtların dönmesi, yetki gerektiren verilerin erişilebilir olması veya beklenmeyen kayıt sayılarındaki artış, potansiyel bir işaret olabilir.
- Hata mesajları: Uygulama tarafından döndürülen hata metinlerinde veritabanı yapısına dair ipuçları (ör. sorgu nesnesi veya hata yığını) yer alıyorsa, bu zayıf doğrulama/filtreleme olduğuna işaret edebilir.
2. Sunucu ve Veritabanı Logları
- Anormal sorgu yapıları: Loglarda kullanıcıdan gelen ham JSON nesnelerinin doğrudan veritabanı sorgusu olarak işlendiğine dair örüntüler aranmalı. Özellikle beklenmeyen veri tipleri veya sorgu operatörleri (örneğin uygulama bağlamında alışılmadık anahtarlar) görülürse şüphe uyandırır.
- İstek/yanıt örüntüleri: Belirli uç noktalar için normalden farklı istek içerikleri, yükselen hata oranları veya ani sorgu sayısı artışları tespit edilmeli.
3. Girdi ve Tip Denetimi Analizi
- Şema kontrolü eksikliği: Sunucu tarafında JSON şema doğrulaması yoksa ya da tip zorlaması yapılmıyorsa risk yüksektir. Girdi beklenen türde olmadığında nasıl işlendiği incelenmeli.
- Allowlist/denylist kurulumu: Uç noktalardan gelen operatör veya alan isimleri allowlist ile sınırlandırılmıyorsa inceleme gerektirir.
4. Test Ortamında Güvenli Keşif (Yetkili)
- Doğrulayıcı testler: Yetkili bir test ortamında, uygulamanın beklenen davranışını bozmadan “anomaliler” üreten test istekleri ile nasıl yanıt verdiği gözlemlenebilir. (Test sırasında kesinlikle canlı veriyi riske atmayın.)
- Mock veritabanı/Logging: Testlerde mock veritabanı ve ayrıntılı logging kullanarak kullanıcı girdisinin veritabanı sorgusuna nasıl dönüştüğü izlenir.
5. Otomatik Araçlar ve İzleme
- WAF/IDS uyarıları: Web Application Firewall (WAF) veya Intrusion Detection System (IDS) kuralları, alışılmadık JSON anahtarları veya operatör kullanımına göre tetiklenebilir. Ancak false-positive’leri azaltmak için kurallar iyi ayarlanmalı.
- Anomali tespiti: İstek sıklığı, veri transferi hacmi veya hata oranı gibi metriklerde anomali tespiti yapan sistemler ek koruma sağlar.
6. Loglama ve Kanıt Toplama
- Detaylı loglama: Şüpheli isteklerin ham gövdeleri, başlıkları ve zaman damgaları güvenli şekilde saklanmalı (kişisel veriyi gereksiz yere kaydetmeden). Bu kayıtlar, tespitin doğrulanması ve sonrasında yapılacak inceleme için hayati önem taşır.
Zafiyet Arama Alanları (Nerede Kullanmalı?)
NoSQL enjeksiyonu için kullanıcıdan gelen verinin doğrudan bir veritabanı sorgusuna dahil edildiği tüm HTTP ve uygulama girdilerini hedef almalısınız.
AlanNeden Kritik?Örnek KullanımGiriş FormlarıKullanıcı adı ve şifre alanları, genellikle find() veya where() gibi sorgularda direkt kullanılır.POST /api/login isteğindeki username ve password parametreleri.Arama KutularıBir ürün adı veya kullanıcı arama sorgusu, doğrudan veritabanı search veya query işlevine gönderilir.GET /api/search?query=... URL parametresi.Kullanıcı Profili GüncellemeKullanıcının ad, adres veya ayarlar gibi bilgileri değiştirdiği formlar.PUT /api/user/profile isteğindeki JSON gövdesindeki parametreler.URL ParametreleriÖzellikle uygulamanın kayıt veya ID aradığı alanlar.GET /api/items/123 yerine GET /api/items/... kısmına enjeksiyon yükünü göndermek.HTTP BaşlıklarıNadir olsa da, uygulama bazen Cookie veya Custom Header (Örn: X-API-KEY) değerlerini arka uçta sorgu olarak kullanabilir.Bir çerez değerini değiştirerek deneme yapmak.
Tetikleme Parametrelerinin Mantığı (Hangi Parametreleri Kullanmalı?)
NoSQLi’yi tetiklemek için, uygulamaya basit bir dize (string) yerine, veritabanının sorgu operatörleri olarak yorumlayacağı karmaşık bir JSON veya Dizi (Array) yapısı göndermeye çalışmalısınız.
Normalde beklenen: "username": "user123"
Tetikleme için Mantıksal Yapı: Amacınız, uygulamaya bir dize yerine bir NoSQL Operatörü (Örn: MongoDB’de $ne, $gt, $where) içeren bir veri yapısı göndermektir. Bu, uygulamanın sorgu yapısını değiştirmeye çalışır.
Parametre TürüMantık ve AmaçÖrnek Deneme Yükü (Konsept)Mantiksal OperatörlerSorgunun her zaman doğru (TRUE) dönmesini sağlamak.
usernamealanına bir JSON Objesi göndermek:{"$ne": null}(Username'in null olmama koşulunu kontrol et)Kör Enjeksiyon OperatörleriUygulama hata vermediğinde, yanıt süresini ölçerek zafiyeti doğrulamak.passwordalanına bir kod parçası eklemek:{"$where": "sleep(5000)"}(Eğer bu kod çalışırsa yanıt 5 saniye gecikir)Dizi Tabanlı OperatörlerMongoDB gibi bazı veritabanları dizileri desteklediği için, JSON dizileri göndermeyi deneyin.queryparametresine:{"$in": ["admin", "guest"]}
Nasıl Tetiklenir (Genel Yaklaşım):
- Veri Türü Değiştirme: Normalde sadece bir dize bekleyen (Örn: kullanıcı adı) parametreye, bir JSON objesi
{...}veya JSON dizisi[...]göndermeyi deneyin. - Operatör Kullanımı: Bu JSON objesi içine, veritabanının tanıdığı operatörleri (
$ne,$gt,$lt,$wherevb.) yerleştirin. - Tırnak İşareti Dengesi: Eğer uygulama arka planda girdiyi otomatik tırnak içine alıyorsa, sorguyu bozmak için çift tırnakların dengesini bozmayı veya dizeler içinde operatörler göndermeyi deneyin.
Kilit Nokta: Başarı, uygulamanın kullanıcının gönderdiği bu karmaşık yapıyı (JSON objesi veya operatör içeren dizeyi) bir sorgu operatörü olarak yorumlayıp yorumlamamasına bağlıdır. Bu yorumlama hatası NoSQL Enjeksiyonuna yol açar.
ek olarak youtube kanalımdan videosunu izliyerek detaylı ctf çözümüyle pekiştirebilrisin işte youtube kanalımın >>> linki < < < <
메타데이터
- post_id
- 22e6671e8351
- slug
- nosql-i̇njecti̇on-22e6671e8351
- url
- https://medium.com/@bovsec/nosql-i%CC%87njecti%CC%87on-22e6671e8351
- canonical_url
- https://medium.com/@bovsec/nosql-i%CC%87njecti%CC%87on-22e6671e8351
- author_url
- https://medium.com/@bovsec
- status
- ok
- fetched_at
- 2026-06-11 05:11:55