# Az - SQL {{#include ../../../banners/hacktricks-training.md}} ## Azure SQL Azure SQL एक प्रबंधित, सुरक्षित और बुद्धिमान उत्पादों का परिवार है जो **Azure क्लाउड में SQL Server डेटाबेस इंजन** का उपयोग करता है। इसका मतलब है कि आपको अपने सर्वरों के भौतिक प्रशासन की चिंता करने की आवश्यकता नहीं है, और आप अपने डेटा के प्रबंधन पर ध्यान केंद्रित कर सकते हैं। Azure SQL में चार मुख्य पेशकशें शामिल हैं: 1. **Azure SQL Server**: SQL Server डेटाबेस के **तैनाती और प्रबंधन** के लिए एक सर्वर की आवश्यकता होती है। 2. **Azure SQL Database**: यह एक **पूर्ण-प्रबंधित डेटाबेस सेवा** है, जो आपको Azure क्लाउड में व्यक्तिगत डेटाबेस होस्ट करने की अनुमति देती है। 3. **Azure SQL Managed Instance**: यह बड़े पैमाने पर, पूरे SQL Server इंस्टेंस-स्कोप्ड तैनातियों के लिए है। 4. **Azure SQL Server on Azure VMs**: यह उन आर्किटेक्चर के लिए सबसे अच्छा है जहां आप **ऑपरेटिंग सिस्टम** और SQL Server इंस्टेंस पर **नियंत्रण** चाहते हैं। ### SQL Server सुरक्षा विशेषताएँ **नेटवर्क एक्सेस:** - सार्वजनिक एंडपॉइंट (विशिष्ट नेटवर्कों तक पहुंच को सीमित कर सकता है)। - निजी एंडपॉइंट। - डोमेन नामों के आधार पर कनेक्शनों को प्रतिबंधित करना भी संभव है। - Azure सेवाओं को इसे एक्सेस करने की अनुमति देना भी संभव है (जैसे पोर्टल में क्वेरी संपादक का उपयोग करने के लिए या Azure VM को कनेक्ट करने की अनुमति देना)। **प्रमाणीकरण विधियाँ:** - Microsoft **Entra-only** प्रमाणीकरण: आपको उन Entra प्रिंसिपल को इंगित करने की आवश्यकता है जिनके पास सेवा तक पहुंच होगी। - **SQL और Microsoft Entra** दोनों प्रमाणीकरण: उपयोगकर्ता नाम और पासवर्ड के साथ पारंपरिक SQL प्रमाणीकरण Microsoft Entra के साथ। - **केवल SQL** प्रमाणीकरण: केवल डेटाबेस उपयोगकर्ताओं के माध्यम से पहुंच की अनुमति दें। ध्यान दें कि यदि कोई SQL प्रमाणीकरण अनुमति दी जाती है, तो एक व्यवस्थापक उपयोगकर्ता (उपयोगकर्ता नाम + पासवर्ड) को इंगित करने की आवश्यकता होती है और यदि Entra ID प्रमाणीकरण चुना जाता है, तो कम से कम एक प्रिंसिपल को व्यवस्थापक पहुंच के साथ इंगित करना भी आवश्यक है। **एन्क्रिप्शन:** - इसे "पारदर्शी डेटा एन्क्रिप्शन" कहा जाता है और यह डेटाबेस, बैकअप और लॉग को स्थिरता पर एन्क्रिप्ट करता है। - हमेशा की तरह, डिफ़ॉल्ट रूप से Azure प्रबंधित कुंजी का उपयोग किया जाता है लेकिन ग्राहक प्रबंधित एन्क्रिप्शन कुंजी (CMEK) का भी उपयोग किया जा सकता है। **प्रबंधित पहचान:** - सिस्टम और उपयोगकर्ता प्रबंधित MIs को असाइन करना संभव है। - एन्क्रिप्शन कुंजी (यदि CMEK का उपयोग किया जाता है) और डेटाबेस से अन्य सेवाओं तक पहुंच के लिए उपयोग किया जाता है। - यदि एक से अधिक UMI असाइन किए जाते हैं, तो उपयोग करने के लिए डिफ़ॉल्ट एक को इंगित करना संभव है। - क्रॉस-टेनेंट एक्सेस के लिए एक संघीय क्लाइंट पहचान को कॉन्फ़िगर करना संभव है। **Microsoft Defender:** - "संभावित डेटाबेस कमजोरियों को कम करने और असामान्य गतिविधियों का पता लगाने" के लिए उपयोगी - हम Defender के बारे में अपनी खुद की पाठ में बात करेंगे (इसे कई अन्य Azure सेवाओं में सक्षम किया जा सकता है) **बैकअप:** - बैकअप आवृत्ति को रिटेंशन नीतियों में प्रबंधित किया जाता है। **हटाए गए डेटाबेस:** - यह संभव है कि हटाए गए DBs को मौजूदा बैकअप से पुनर्स्थापित किया जाए। ## Azure SQL Database **Azure SQL Database** एक **पूर्ण प्रबंधित डेटाबेस प्लेटफ़ॉर्म के रूप में सेवा (PaaS)** है जो स्केलेबल और सुरक्षित संबंधपरक डेटाबेस समाधान प्रदान करता है। यह नवीनतम SQL Server प्रौद्योगिकियों पर आधारित है और अवसंरचना प्रबंधन की आवश्यकता को समाप्त करता है, जिससे यह क्लाउड-आधारित अनुप्रयोगों के लिए एक लोकप्रिय विकल्प बनता है। SQL डेटाबेस बनाने के लिए यह आवश्यक है कि SQL सर्वर को इंगित किया जाए जहां इसे होस्ट किया जाएगा। ### SQL डेटाबेस सुरक्षा विशेषताएँ - **हमेशा अद्यतित**: SQL Server के नवीनतम स्थिर संस्करण पर चलता है और स्वचालित रूप से नई सुविधाएँ और पैच प्राप्त करता है। - **विरासत में मिली SQL Server सुरक्षा विशेषताएँ:** - प्रमाणीकरण (SQL और/या Entra ID) - असाइन की गई प्रबंधित पहचान - नेटवर्क प्रतिबंध - एन्क्रिप्शन - बैकअप - … - **डेटा पुनरावृत्ति:** विकल्प स्थानीय, क्षेत्र, भू-स्थान या भू-क्षेत्र पुनरावृत्त हैं। - **लेजर:** यह डेटा की अखंडता को क्रिप्टोग्राफिक रूप से सत्यापित करता है, यह सुनिश्चित करता है कि किसी भी छेड़छाड़ का पता लगाया जाए। वित्तीय, चिकित्सा और किसी भी संगठन के लिए उपयोगी जो संवेदनशील डेटा का प्रबंधन करता है। एक SQL डेटाबेस एक **इलास्टिक पूल** का हिस्सा हो सकता है। इलास्टिक पूल कई डेटाबेसों के प्रबंधन के लिए एक लागत-कुशल समाधान है, जो उनके बीच कॉन्फ़िगर करने योग्य कंप्यूट (eDTUs) और स्टोरेज संसाधनों को साझा करता है, जिसमें मूल्य निर्धारण केवल आवंटित संसाधनों के आधार पर होता है न कि डेटाबेसों की संख्या के आधार पर। #### Azure SQL कॉलम स्तर सुरक्षा (मास्किंग) और पंक्ति स्तर सुरक्षा **Azure SQL का गतिशील** डेटा मास्किंग एक विशेषता है जो **अनधिकृत उपयोगकर्ताओं से संवेदनशील जानकारी की रक्षा करने में मदद करती है**। वास्तविक डेटा को बदलने के बजाय, यह प्रदर्शित डेटा को गतिशील रूप से मास्क करता है, यह सुनिश्चित करता है कि संवेदनशील विवरण जैसे क्रेडिट कार्ड नंबर अस्पष्ट हैं। **गतिशील डेटा मास्किंग** उन सभी उपयोगकर्ताओं पर प्रभाव डालती है सिवाय उन लोगों के जो अनमास्क किए गए हैं (इन उपयोगकर्ताओं को इंगित करने की आवश्यकता होती है) और व्यवस्थापकों। इसमें वह कॉन्फ़िगरेशन विकल्प है जो यह निर्दिष्ट करता है कि कौन से SQL उपयोगकर्ता गतिशील डेटा मास्किंग से छूट प्राप्त करते हैं, **व्यवस्थापकों को हमेशा बाहर रखा जाता है**। **Azure SQL पंक्ति स्तर सुरक्षा (RLS)** एक विशेषता है जो **नियंत्रित करती है कि कौन सी पंक्तियाँ एक उपयोगकर्ता देख या संशोधित कर सकता है**, यह सुनिश्चित करते हुए कि प्रत्येक उपयोगकर्ता केवल उनके लिए प्रासंगिक डेटा देखता है। फ़िल्टर या ब्लॉक प्रीडिकेट के साथ सुरक्षा नीतियाँ बनाकर, संगठन डेटाबेस स्तर पर बारीक पहुंच लागू कर सकते हैं। ### Azure SQL Managed Instance **Azure SQL Managed Instances** बड़े पैमाने पर, पूरे SQL Server इंस्टेंस-स्कोप्ड तैनातियों के लिए हैं। यह नवीनतम SQL Server ऑन-प्रिमाइसेस (Enterprise Edition) डेटाबेस इंजन के साथ लगभग 100% संगतता प्रदान करता है, जो सामान्य सुरक्षा चिंताओं को संबोधित करने के लिए एक स्वदेशी वर्चुअल नेटवर्क (VNet) कार्यान्वयन प्रदान करता है, और ऑन-प्रिमाइसेस SQL Server ग्राहकों के लिए एक व्यावसायिक मॉडल अनुकूल है। ### Azure SQL वर्चुअल मशीनें **Azure SQL वर्चुअल मशीनें** आपको **ऑपरेटिंग सिस्टम** और SQL Server इंस्टेंस पर **नियंत्रण** करने की अनुमति देती हैं, क्योंकि एक VM SQL सर्वर चलाने वाली VM सेवा में उत्पन्न होगी। जब एक SQL वर्चुअल मशीन बनाई जाती है, तो यह संभव है कि **VM की सभी सेटिंग्स का चयन किया जाए** (जैसा कि VM पाठ में दिखाया गया है) जो SQL सर्वर को होस्ट करेगा। - इसका मतलब है कि VM कुछ VNet(s) तक पहुंच प्राप्त करेगा, इसमें **प्रबंधित पहचानें संलग्न** हो सकती हैं, फ़ाइल शेयर माउंट किए जा सकते हैं... जिससे SQL से VM में **पिवोटिंग** करना बहुत दिलचस्प हो जाता है। - इसके अलावा, यह एक ऐप आईडी और सीक्रेट को कॉन्फ़िगर करना संभव है ताकि **SQL को एक विशिष्ट की वॉल्ट** तक पहुंचने की अनुमति दी जा सके, जिसमें संवेदनशील जानकारी हो सकती है। यह भी संभव है कि **स्वचालित SQL अपडेट**, **स्वचालित बैकअप**, **Entra ID प्रमाणीकरण** और अन्य SQL सेवाओं की अधिकांश सुविधाओं को कॉन्फ़िगर किया जाए। ## एन्यूमरेशन {{#tabs}} {{#tab name="az cli"}} ```bash # List Servers az sql server list # managed identities are enumerated here too ## List Server Usages az sql server list-usages --name --resource-group ## List Server Firewalls az sql server firewall-rule list --resource-group --server ## List of Azure Active Directory administrators in a server. az sql server ad-admin list --resource-group --server ## Gets an advanced threat protection az sql server advanced-threat-protection-setting show --resource-group --name ## Get server's auditing policy. az sql server audit-policy show --resource-group --name ## Gets a server's secure connection policy. az sql server conn-policy show --resource-group --server ## Gets a list of server DNS aliases for a server. az sql server dns-alias list --resource-group --server ## List of server keys. az sql server key list --resource-group --server ## Gets a server encryption protector. az sql server tde-key show --resource-group --server # List Databases in a SQL server az sql db list --server --resource-group #--output table ## Get details of a specific database az sql db show --name --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List of operations performed on the database. az sql db op list --database --server --resource-group ## List sql database classification az sql db classification list --name --server --resource-group ## List long-term retention backups for a SQL database az sql db ltr-backup list --database --server --resource-group ## List long-term retention policy az sql db ltr-policy --name --server --resource-group ## List long-term retention policy az sql db str-policy --name --server --resource-group ## List the replicas of a database and their replication status az sql db replica list-links --name --server --resource-group ## List deleted SQL databases az sql db list-deleted --server --resource-group ## List database usages az sql db list-usages --name --server --resource-group ## List restorable dropped databases in a SQL server az sql db list-deleted --server --resource-group ## List advanced threat protection setting show az sql db advanced-threat-protection-setting --name --server --resource-group # List all elastic pools in a SQL server az sql elastic-pool list --server --resource-group #--output table ## List all databases in a specific elastic pool az sql elastic-pool show --name --server --resource-group ## List of databases in an elastic pool. az sql elastic-pool list-dbs --name --server --resource-group # List all managed Instances az sql mi list az sql mi show --resource-group --name az sql midb list az sql midb show --resource-group --name # Lis all sql VM az sql vm list az sql vm show --resource-group --name # List schema by the database az rest --method get \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Sql/servers//databases//schemas?api-version=2021-11-01" # Get tables of a database with the schema az rest --method get \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Sql/servers//databases//schemas//tables?api-version=2021-11-01" # Get columns of a database az rest --method get \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Sql/servers//databases//columns?api-version=2021-11-01" # Get columns of a table az rest --method get \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Sql/servers//databases//schemas//tables//columns?api-version=2021-11-01" # Get DataMaskingPolicies of a database az rest --method get \ --uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Sql/servers/getstorageserver/databases/masktest/dataMaskingPolicies/Default?api-version=2021-11-01" az rest --method get \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Sql/servers//databases//dataMaskingPolicies/Default/rules?api-version=2021-11-01" ``` {{#endtab}} {{#tab name="Az PowerShell"}} ```bash # List Servers Get-AzSqlServer -ResourceGroupName "" # List All Databases in a SQL Server Get-AzSqlDatabase -ServerName "" -ResourceGroupName "" # Get Details of a Specific Database Get-AzSqlDatabase -Name "" -ServerName "" -ResourceGroupName "" # List Operations Performed on the Database Get-AzSqlDatabaseActivity -DatabaseName "" -ServerName "" -ResourceGroupName "" # List SQL Database Classification Get-AzSqlDatabaseSensitivityClassification -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Long-Term Retention Backups for a SQL Database Get-AzSqlDatabaseLongTermRetentionBackup -ResourceGroupName "" -Location "" # List Replicas of a Database and Their Replication Status Get-AzSqlDatabaseReplicationLink -DatabaseName "" -ServerName "" -ResourceGroupName "" # List Deleted SQL Databases Get-AzSqlDeletedDatabaseBackup -ServerName "" -ResourceGroupName "" # List All Elastic Pools in a SQL Server Get-AzSqlElasticPool -ServerName "" -ResourceGroupName "" # List All Databases in a Specific Elastic Pool Get-AzSqlElasticPoolDatabase -ElasticPoolName "" -ServerName "" -ResourceGroupName "" # List all managed Instances Get-AzSqlInstance Get-AzSqlInstance -ResourceGroupName -Name # List All Databases in a SQL Managed Instance Get-AzSqlInstanceDatabase -ResourceGroupName -InstanceName # Lis all sql VM Get-AzSqlVM ``` {{#endtab}} {{#endtabs}} इसके अतिरिक्त, यदि आप डेटाबेस के भीतर डायनामिक डेटा मास्किंग और रो लेवल नीतियों की गणना करना चाहते हैं, तो आप क्वेरी कर सकते हैं: ```sql --Enumerates the masked columns SELECT OBJECT_NAME(mc.object_id) AS TableName, c.name AS ColumnName, mc.masking_function AS MaskingFunction FROM sys.masked_columns AS mc JOIN sys.columns AS c ON mc.object_id = c.object_id AND mc.column_id = c.column_id --Enumerates Row level policies SELECT sp.name AS PolicyName, sp.is_enabled, sp.create_date, sp.modify_date, OBJECT_NAME(sp.object_id) AS TableName, sp2.predicate_definition AS PredicateDefinition FROM sys.security_policies AS sp JOIN sys.security_predicates AS sp2 ON sp.object_id = sp2.object_id; ``` ### Connect and run SQL queries आप एक कनेक्शन स्ट्रिंग (जिसमें क्रेडेंशियल्स होते हैं) उदाहरण [enumerating an Az WebApp](az-app-services.md) से पा सकते हैं: ```bash function invoke-sql{ param($query) $Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" $Connection = New-Object System.Data.SqlClient.SqlConnection $Connection_string $Connection.Open() $Command = New-Object System.Data.SqlClient.SqlCommand $Command.Connection = $Connection $Command.CommandText = $query $Reader = $Command.ExecuteReader() while ($Reader.Read()) { $Reader.GetValue(0) } $Connection.Close() } invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` आप sqlcmd का उपयोग करके डेटाबेस तक भी पहुँच सकते हैं। यह जानना महत्वपूर्ण है कि क्या सर्वर सार्वजनिक कनेक्शन की अनुमति देता है `az sql server show --name --resource-group ` और यह भी कि क्या फ़ायरवॉल नियम हमारे IP को पहुँचने की अनुमति देता है: ```bash sqlcmd -S .database.windows.net -U -P -d ``` ## संदर्भ - [https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql) - [https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql) ## विशेषाधिकार वृद्धि {{#ref}} ../az-privilege-escalation/az-sql-privesc.md {{#endref}} ## पोस्ट एक्सप्लोइटेशन {{#ref}} ../az-post-exploitation/az-sql-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}