AWS - DynamoDB Enum

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

DynamoDB

Temel Bilgiler

Amazon DynamoDB, AWS tarafından sunulan, boyutlarına bakılmaksızın yüksek performanslı uygulamaları desteklemek için özelleştirilmiş, tamamen yönetilen, sunucusuz, anahtar-değer NoSQL veritabanı olarak sunulur. Hizmet, kesintisiz yedeklemeler, otomatik olarak birden çok bölgeye yayılan replikasyon, bellek içi önbellekleme ve kullanışlı veri dışa aktarma araçları gibi güçlü özellikleri sağlar.

DynamoDB bağlamında, geleneksel bir veritabanı yerine tablo oluşturulur. Her tablo, tablonun birincil anahtarının ayrılmaz bir bileşeni olarak bir bölüm anahtarının belirtilmesini gerektirir. Bu bölüm anahtarı, temelde bir hash değeri olan, hem öğelerin alınması hem de verinin çeşitli ana bilgisayarlara dağıtılması açısından kritik bir rol oynar. Bu dağıtım, veritabanının ölçeklenebilirliğini ve kullanılabilirliğini sağlamak için önemlidir. Ayrıca, veri düzenini daha da geliştirmek için bir sıralama anahtarı dahil etme seçeneği vardır.

Şifreleme

Varsayılan olarak, DynamoDB, en azından hesabınıza ait olan AWS yönetilen anahtara ait olmayan, Amazon DynamoDB'ye ait bir KMS anahtarını kullanır.

Yedeklemeler ve S3'e Aktarma

Tablo yedeklemelerinin zamanlanması veya talep üzerine oluşturulması mümkündür. Ayrıca, bir tablo için Zamana Göre Kurtarma (PITR) özelliğini etkinleştirmek de mümkündür. Zamana göre kurtarma, yanlışlıkla yazma veya silme işlemlerine karşı korunmanıza yardımcı olmak için DynamoDB verilerinizin 35 gün boyunca sürekli olarak yedeklenmesini sağlar.

Ayrıca, bir tablonun verilerini S3'e aktarmak da mümkündür, ancak tablonun PITR özelliğine sahip olması gerekmektedir.

GUI

DynamoDB Local, dynalite, localstack gibi yerel Dynamo hizmetleri için bir GUI mevcuttur ve bu https://github.com/aaronshaf/dynamodb-admin adresinden erişilebilir.

Enumerasyon

# Tables
aws dynamodb list-tables
aws dynamodb describe-table --table-name <t_name> #Get metadata info
## The primary key and sort key will appear inside the KeySchema field

#Check if point in time recovery is enabled
aws dynamodb describe-continuous-backups \
--table-name tablename

# Backups
aws dynamodb list-backups
aws dynamodb describe-backup --backup-arn <arn>
aws dynamodb describe-continuous-backups --table-name <t_name>

# Global tables
aws dynamodb list-global-tables
aws dynamodb describe-global-table --global-table-name <name>

# Exports
aws dynamodb list-exports
aws dynamodb describe-export --export-arn <arn>

# Misc
aws dynamodb describe-endpoints #Dynamodb endpoints

DynamoDB Enümerasyonu

Kimlik Doğrulama Gerektirmeyen Erişim

AWS - DynamoDB Unauthenticated Access

İzin Yükseltme

AWS - DynamoDB Privesc

Saldırı Sonrası

AWS - DynamoDB Post Exploitation

Kalıcılık

AWS - DynamoDB Persistence

DynamoDB Enjeksiyonu

SQL Enjeksiyonu

DynamoDB verilerine SQL sözdizimi ile erişmenin yolları vardır, bu nedenle tipik SQL enjeksiyonları da mümkündür.

NoSQL Enjeksiyonu

DynamoDB'de farklı koşullar kullanılarak veri alınabilir, bu nedenle yaygın bir NoSQL Enjeksiyonunda olduğu gibi daha fazla koşul ekleyerek veri alabilirsiniz (veya tüm tabloyu dökümleyebilirsiniz). DynamoDB tarafından desteklenen koşulları burada bulabilirsiniz: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Not olarak, veri sorgu veya tarama yoluyla erişiliyorsa, farklı koşullar desteklenir.

Aslında, Sorgu işlemleri, işlemin çok sınırlı olmasını sağlamak için anahtar olarak "EQ" (eşit) koşulunu belirtmek zorundadır, bu da NoSQL enjeksiyonlarına karşı daha az duyarlı hale getirir.

Eğer karşılaştırma yapılanı değiştirebilir veya yeni karşılaştırmalar ekleyebilirseniz, daha fazla veri alabilirsiniz.

# Comparators to dump the database
"NE": "a123" #Get everything that doesn't equal "a123"
"NOT_CONTAINS": "a123" #What you think
"GT": " " #All strings are greater than a space

Ham Json enjeksiyonu

DynamoDB, DB içindeki verileri aramak için Json nesnelerini kabul eder. Eğer gönderilen json nesnesine yazabileceğinizi bulursanız, DB'nin tüm içeriğini sızdırabilirsiniz.

Örneğin, aşağıdaki gibi bir isteğe enjeksiyon yaparak:

'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

Bir saldırgan şöyle bir şey enjekte edebilir:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

"EQ" koşulunu düzeltin ve 1000 ID'sini arayın ve ardından 0'dan büyük bir Id dizesi olan tüm verileri arayın, yani hepsi.

:property Enjeksiyonu

Bazı SDK'lar, yapılacak filtrelemeyi belirten bir dize kullanmaya izin verir:

new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)

DynamoDB'de öğeleri tarama sırasında bir özniteliğin değerini filtre ifadelerinde değiştirmek için arama yaparken, belirteçlerin : karakteri ile başlaması gerektiğini bilmelisiniz. Bu tür belirteçler, çalışma zamanında gerçek öznitelik değeriyle değiştirilecektir.

Bu nedenle, önceki gibi bir giriş, aşağıdaki gibi atlatılabilir:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Last updated