diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index 142ea308c..53394f4a2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -1,76 +1,76 @@ -# AWS - Relational Database (RDS) Enum +# AWS - रिलेशनल डेटाबेस (RDS) एन्‍यूमरेशन {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## बुनियादी जानकारी -AWS द्वारा प्रदान किया गया **Relational Database Service (RDS)** एक **क्लाउड में रिलेशनल डेटाबेस** के तैनाती, संचालन और स्केलिंग को सरल बनाने के लिए डिज़ाइन किया गया है। यह सेवा लागत दक्षता और स्केलेबिलिटी के लाभ प्रदान करती है जबकि हार्डवेयर प्रावधान, डेटाबेस कॉन्फ़िगरेशन, पैचिंग और बैकअप जैसे श्रम-गहन कार्यों को स्वचालित करती है। +AWS द्वारा पेश की गई **Relational Database Service (RDS)** क्लाउड में एक **रिलेशनल डेटाबेस** की तैनाती, संचालन और स्केलेबिलिटी को सरल बनाने के लिए डिज़ाइन की गई है। यह सेवा लागत कुशलता और स्केलेबिलिटी के फायदे प्रदान करती है और हार्डवेयर provisioning, डेटाबेस कॉन्फ़िगरेशन, पैचिंग और बैकअप जैसे श्रम-गहन कार्यों को स्वचालित करती है। -AWS RDS विभिन्न व्यापक रूप से उपयोग किए जाने वाले रिलेशनल डेटाबेस इंजनों का समर्थन करता है, जिसमें MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server, और Amazon Aurora शामिल हैं, जो MySQL और PostgreSQL दोनों के लिए संगतता प्रदान करते हैं। +AWS RDS लोकप्रिय रिलेशनल डेटाबेस इंजन जैसे MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server, और Amazon Aurora (MySQL और PostgreSQL दोनों के साथ संगतता के साथ) का समर्थन करता है। RDS की प्रमुख विशेषताएँ शामिल हैं: -- **डेटाबेस इंस्टेंस का प्रबंधन** सरल है। -- पढ़ने के प्रदर्शन को बढ़ाने के लिए **रीड रेप्लिका** का निर्माण। -- उच्च उपलब्धता और फेलओवर तंत्र सुनिश्चित करने के लिए **मल्टी-एवेलबिलिटी ज़ोन (AZ) तैनाती** का कॉन्फ़िगरेशन। -- अन्य AWS सेवाओं के साथ **एकीकरण**, जैसे: -- मजबूत पहुँच नियंत्रण के लिए AWS पहचान और पहुँच प्रबंधन (**IAM**)। -- व्यापक निगरानी और मैट्रिक्स के लिए AWS **CloudWatch**। -- विश्राम में एन्क्रिप्शन सुनिश्चित करने के लिए AWS की प्रबंधन सेवा (**KMS**)। +- **डेटाबेस इंस्टेंस का प्रबंधन** सरल किया गया है। +- पढ़ने के प्रदर्शन को बेहतर करने के लिए **read replicas** का निर्माण। +- उच्च उपलब्धता और failover तंत्र सुनिश्चित करने के लिए **multi-Availability Zone (AZ) deployments** की कॉन्फ़िगरेशन। +- अन्य AWS सेवाओं के साथ **इंटीग्रेशन**, जैसे: + - AWS Identity and Access Management (**IAM**) मजबूत एक्सेस कंट्रोल के लिए। + - AWS **CloudWatch** व्यापक मॉनिटरिंग और मेट्रिक्स के लिए। + - AWS Key Management Service (**KMS**) रहन-सहन पर एन्क्रिप्शन सुनिश्चित करने के लिए। -## Credentials +## क्रेडेंशियल्स -DB क्लस्टर बनाते समय मास्टर **यूज़रनेम** को कॉन्फ़िगर किया जा सकता है (**`admin`** डिफ़ॉल्ट रूप से)। इस उपयोगकर्ता का पासवर्ड उत्पन्न करने के लिए आप: +DB क्लस्टर बनाते समय master **username** को कॉन्फ़िगर किया जा सकता है (डिफ़ॉल्ट रूप से **`admin`**)। इस उपयोगकर्ता का पासवर्ड उत्पन्न करने के लिए आप: -- **स्वयं एक पासवर्ड** निर्दिष्ट करें -- RDS को **स्वतः उत्पन्न** करने के लिए कहें -- RDS को **AWS Secret Manager** में KMS कुंजी के साथ एन्क्रिप्टेड रूप में प्रबंधित करने के लिए कहें +- खुद एक **password** निर्दिष्ट कर सकते हैं +- RDS से इसे **auto generate** करने के लिए कह सकते हैं +- RDS से इसे **AWS Secret Manager** में KMS की के साथ एन्क्रिप्टेड रूप में प्रबंधित करवाने के लिए कह सकते हैं
-### Authentication +### प्रमाणीकरण -प्रमाणीकरण विकल्पों के 3 प्रकार हैं, लेकिन **मास्टर पासवर्ड का उपयोग हमेशा अनुमति है**: +तीन प्रकार के प्रमाणीकरण विकल्प हैं, लेकिन **master password का उपयोग हमेशा अनुमति है**:
-### Public Access & VPC +### सार्वजनिक एक्सेस & VPC -डिफ़ॉल्ट रूप से **कोई सार्वजनिक पहुँच** डेटाबेस को नहीं दी जाती है, हालाँकि इसे **दी जा सकती है**। इसलिए, डिफ़ॉल्ट रूप से केवल उसी VPC से मशीनें इसे एक्सेस कर सकेंगी यदि चयनित **सुरक्षा समूह** (जो EC2 SG में संग्रहीत हैं) इसे अनुमति देता है। +डिफ़ॉल्ट रूप से डेटाबेस को **कोई सार्वजनिक एक्सेस नहीं दिया जाता**, हालांकि इसे **अनुमति दी जा सकती है**। इसलिए, डिफ़ॉल्ट रूप से केवल उसी VPC की मशीनें ही यदि चुना गया **security group** (जो EC2 SG में स्टोर होते हैं) इसकी अनुमति देती है तो इसे एक्सेस कर पाएंगी। -DB इंस्टेंस को उजागर करने के बजाय, एक **RDS Proxy** बनाना संभव है जो DB क्लस्टर की **स्केलेबिलिटी** और **उपलब्धता** को **सुधारता** है। +एक DB instance को एक्सपोज़ करने के बजाय, आप एक **RDS Proxy** बना सकते हैं जो DB क्लस्टर की **scalability** और **availability** को बेहतर बनाता है। -इसके अलावा, **डेटाबेस पोर्ट को भी संशोधित किया जा सकता है**। +इसके अलावा, **database port को भी संशोधित** किया जा सकता है। -### Encryption +### एन्क्रिप्शन -**एन्क्रिप्शन डिफ़ॉल्ट रूप से सक्षम है** एक AWS प्रबंधित कुंजी का उपयोग करते हुए (इसके बजाय एक CMK चुना जा सकता है)। +**Encryption डिफ़ॉल्ट रूप से सक्षम** होता है और AWS managed key का उपयोग करता है (इसके बजाय CMK चुना जा सकता है)। -आपकी एन्क्रिप्शन को सक्षम करने से, आप **आपके स्टोरेज, स्नैपशॉट, रीड रेप्लिका और आपके बैकअप के लिए एन्क्रिप्शन को सक्षम कर रहे हैं**। इस एन्क्रिप्शन का प्रबंधन करने के लिए कुंजी **KMS** का उपयोग करके जारी की जा सकती हैं।\ -आपके डेटाबेस के निर्माण के बाद इस स्तर की एन्क्रिप्शन को जोड़ना संभव नहीं है। **यह इसके निर्माण के दौरान किया जाना चाहिए**। +Encryption सक्षम करने पर आप अपने स्टोरेज, स्नैपशॉट, read replicas और बैक-अप्स के लिए **encryption at rest** सक्षम कर रहे होते हैं। इस एन्क्रिप्शन को प्रबंधित करने के लिए कीज़ **KMS** के माध्यम से जारी की जा सकती हैं.\ +यह स्तर का एन्क्रिप्शन डेटाबेस बन जाने के बाद जोड़ा नहीं जा सकता। **यह डेटाबेस के निर्माण के समय ही किया जाना चाहिए**। -हालांकि, एक **वर्कअराउंड है जो आपको एक अनएन्क्रिप्टेड डेटाबेस को एन्क्रिप्ट करने की अनुमति देता है**। आप अपने अनएन्क्रिप्टेड डेटाबेस का एक स्नैपशॉट बना सकते हैं, उस स्नैपशॉट की एक एन्क्रिप्टेड कॉपी बना सकते हैं, उस एन्क्रिप्टेड स्नैपशॉट का उपयोग करके एक नया डेटाबेस बना सकते हैं, और फिर, अंततः, आपका डेटाबेस एन्क्रिप्टेड हो जाएगा। +हालाँकि, एक **workaround जिससे आप एक अनएन्क्रिप्टेड डेटाबेस को एन्क्रिप्ट कर सकते हैं** उपलब्ध है। आप अपने अनएन्क्रिप्टेड डेटाबेस का एक स्नैपशॉट बना सकते हैं, उस स्नैपशॉट की एक एन्क्रिप्टेड कॉपी बना सकते हैं, उस एन्क्रिप्टेड स्नैपशॉट का उपयोग करके नया डेटाबेस बना सकते हैं, और अंततः आपका नया डेटाबेस एन्क्रिप्टेड होगा। #### Transparent Data Encryption (TDE) -RDS में एप्लिकेशन स्तर पर अंतर्निहित एन्क्रिप्शन क्षमताओं के साथ-साथ, RDS **डेटा को सुरक्षित रखने के लिए अतिरिक्त प्लेटफ़ॉर्म-स्तरीय एन्क्रिप्शन तंत्रों** का समर्थन करता है। इसमें Oracle और SQL Server के लिए **Transparent Data Encryption (TDE)** शामिल है। हालाँकि, यह महत्वपूर्ण है कि ध्यान दें कि जबकि TDE डेटा को सुरक्षित रखने के लिए एन्क्रिप्ट करता है, यह **डेटाबेस प्रदर्शन को प्रभावित कर सकता है**। यह प्रदर्शन प्रभाव विशेष रूप से MySQL क्रिप्टोग्राफिक फ़ंक्शंस या Microsoft Transact-SQL क्रिप्टोग्राफिक फ़ंक्शंस के साथ उपयोग करने पर ध्यान देने योग्य है। +RDS में एप्लिकेशन स्तर पर उपलब्ध एन्क्रिप्शन क्षमताओं के साथ-साथ RDS प्लेटफ़ॉर्म-स्तरीय अतिरिक्त एन्क्रिप्शन तंत्र भी समर्थन करता है ताकि data at rest सुरक्षित रहे। इसमें Oracle और SQL Server के लिए **Transparent Data Encryption (TDE)** शामिल है। हालांकि, यह ध्यान रखना महत्वपूर्ण है कि जबकि TDE data at rest को एन्क्रिप्ट करके सुरक्षा बढ़ाता है, यह **डेटाबेस प्रदर्शन को प्रभावित** भी कर सकता है। यह प्रदर्शन प्रभाव विशेष रूप से तब दिखाई देता है जब इसे MySQL क्रिप्टोग्राफिक फ़ंक्शंस या Microsoft Transact-SQL क्रिप्टोग्राफिक फ़ंक्शंस के साथ उपयोग किया जाए। TDE का उपयोग करने के लिए कुछ प्रारंभिक कदम आवश्यक हैं: -1. **विकल्प समूह संघ**: -- डेटाबेस को एक विकल्प समूह के साथ संघबद्ध होना चाहिए। विकल्प समूह सेटिंग्स और सुविधाओं के लिए कंटेनर के रूप में कार्य करते हैं, डेटाबेस प्रबंधन को सरल बनाते हैं, जिसमें सुरक्षा सुधार शामिल हैं। -- हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि विकल्प समूह केवल विशिष्ट डेटाबेस इंजनों और संस्करणों के लिए उपलब्ध हैं। -2. **विकल्प समूह में TDE का समावेश**: -- एक विकल्प समूह के साथ संघबद्ध होने के बाद, Oracle Transparent Data Encryption विकल्प को उस समूह में शामिल करने की आवश्यकता है। -- यह पहचानना आवश्यक है कि एक बार जब TDE विकल्प को एक विकल्प समूह में जोड़ा जाता है, तो यह एक स्थायी विशेषता बन जाती है और इसे हटाया नहीं जा सकता। -3. **TDE एन्क्रिप्शन मोड**: +1. **Option Group Association**: +- डेटाबेस को एक option group के साथ संबद्ध होना चाहिए। Option groups सेटिंग्स और फीचर्स के कंटेनर के रूप में कार्य करते हैं, जो डेटाबेस प्रबंधन और सुरक्षा सुधारों को सुविधाजनक बनाते हैं। +- हालांकि, ध्यान रहे कि option groups केवल कुछ विशिष्ट डेटाबेस इंजन और वर्ज़न के लिए उपलब्ध होते हैं। +2. **Inclusion of TDE in Option Group**: +- एक बार option group से जुड़ जाने पर, Oracle Transparent Data Encryption विकल्प को उस ग्रुप में शामिल करना होगा। +- यह समझना आवश्यक है कि एक बार TDE विकल्प option group में जोड़ दिया गया, तो वह स्थायी हो जाता है और इसे हटाया नहीं जा सकता। +3. **TDE Encryption Modes**: - TDE दो अलग-अलग एन्क्रिप्शन मोड प्रदान करता है: -- **TDE टेबलस्पेस एन्क्रिप्शन**: यह मोड पूरे तालिकाओं को एन्क्रिप्ट करता है, डेटा सुरक्षा के व्यापक दायरे को प्रदान करता है। -- **TDE कॉलम एन्क्रिप्शन**: यह मोड डेटाबेस के भीतर विशिष्ट, व्यक्तिगत तत्वों को एन्क्रिप्ट करने पर केंद्रित है, जिससे यह नियंत्रित करना संभव होता है कि कौन सा डेटा एन्क्रिप्ट किया गया है। + - **TDE Tablespace Encryption**: यह मोड पूरे tablespace को एन्क्रिप्ट करता है, जिससे व्यापक स्तर पर डेटा सुरक्षा मिलती है। + - **TDE Column Encryption**: यह मोड डेटाबेस के विशिष्ट कॉलम्स या तत्वों को एन्क्रिप्ट करने पर केंद्रित है, जिससे आप यह नियंत्रित कर सकते हैं कि कौन सा डेटा एन्क्रिप्ट होगा। -इन पूर्वापेक्षाओं और TDE के संचालन की जटिलताओं को समझना RDS के भीतर एन्क्रिप्शन को प्रभावी ढंग से लागू करने और प्रबंधित करने के लिए महत्वपूर्ण है, डेटा सुरक्षा और आवश्यक मानकों के अनुपालन को सुनिश्चित करते हुए। +इन पूर्वापेक्षाओं और TDE के संचालन संबंधी जटिलताओं को समझना RDS के भीतर एन्क्रिप्शन को प्रभावी ढंग से लागू और प्रबंधित करने के लिए महत्वपूर्ण है, जिससे डेटा सुरक्षा और आवश्यक मानकों का पालन सुनिश्चित होता है। -### Enumeration +### एन्यूमरेशन ```bash # Clusters info ## Get Endpoints, username, port, iam auth enabled, attached roles, SG @@ -80,6 +80,10 @@ aws rds describe-db-cluster-backtracks --db-cluster-identifier ## Cluster snapshots aws rds describe-db-cluster-snapshots +aws rds describe-db-cluster-snapshots --include-public --snapshot-type public + +## Restore cluster snapshot as new instance +aws rds restore-db-instance-from-db-snapshot --db-cluster-identifier --snapshot-identifier # Get DB instances info aws rds describe-db-instances #username, url, port, vpc, SG, is public? @@ -91,6 +95,7 @@ aws rds describe-db-instance-automated-backups ## Find snapshots aws rds describe-db-snapshots aws rds describe-db-snapshots --include-public --snapshot-type public + ## Restore snapshot as new instance aws rds restore-db-instance-from-db-snapshot --db-instance-identifier --db-snapshot-identifier --availability-zone us-west-2a @@ -105,33 +110,33 @@ aws rds describe-db-proxy-targets ## reset credentials of MasterUsername aws rds modify-db-instance --db-instance-identifier --master-user-password --apply-immediately ``` -### अनधिकृत पहुँच +### Unauthenticated Access {{#ref}} ../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md {{#endref}} -### प्रिवेस्क +### Privesc {{#ref}} ../aws-privilege-escalation/aws-rds-privesc/README.md {{#endref}} -### पोस्ट एक्सप्लोइटेशन +### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-rds-post-exploitation/README.md {{#endref}} -### स्थिरता +### Persistence {{#ref}} ../aws-persistence/aws-rds-persistence/README.md {{#endref}} -### SQL इंजेक्शन +### SQL Injection -DynamoDB डेटा तक पहुँचने के लिए **SQL सिंटैक्स** के साथ तरीके हैं, इसलिए, सामान्य **SQL इंजेक्शन भी संभव हैं**। +DynamoDB डेटा को **SQL syntax** के साथ एक्सेस करने के तरीके मौजूद हैं — इसलिए सामान्य **SQL injections** भी संभव हैं। {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md index 6062ba585..966e1c596 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum/README.md @@ -12,11 +12,11 @@ ## सार्वजनिक पोर्ट -इंटरनेट से **डेटाबेस को सार्वजनिक एक्सेस** देना संभव है। अटैकर को डेटाबेस में प्रवेश करने के लिए फिर भी **यूज़रनेम और पासवर्ड जानना,** IAM access, या किसी **exploit** की आवश्यकता होगी। +इंटरनेट से **डेटाबेस** को सार्वजनिक रूप से एक्सेस देना संभव है। फिर भी attacker को डेटाबेस में प्रवेश करने के लिए **username and password जानना**, IAM access, या कोई **exploit** चाहिए होगा। ## सार्वजनिक RDS Snapshots -AWS किसी को भी **RDS snapshots डाउनलोड करने की पहुँच** दे सकता है। आप अपने अकाउंट से इन सार्वजनिक RDS snapshots को बहुत आसानी से सूचीबद्ध कर सकते हैं: +AWS किसी को भी **RDS snapshots डाउनलोड करने की access** देने की अनुमति देता है। आप अपने खाते से इन सार्वजनिक RDS snapshots को बहुत आसानी से सूचीबद्ध कर सकते हैं: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public @@ -32,6 +32,19 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2] ## Even if in the console appear as there are public snapshot it might be public ## snapshots from other accounts used by the current account ``` +## सार्वजनिक RDS क्लस्टर स्नैपशॉट्स + +इसी तरह, आप क्लस्टर स्नैपशॉट्स की तलाश कर सकते हैं। +```bash +# Public RDS cluster snapshots +aws rds describe-db-cluster-snapshots --include-public + +## Search by account ID +aws rds describe-db-cluster-snapshots --include-public --query 'DBClusterSnapshots[?contains(DBClusterSnapshotIdentifier, `284546856933:`) == `true`]' + +# From the own account you can check if there is any public cluster snapshot with: +aws rds describe-db-cluster-snapshots --snapshot-type public [--region us-west-2] +``` ### सार्वजनिक URL टेम्पलेट ``` mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306