AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon DynamoDB, AWS tarafından tamamen yönetilen, sunucusuz, anahtar-değer NoSQL veritabanı olarak sunulmaktadır ve boyutlarından bağımsız olarak yüksek performanslı uygulamaları desteklemek için tasarlanmıştır. Hizmet, yerleşik güvenlik önlemleri, kesintisiz yedeklemeler, birden fazla bölgede otomatik çoğaltma, entegre bellek içi önbellekleme ve kullanışlı veri dışa aktarma araçları gibi sağlam özellikler sunar.
DynamoDB bağlamında, geleneksel bir veritabanı kurmak yerine, tablolar oluşturulur. Her tablo, tablonun birincil anahtarının ayrılmaz bir bileşeni olarak bir bölüm anahtarı belirtmeyi zorunlu kılar. Bu bölüm anahtarı, esasen bir hash değeri olup, hem öğelerin alınmasında hem de verilerin çeşitli sunucular arasında dağıtımında kritik bir rol oynar. Bu dağıtım, veritabanının ölçeklenebilirliğini ve kullanılabilirliğini korumak için hayati öneme sahiptir. Ayrıca, veri organizasyonunu daha da geliştirmek için bir sıralama anahtarı ekleme seçeneği de vardır.
Varsayılan olarak, DynamoDB, Amazon DynamoDB'ye ait bir KMS anahtarı kullanır, bu anahtar, en azından hesabınıza ait olan AWS yönetilen anahtar bile değildir.
Tablo yedeklemelerinin oluşturulmasını planlamak veya talep üzerine oluşturmak mümkündür. Ayrıca, bir tablo için Zamanda Nokta Kurtarma (PITR) özelliğini etkinleştirmek de mümkündür. Zamanda nokta kurtarma, yanlış yazma veya silme işlemlerine karşı koruma sağlamak için DynamoDB verilerinizi 35 gün boyunca sürekli yedekler.
Ayrıca, bir tablonun verilerini S3'e dışa aktarmak da mümkündür, ancak tablonun PITR etkinleştirilmiş olması gerekir.
DynamoDB Local, dynalite, localstack gibi yerel Dynamo hizmetleri için yararlı olabilecek bir GUI vardır: https://github.com/aaronshaf/dynamodb-admin
DynamoDB verilerine SQL sözdizimi ile erişmenin yolları vardır, bu nedenle tipik SQL enjeksiyonları da mümkündür.
DynamoDB'de verileri almak için farklı koşullar kullanılabilir, eğer verileri almak için birden fazla koşulu zincirleme mümkünse, gizli verilere (veya tüm tabloyu dökme) ulaşabilirsiniz. DynamoDB tarafından desteklenen koşulları burada bulabilirsiniz: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Verilere query
veya scan
aracılığıyla erişiliyorsa farklı koşulların desteklendiğini unutmayın.
Aslında, Query işlemleri çalışmak için birincil anahtarda "EQ" (eşittir) koşulunu belirtmelidir, bu da onu NoSQL enjeksiyonlarına karşı daha az duyarlı hale getirir (ve ayrıca işlemi çok sınırlı hale getirir).
Eğer karşılaştırmayı değiştirebilir veya yenilerini ekleyebilirseniz, daha fazla veri alabilirsiniz.
Bu zafiyet, artık kullanımdan kaldırılan dynamodb Tarama Filtre'sine dayanmaktadır!
DynamoDB, DB içindeki verileri arama için Json nesnelerini kabul eder. Arama için gönderilen json nesnesinde yazma yeteneğiniz olduğunu bulursanız, DB'yi dökebilir, tüm içeriklerini alabilirsiniz.
Örneğin, bir isteğe enjeksiyon yaparak:
bir saldırgan şunları enjekte edebilir:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
ID 1000 için "EQ" koşulunu düzeltin ve ardından 0'dan büyük bir Id dizesine sahip tüm verileri arayın, bu da hepsidir.
Başka bir güvenlik açığı olan örnek bir giriş kullanarak şunlar olabilir:
Bu, şuna karşı savunmasız olacaktır:
Bazı SDK'lar, gerçekleştirilecek filtrelemeyi belirten bir dize kullanmaya izin verir:
DynamoDB'de filtre ifadeleri içinde bir özelliğin değerini değiştirmek için öğeleri tararken, token'ların :
karakteri ile başlaması gerektiğini bilmelisiniz. Bu tür token'lar, çalışma zamanında gerçek özellik değeri ile değiştirilir.
Bu nedenle, önceki gibi bir giriş, şu şekilde atlatılabilir:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)