Aller au contenu

MSSQL

🔗 Connexion (depuis un poste Windows)

Se connecter à un serveur SQL Server

sqlcmd -S $serveur$ -U $user -P $password

Permet de se connecter à une base de données SQL Server depuis un terminal Windows en utilisant sqlcmd.

  • $serveur$ : Nom ou adresse IP du serveur SQL
  • $user$ : Nom d’utilisateur
  • $password$ : Mot de passe

[!Astuce]
Si l’authentification Windows est utilisée, remplace -U $user$ -P $password par -E pour utiliser l'utilisateur actuel.


🚀 Requêtes de base

Lister les bases de données

SELECT name FROM master.sys.databases;

Affiche la liste des bases de données disponibles sur le serveur SQL.

Sélectionner une base de données

USE <nom_base_de_données>;

Permet de choisir une base de données spécifique pour exécuter les requêtes suivantes.

Lister les tables d’une base de données

SELECT * FROM information_schema.tables;

Renvoie la liste des tables présentes dans la base de données en cours.

Lister les serveurs liés

EXEC sp_linkedservers
SELECT * FROM sys.servers;

Affiche les serveurs SQL Server liés permettant d’effectuer des requêtes inter-serveurs.

Lister les utilisateurs SQL Server

1
2
3
4
5
6
7
SELECT sp.name AS login, sp.type_desc AS login_type, sl.password_hash, 
       sp.create_date, sp.modify_date, 
       CASE WHEN sp.is_disabled = 1 THEN 'Disabled' ELSE 'Enabled' END AS status 
FROM sys.server_principals sp 
LEFT JOIN sys.sql_logins sl ON sp.principal_id = sl.principal_id 
WHERE sp.type NOT IN ('G', 'R') 
ORDER BY sp.name;

Affiche la liste des utilisateurs SQL, leurs statuts (activé/désactivé) et d’autres informations.

[!Astuce]
Utile pour vérifier les comptes SQL et leurs statuts de connexion.


💻 Activer xp_cmdshell

Activer l’exécution de commandes système

1
2
3
4
sp_configure 'show advanced options', '1'
RECONFIGURE
sp_configure 'xp_cmdshell', '1'
RECONFIGURE

Active l'option xp_cmdshell, qui permet d’exécuter des commandes système depuis SQL Server.


⚡ Exécuter une commande système

EXEC master..xp_cmdshell 'whoami'

Exécute la commande whoami directement depuis SQL Server et affiche l’utilisateur en cours.

[!Astuce]
Peut être utilisé pour vérifier les permissions du compte SQL Server sur le système.


📝 Lire / Écrire un fichier

Vérifier si nous avons la permission de lire un fichier

1
2
3
SELECT * FROM fn_my_permissions(NULL, 'SERVER') 
WHERE permission_name='ADMINISTER BULK OPERATIONS' 
   OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';

Affiche les permissions actuelles de l’utilisateur SQL pour la lecture et l’importation de fichiers.

Lire un fichier depuis le système

SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents

Lit le contenu du fichier spécifié et affiche son contenu sous forme de texte.

[!Astuce]
Utile pour lire les fichiers système directement via SQL Server.

Écrire dans un fichier (nécessite des droits d’administrateur)

sp_configure 'show advanced options', 1
RECONFIGURE
sp_configure 'Ole Automation Procedures', 1
RECONFIGURE

DECLARE @OLE INT
DECLARE @FileID INT

EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\fichier.txt', 8, 1
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'Coucou :)'
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE

Crée un fichier texte et y écrit du contenu directement depuis SQL Server.

  • sp_OACreate : Crée une instance de l’objet Scripting.FileSystemObject
  • OpenTextFile : Ouvre ou crée un fichier en mode écriture
  • WriteLine : Écrit du texte dans le fichier