Az - SQL
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Azure SQL
Το Azure SQL είναι μια οικογένεια διαχειριζόμενων, ασφαλών και έξυπνων προϊόντων που χρησιμοποιούν την μηχανή βάσης δεδομένων SQL Server στο Azure cloud. Αυτό σημαίνει ότι δεν χρειάζεται να ανησυχείτε για τη φυσική διαχείριση των διακομιστών σας και μπορείτε να επικεντρωθείτε στη διαχείριση των δεδομένων σας.
Το Azure SQL αποτελείται από τέσσερις κύριες προσφορές:
- Azure SQL Server: Ένας διακομιστής είναι απαραίτητος για την ανάπτυξη και διαχείριση βάσεων δεδομένων SQL Server.
- Azure SQL Database: Αυτή είναι μια πλήρως διαχειριζόμενη υπηρεσία βάσης δεδομένων, που σας επιτρέπει να φιλοξενείτε μεμονωμένες βάσεις δεδομένων στο Azure cloud.
- Azure SQL Managed Instance: Αυτό είναι για μεγαλύτερης κλίμακας, πλήρεις αναπτύξεις SQL Server.
- Azure SQL Server σε Azure VMs: Αυτό είναι καλύτερο για αρχιτεκτονικές όπου θέλετε έλεγχο του λειτουργικού συστήματος και της παρουσίας SQL Server.
Χαρακτηριστικά Ασφαλείας SQL Server
Πρόσβαση δικτύου:
- Δημόσιο σημείο πρόσβασης (μπορεί να περιορίσει την πρόσβαση σε συγκεκριμένα δίκτυα).
- Ιδιωτικά σημεία πρόσβασης.
- Είναι επίσης δυνατή η περιορισμένη σύνδεση με βάση τα ονόματα τομέα.
- Είναι επίσης δυνατή η επιτρεπόμενη πρόσβαση από υπηρεσίες Azure (όπως η χρήση του Query editor στην πύλη ή η επιτρεπόμενη σύνδεση ενός Azure VM).
Μέθοδοι Αυθεντικοποίησης:
- Αυθεντικοποίηση μόνο Entra της Microsoft: Πρέπει να υποδείξετε τους Entra principals που θα έχουν πρόσβαση στην υπηρεσία.
- Και οι δύο SQL και Microsoft Entra αυθεντικοποίηση: Παραδοσιακή αυθεντικοποίηση SQL με όνομα χρήστη και κωδικό πρόσβασης μαζί με Microsoft Entra.
- Μόνο SQL αυθεντικοποίηση: Επιτρέπεται η πρόσβαση μόνο μέσω χρηστών βάσης δεδομένων.
Σημειώστε ότι αν επιτρέπεται οποιαδήποτε αυθεντικοποίηση SQL, πρέπει να υποδειχθεί ένας χρήστης διαχειριστή (όνομα χρήστη + κωδικός πρόσβασης) και αν επιλεγεί η αυθεντικοποίηση Entra ID, είναι επίσης απαραίτητο να υποδειχθεί τουλάχιστον ένας principal με πρόσβαση διαχειριστή.
Κρυπτογράφηση:
-
Ονομάζεται “Διαφανής κρυπτογράφηση δεδομένων” και κρυπτογραφεί βάσεις δεδομένων, αντίγραφα ασφαλείας και αρχεία καταγραφής σε κατάσταση ηρεμίας.
-
Όπως πάντα, χρησιμοποιείται από προεπιλογή ένα διαχειριζόμενο κλειδί Azure, αλλά μπορεί επίσης να χρησιμοποιηθεί ένα κλειδί κρυπτογράφησης που διαχειρίζεται ο πελάτης (CMEK). Διαχειριζόμενες Ταυτότητες:
-
Είναι δυνατή η ανάθεση συστημικών και διαχειριζόμενων από χρήστες MI.
-
Χρησιμοποιούνται για την πρόσβαση στο κλειδί κρυπτογράφησης (αν χρησιμοποιείται ένα CMEK) και σε άλλες υπηρεσίες από τις βάσεις δεδομένων.
-
Για μερικά παραδείγματα των υπηρεσιών Azure που μπορούν να προσπελαστούν από τη βάση δεδομένων, ελέγξτε αυτή τη σελίδα των εγγράφων
-
Αν έχει ανατεθεί περισσότερη από μία UMI, είναι δυνατή η υποδειξιμότητα της προεπιλεγμένης που θα χρησιμοποιηθεί.
-
Είναι δυνατή η ρύθμιση μιας ομοσπονδιακής ταυτότητας πελάτη για διασυνοριακή πρόσβαση.
Ορισμένες εντολές για την πρόσβαση σε πληροφορίες μέσα σε ένα blob storage από μια βάση δεδομένων SQL:
-- Create a credential for the managed identity
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO
-- Create an external data source pointing to the blob storage to access
CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://testsqlidentity.blob.core.windows.net/sqlcontainer',
CREDENTIAL = ManagedIdentityCredential
);
GO
-- Read a file from ths storage and return it
SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO
Microsoft Defender:
- Χρήσιμο για “μείωση πιθανών ευπαθειών βάσεων δεδομένων και ανίχνευση ανωμαλιών”
- Θα μιλήσουμε για το Defender σε μάθημα από μόνο του (μπορεί να ενεργοποιηθεί σε πολλές άλλες υπηρεσίες Azure)
Backups:
- Η συχνότητα των αντιγράφων ασφαλείας διαχειρίζεται στις πολιτικές διατήρησης.
Deleted databases:
- Είναι δυνατή η αποκατάσταση DB που έχουν διαγραφεί από υπάρχοντα αντίγραφα ασφαλείας.
Azure SQL Database
Azure SQL Database είναι μια πλήρως διαχειριζόμενη πλατφόρμα βάσεων δεδομένων ως υπηρεσία (PaaS) που παρέχει κλιμακωτές και ασφαλείς λύσεις σχεσιακών βάσεων δεδομένων. Είναι βασισμένη στις τελευταίες τεχνολογίες SQL Server και εξαλείφει την ανάγκη για διαχείριση υποδομών, καθιστώντας την δημοφιλή επιλογή για εφαρμογές που βασίζονται στο cloud.
Για να δημιουργηθεί μια SQL βάση δεδομένων, είναι απαραίτητο να υποδειχθεί ο SQL server όπου θα φιλοξενηθεί.
SQL Database Security Features
- Always Up-to-Date: Λειτουργεί στην τελευταία σταθερή έκδοση του SQL Server και λαμβάνει αυτόματα νέες δυνατότητες και ενημερώσεις.
- Κληρονομούμενα χαρακτηριστικά ασφαλείας SQL Server:
- Αυθεντικοποίηση (SQL και/ή Entra ID)
- Ανατεθειμένες Διαχειριζόμενες Ταυτότητες
- Περιορισμοί δικτύου
- Κρυπτογράφηση
- Αντίγραφα ασφαλείας
- …
- Πλεονασμός δεδομένων: Οι επιλογές είναι τοπικές, ζώνης, γεωγραφικές ή γεωγραφικές-ζώνης πλεονασματικές.
- Ledger: Επαληθεύει κρυπτογραφικά την ακεραιότητα των δεδομένων, διασφαλίζοντας ότι οποιαδήποτε αλλοίωση ανιχνεύεται. Χρήσιμο για χρηματοοικονομικές, ιατρικές και οποιαδήποτε οργάνωση διαχειρίζεται ευαίσθητα δεδομένα.
Μια SQL βάση δεδομένων θα μπορούσε να είναι μέρος ενός elastic Pool. Οι ελαστικές πισίνες είναι μια οικονομικά αποδοτική λύση για τη διαχείριση πολλαπλών βάσεων δεδομένων, μοιράζοντας ρυθμιζόμενους υπολογιστικούς (eDTUs) και πόρους αποθήκευσης μεταξύ τους, με τιμολόγηση που βασίζεται αποκλειστικά στους πόρους που έχουν ανατεθεί και όχι στον αριθμό των βάσεων δεδομένων.
Azure SQL Column Level Security (Masking) & Row Level Security
Η δυναμική μάσκα δεδομένων του Azure SQL είναι μια δυνατότητα που βοηθά στην προστασία ευαίσθητων πληροφοριών κρύβοντάς τις από μη εξουσιοδοτημένους χρήστες. Αντί να τροποποιεί τα πραγματικά δεδομένα, μάσκαρε δυναμικά τα εμφανιζόμενα δεδομένα, διασφαλίζοντας ότι ευαίσθητες λεπτομέρειες όπως οι αριθμοί πιστωτικών καρτών είναι κρυμμένες.
Η Δυναμική Μάσκα Δεδομένων επηρεάζει όλους τους χρήστες εκτός από αυτούς που είναι μη μάσκες (αυτοί οι χρήστες πρέπει να υποδειχθούν) και τους διαχειριστές. Έχει την επιλογή ρύθμισης που καθορίζει ποιοι χρήστες SQL εξαιρούνται από τη δυναμική μάσκα δεδομένων, με τους διαχειριστές πάντα εξαιρούμενους.
Η Ασφάλεια Επίπεδου Γραμμής Azure SQL (RLS) είναι μια δυνατότητα που ελέγχει ποιες γραμμές μπορεί να δει ή να τροποποιήσει ένας χρήστης, διασφαλίζοντας ότι κάθε χρήστης βλέπει μόνο τα δεδομένα που τον αφορούν. Δημιουργώντας πολιτικές ασφαλείας με φίλτρα ή μπλοκαρίσματα, οι οργανισμοί μπορούν να επιβάλλουν λεπτομερή πρόσβαση σε επίπεδο βάσης δεδομένων.
Azure SQL Managed Instance
Οι Διαχειριζόμενες Εγκαταστάσεις Azure SQL προορίζονται για μεγαλύτερης κλίμακας, πλήρεις αναπτύξεις SQL Server. Παρέχουν σχεδόν 100% συμβατότητα με την τελευταία έκδοση SQL Server on-premises (Enterprise Edition) Database Engine, που παρέχει μια εγγενή υλοποίηση εικονικού δικτύου (VNet) που αντιμετωπίζει κοινές ανησυχίες ασφαλείας, και ένα επιχειρηματικό μοντέλο ευνοϊκό για τους πελάτες SQL Server on-premises.
Azure SQL Virtual Machines
Οι Εικονικές Μηχανές Azure SQL επιτρέπουν τον έλεγχο του λειτουργικού συστήματος και της εγκατάστασης SQL Server, καθώς μια VM θα δημιουργηθεί στην υπηρεσία VM που εκτελεί τον SQL server.
Όταν δημιουργείται μια Εικονική Μηχανή SQL, είναι δυνατή η επιλογή όλων των ρυθμίσεων της VM (όπως φαίνεται στο μάθημα VM) που θα φιλοξενεί τον SQL server.
- Αυτό σημαίνει ότι η VM θα έχει πρόσβαση σε κάποια VNet(s), μπορεί να έχει Συνδεδεμένες Ταυτότητες συνδεδεμένες σε αυτήν, θα μπορούσε να έχει κοινές χρήσεις αρχείων… καθιστώντας την pivoting από τον SQL στη VM πολύ ενδιαφέρουσα.
- Επιπλέον, είναι δυνατή η ρύθμιση ενός app id και μυστικού για να επιτρέψει στον SQL να έχει πρόσβαση σε ένα συγκεκριμένο key vault, το οποίο θα μπορούσε να περιέχει ευαίσθητες πληροφορίες.
Είναι επίσης δυνατή η ρύθμιση πραγμάτων όπως αυτόματες ενημερώσεις SQL, αυτόματα αντίγραφα ασφαλείας, αυθεντικοποίηση Entra ID και τις περισσότερες δυνατότητες των άλλων υπηρεσιών SQL.
Enumeration
# List Servers
az sql server list # managed identities are enumerated here too
## List Server Usages
az sql server list-usages --name <server_name> --resource-group <resource_group>
## List Server Firewalls
az sql server firewall-rule list --resource-group <resource_group> --server <server_name>
## List of Azure Active Directory administrators in a server.
az sql server ad-admin list --resource-group <resource_group> --server <server_name>
## Gets an advanced threat protection
az sql server advanced-threat-protection-setting show --resource-group <resource_group> --name <server_name>
## Get server's auditing policy.
az sql server audit-policy show --resource-group <resource_group> --name <server_name>
## Gets a server's secure connection policy.
az sql server conn-policy show --resource-group <resource_group> --server <server_name>
## Gets a list of server DNS aliases for a server.
az sql server dns-alias list --resource-group <resource_group> --server <server_name>
## List of server keys.
az sql server key list --resource-group <resource_group> --server <server_name>
## Gets a server encryption protector.
az sql server tde-key show --resource-group <resource_group> --server <server_name>
# List Databases in a SQL server
az sql db list --server <server_name> --resource-group <resource_group> #--output table
## Get details of a specific database
az sql db show --name <database_name> --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List of operations performed on the database.
az sql db op list --database <database_name> --server <server_name> --resource-group <resource_group>
## List sql database classification
az sql db classification list --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention backups for a SQL database
az sql db ltr-backup list --database <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db ltr-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List long-term retention policy
az sql db str-policy --name <database_name> --server <server_name> --resource-group <resource_group>
## List the replicas of a database and their replication status
az sql db replica list-links --name <database_name> --server <server_name> --resource-group <resource_group>
## List deleted SQL databases
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List database usages
az sql db list-usages --name <database_name> --server <server_name> --resource-group <resource_group>
## List restorable dropped databases in a SQL server
az sql db list-deleted --server <server_name> --resource-group <resource_group>
## List advanced threat protection setting show
az sql db advanced-threat-protection-setting --name <database_name> --server <server_name> --resource-group <resource_group>
# List all elastic pools in a SQL server
az sql elastic-pool list --server <server_name> --resource-group <resource_group> #--output table
## List all databases in a specific elastic pool
az sql elastic-pool show --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
## List of databases in an elastic pool.
az sql elastic-pool list-dbs --name <elastic_pool_name> --server <server_name> --resource-group <resource_group>
# List all managed Instances
az sql mi list
az sql mi show --resource-group <res-grp> --name <name>
az sql midb list
az sql midb show --resource-group <res-grp> --name <name>
# Lis all sql VM
az sql vm list
az sql vm show --resource-group <res-grp> --name <name>
# List schema by the database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas?api-version=2021-11-01"
# Get tables of a database with the schema
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables?api-version=2021-11-01"
# Get columns of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/columns?api-version=2021-11-01"
# Get columns of a table
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/schemas/<schemaName>/tables/<tableName>/columns?api-version=2021-11-01"
# Get DataMaskingPolicies of a database
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default?api-version=2021-11-01"
az rest --method get \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/dataMaskingPolicies/Default/rules?api-version=2021-11-01"
Επιπλέον, αν θέλετε να απαριθμήσετε την Dynamic Data Masking και τις Row Level πολιτικές, μέσα στη βάση δεδομένων, μπορείτε να κάνετε ερώτηση:
--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;
Συνδεθείτε και εκτελέστε ερωτήματα SQL
Μπορείτε να βρείτε μια συμβολοσειρά σύνδεσης (που περιέχει διαπιστευτήρια) από το παράδειγμα enumerating an Az WebApp:
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 <server-name> --resource-group <resource-group>, και επίσης αν ο κανόνας του τείχους προστασίας επιτρέπει στη διεύθυνση IP μας να αποκτήσει πρόσβαση:
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
Αναφορές
- 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/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
Ανύψωση Δικαιωμάτων
Μετά την Εκμετάλλευση
Επιμονή
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

