AWS - DynamoDB Enum
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
DynamoDB
Temel Bilgiler
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ının belirtilmesini 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 bulunmaktadır.
Şifreleme
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.
Yedeklemeler & S3’e Dışa Aktarma
Tablo yedeklemelerinin oluşturulmasını planlamak veya bunları 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ışlıkla 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.
GUI
Local Dynamo hizmetleri için bir GUI bulunmaktadır, dynalite, localstack vb. gibi, bu da faydalı olabilir: https://github.com/aaronshaf/dynamodb-admin
Enumeration
# 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
Kimlik Doğrulama Olmadan Erişim
AWS - DynamoDB Unauthenticated Access
Yetki Yükseltme
İstismar Sonrası
AWS - DynamoDB Post Exploitation
Süreklilik
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 verileri almak için farklı koşullar kullanılabilir, eğer bir NoSQL Enjeksiyonu’nda verileri almak için daha fazla koşulu birleştirmek 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.
Note
Aslında, Query işlemleri, çalışması 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.
# 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
[!DİKKAT] Bu güvenlik açığı, artık kullanımdan kaldırılmış olan dynamodb Scan Filter’a dayanmaktadır!
DynamoDB, DB içindeki verileri arama için Json nesnelerini kabul eder. Eğer 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, aşağıdaki gibi bir isteğe enjeksiyon yaparak:
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'
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 dizesi ile tüm verileri arayın, bu da hepsidir.
Başka bir gü vulnerable örnek bir giriş kullanarak olabilir:
scan_filter = """{
"username": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
},
"password": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
}
}
""" % (user_data['username'], user_data['password'])
dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter))
Bu, şuna karşı savunmasız olacaktır:
username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
:property Injection
Bazı SDK’lar, gerçekleştirilecek filtrelemeyi belirten bir dize kullanmaya izin verir:
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
DynamoDB’de filtre ifadelerinde bir niteliğin değerini değiştirmek için öğeleri tararken, token’ların : karakteri ile başlaması gerektiğini bilmelisiniz. Bu token’lar, çalışma zamanında gerçek nitelik değeri ile değiştirilecektir.
Bu nedenle, önceki gibi bir giriş, şöyle bir şeyle atlatılabilir:
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

