MSSQL (Microsoft SQL Server)
📚 Introduction
Microsoft SQL Server (MSSQL) est un système de gestion de base de données relationnelles (SGBDR) développé par Microsoft. Contrairement à MySQL, MSSQL est un logiciel propriétaire initialement conçu pour fonctionner sur systèmes Windows. Il est très populaire dans les environnements d’entreprise exploitant le framework .NET. Bien qu'il existe des versions compatibles avec Linux et macOS, MSSQL est le plus souvent rencontré sur serveurs Windows.
💻 Clients MSSQL
Le client natif le plus connu est SQL Server Management Studio (SSMS). Il est utilisé pour :
Gérer les bases MSSQL locales ou distantes
Accéder aux objets de la base de données (tables, vues, procédures)
Configurer les bases de données et utilisateurs
Autres clients utiles :
mssql-cli(interface en ligne de commande)PowerShell SQLServer(module PowerShell)HeidiSQL,SQLProimpacket-mssqlclient.py: outil très utilisé en pentest
📌 Astuce :
locate mssqlclient.py🏗️ Bases MSSQL par défaut
MSSQL contient plusieurs bases systèmes importantes :
master
Contient les informations système de l’instance
model
Modèle pour toute nouvelle base créée
msdb
Utilisée par le SQL Server Agent pour les jobs
tempdb
Base temporaire pour les objets volatils
resource
Lecture seule, contient les objets systèmes
⚙️ Configuration par défaut
Lors d'une installation par défaut, le service SQL tourne sous le compte NT SERVICE\MSSQLSERVER. L’authentification peut se faire par :
Windows Authentication (via Active Directory ou SAM local)
SQL Authentication (login + mot de passe MSSQL)
La connexion n’est pas chiffrée par défaut, ce qui peut exposer des crédentials sur le réseau.
☠️ Paramètres à risque
Voici quelques exemples de configurations à surveiller :
Connexion sans chiffrement
Interception des crédentials
Certificats auto-signés
Falsifiables pour interception
Utilisation de named pipes
Attaques de type relay/spoof
Compte sa actif avec mdp faible
Accès total à l’instance
🔍 Footprinting MSSQL
Par défaut, MSSQL écoute sur le port TCP 1433.
🔎 Scan Nmap avec scripts MSSQL
Ce scan peut révéler :
Nom de l’instance MSSQL
Version du serveur
Pipe nommé (ex:
\\<IP CIBLE>\pipe\sql\query)Configuration de clustering ou non
🔧 Metasploit : mssql_ping
Retourne :
Nom de l’hôte MSSQL
Instance, port, version
Pipe nommé actif
🔑 Connexion avec mssqlclient.py
mssqlclient.pySi nous disposons de crédentials valides :
Une fois connecté :
🧠 Commandes utiles MSSQL (T-SQL)
select name from sys.databases;
Affiche les bases existantes
use <db>;
Sélectionne une base
select * from sys.tables;
Affiche les tables
select * from <table>;
Contenu d’une table
select user_name();
Affiche l’utilisateur connecté
🛡️ Recommandations
Pour se former efficacement :
Installer MSSQL sur une VM Windows (ou Docker Linux)
Tester les connexions via Windows Auth et SQL Auth
Analyser les logs, pipes, ports
🔐 Bonnes pratiques :
Désactiver le compte
sasi inutiliséImposer l’authentification chiffrée
Suivre les recommandations de Microsoft pour durcir l’instance
📚 Ressources utiles
Enumerate the target using the concepts taught in this section. List the hostname of MSSQL server.
Nous effectuons un scan des informations concernant notre cible :
Ce scan nous permet d'identifier le nom de notre serveur hôte qui est ILF-SQL-01.
Connect to the MSSQL instance running on the target using the account (backdoor:Password1), then list the non-default database present on the server.
Nous nous connectons au serveur cible via mssqlclient.py :
Une fois connectés, nous pouvons utiliser la commande help afin de nous permettre de bien naviguer dans les bases de données présentes sur le client :
Nous pouvons alors lister les bases de données présentes sur le serveur :
Pour rappel, voici la liste des bases de données présentes par défaut :
master
Contient les informations système de l’instance
model
Modèle pour toute nouvelle base créée
msdb
Utilisée par le SQL Server Agent pour les jobs
tempdb
Base temporaire pour les objets volatils
resource
Lecture seule, contient les objets systèmes
Nous observons alors que la base de données qui est présente qui ne fait pas partie des DB par défaut est Employees.
Last updated