AWS - DynamoDB Enum

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

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

DynamoDB

मौलिक जानकारी

अमेज़न DynamoDB को AWS द्वारा एक पूरी तरह से प्रबंधित, सर्वरलेस, कुंजी-मूल्य NoSQL डेटाबेस के रूप में प्रस्तुत किया गया है, जो अपने आकार के बिना उच्च प्रदर्शन वाले एप्लिकेशनों को सशक्त करने के लिए विशेष रूप से तैयार किया गया है। सेवा मजबूत सुरक्षा उपाय, अविरल बैकअप, कई क्षेत्रों में स्वचालित प्रतिक्रिया, एकीकृत इन-मेमोरी कैशिंग, और सुविधाजनक डेटा निर्यात उपकरण सहित मजबूत सुविधाएँ सुनिश्चित करती है।

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

एन्क्रिप्शन

डिफ़ॉल्ट रूप से, DynamoDB एक KMS कुंजी का उपयोग करता है जो अमेज़न DynamoDB का है, आपके खाते के लिए कम से कम अमेज़न द्वारा प्रबंधित कुंजी नहीं।

बैकअप और S3 में निर्यात

तालिका बैकअप की उत्पत्ति को अनुसूचित किया जा सकता है या उन्हें आवश्यकता के अनुसार बनाया जा सकता है। इसके अतिरिक्त, तालिका के लिए समय-समय पर वस्तुरूपण (PITR) सक्षम करना भी संभव है। समय-समय पर वस्तुरूपण आपके DynamoDB डेटा की 35 दिनों के लिए निरंतर बैकअप प्रदान करता है ताकि आप दुर्घटनात्मक लेखन या हटाने के कार्रवाई के खिलाफ सुरक्षित रहें।

तालिका के डेटा को S3 में निर्यात करना भी संभव है, लेकिन तालिका में PITR सक्षम होना चाहिए।

GUI

https://github.com/aaronshaf/dynamodb-admin का उपयोग करके DynamoDB Local, dynalite, localstack जैसी स्थानीय Dynamo सेवाओं के लिए एक GUI है, जो उपयोगी हो सकता है।

गणना

# 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

अनधिकृत पहुंच

Privesc

पोस्ट एक्सप्लोइटेशन

स्थिरता

DynamoDB इन्जेक्शन

SQL इन्जेक्शन

डाइनामोडीबी डेटा तक पहुंचने के तरीके हैं SQL सिंटैक्स के साथ, इसलिए, सामान्य SQL इन्जेक्शन भी संभव हैं।

NoSQL इन्जेक्शन

डाइनामोडीबी में विभिन्न शर्तें उपयोग की जा सकती हैं डेटा प्राप्त करने के लिए, जैसे कि एक सामान्य NoSQL इन्जेक्शन में यदि डेटा प्राप्त करने के लिए अधिक शर्तों को चेन करना संभव है तो आप छिपा हुआ डेटा प्राप्त कर सकते हैं (या पूरी तालिका को डंप कर सकते हैं)। आप यहाँ डाइनामोडीबी द्वारा समर्थित शर्त पा सकते हैं: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

ध्यान दें कि यदि डेटा query या scan के माध्यम से एक्सेस किया जा रहा है तो विभिन्न शर्तें समर्थित हैं।

वास्तव में, Query क्रियाएँ प्राथमिक कुंजी में शर्त "EQ" (बराबर) निर्दिष्ट करने की आवश्यकता होती है, जिससे यह काम करता है, जिससे यह NoSQL इन्जेक्शन के लिए कम प्रवृत्त होता है (और संचालन को भी बहुत सीमित बनाता है)।

यदि आप तुलना को बदल सकते हैं जो की किया जा रहा है या नए जोड़ सकते हैं, तो आप अधिक डेटा प्राप्त कर सकते हैं।

# 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

Raw Json इन्जेक्शन

DynamoDB Json ऑब्ज

'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

एक हमलावर कुछ इस प्रकार से इंजेक्ट कर सकता है:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

"EQ" स्थिति को ठीक करें और ID 1000 की खोज करें और फिर सभी डेटा की खोज करें जिसमें एक आईडी स्ट्रिंग 0 से अधिक है।

:property इंजेक्शन

कुछ SDKs एक स्ट्रिंग का उपयोग करने की अनुमति देते हैं जो कि किया जाने वाला फ़िल्टरिंग का संकेत करती है:

new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)

आपको यह जानना चाहिए कि DynamoDB में खोज करने के लिए एक विशेषता की मान को फ़िल्टर अभिव्यक्तियों में अनुकरण करने के लिए, टोकन को : वर्ण के साथ आरंभ करना चाहिए। ऐसे टोकन को वास्तविक समय पर विशेषता मान के साथ प्रतिस्थापित किया जाएगा।

इसलिए, पिछले जैसे किसी लॉगिन को कुछ इस प्रकार से उलटा सकता है:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

Last updated