MSSQL Port (1433)
Connecting to database
Impacket-mssqlclient
SE DEBEN VERIFICAR AMBAS AUTENTICACIONES SIEMPRE PARA VERIFICAR ACCESO.
Linux - SQSH
Para interactuar con MSSQL (Microsoft SQL Server) desde Linux podemos usar sqsh, o sqlcmd si estás usando Windows. Sqsh es mucho más que un simple prompt amigable. Está diseñado para ofrecer gran parte de la funcionalidad de un shell de comandos, como variables, alias, redirección, pipes, ejecución en segundo plano, control de trabajos, historial, sustitución de comandos y configuración dinámica. Podemos iniciar una sesión SQL interactiva de la siguiente forma:
Windows - SQLCMD
La utilidad sqlcmd nos permite ingresar instrucciones Transact-SQL, procedimientos del sistema y archivos de scripts a través de varios modos disponibles:
En la línea de comandos.
En el Editor de Consultas en modo SQLCMD.
En un archivo de script de Windows.
En un paso de trabajo del Agente de SQL Server ejecutado por el sistema operativo (Cmd.exe).
DBeaver
Video - Connecting to MSSQL DB using dbeaver
Basic Enumeration
Remote Code Execution
xp_cmdshell component
Se debe verificar al acceder a un MSSQL si podemos habilitar el componente xp_cmdshell para lograr ejecutar comandos arbitrarios en el equipo.
A través de la herramienta de nxc
también podemos ejecutar comandos con xp_cmdshell
.
Hash Stealing [Net-NTLMv2]
xp_dirtree component
Si disponemos del componente (xp_dirtree) habilitado, podemos probar lo siguiente para obtener un hash NTLMv2 y posteriormente crackear el hash.
Desde Kali podemos hacer uso de alguno de los métodos.
Desde MSSQL podemos ejecutar los siguientes comandos, si todo funciona bien, en nuestro equipo atacante recibiremos un hash Net-NTLMv2 que podremos crackear posteriormente.
A través de la herramienta de nxc
también podemos abusar del componente xp_dirtree
. Primero, en nuestra Kali levantamos el servidor SMB o el Responder
.
Active Directory Users enumeration of MSSQL Injection (mssqli-duet)
Buscando más información sobre maneras de explotar un MSSQL, nos encontramos con el siguiente blog que nos indica como podemos intentar explotar este servicio para enumerar usuarios del Active Directory (AD) a través de inyecciones SQL para enumerar usuarios a través del Relative ID (RID).
Write Local Files
MSSQL - Enable Ole Automation Procedures
MSSQL - Create a File
Read Local Files
De forma predeterminada, MSSQL permite la lectura de cualquier archivo del sistema operativo al que la cuenta tenga acceso de lectura. Podemos usar la siguiente consulta SQL:
Impersonating Existing Users in MSSQL
SQL Server tiene un permiso especial llamado IMPERSONATE
, que permite al usuario que lo ejecuta asumir los permisos de otro usuario o login hasta que se restablezca el contexto o finalice la sesión. Vamos a ver cómo el privilegio IMPERSONATE
puede llevar a una escalada de privilegios en SQL Server.
Identify Users that We Can Impersonate
Primero, necesitamos identificar qué usuarios podemos suplantar. Los usuarios con rol de sysadmin
pueden suplantar a cualquiera por defecto, pero para los usuarios no administradores, los privilegios deben asignarse explícitamente.
Podemos usar la siguiente consulta para identificar los usuarios que podemos suplantar:
Verifying our Current User and Role
Para hacernos una idea de las posibilidades de escalada de privilegios, vamos a verificar si nuestro usuario actual tiene el rol de sysadmin:
Como el valor devuelto es 0
, indica que no tenemos el rol de sysadmin, pero sí podemos suplantar al usuario sa
. Vamos a suplantar a ese usuario y ejecutar los mismos comandos.
Impersonating the SA User
Nota: Se recomienda ejecutar EXECUTE AS LOGIN
dentro de la base de datos master, ya que todos los usuarios, por defecto, tienen acceso a esa base de datos.
Si el usuario que intentas suplantar no tiene acceso a la base de datos a la que estás conectado, se producirá un error.
Communicate with Other Databases with MSSQL
MSSQL tiene una opción de configuración llamada linked servers. Los linked servers suelen configurarse para permitir que el motor de base de datos ejecute sentencias Transact-SQL que incluyan tablas en otra instancia de SQL Server, o incluso en otro producto de base de datos como Oracle.
Si logramos obtener acceso a un servidor SQL que tiene un linked server configurado, podríamos ser capaces de movernos lateralmente hacia ese otro servidor de base de datos. Los administradores pueden configurar un linked server usando credenciales del servidor remoto, y si esas credenciales tienen privilegios de sysadmin, podríamos ejecutar comandos en la instancia SQL remota.
Veamos cómo podemos identificar y ejecutar consultas en servidores enlazados.
Identify linked Servers in MSSQL
Como podemos ver en la salida de la consulta, tenemos el nombre del servidor y la columna isremote
, donde 1 indica que es un servidor remoto, y 0 que es un linked server. Podemos consultar la Transact-SQL sysservers
para más información.
A continuación, podemos intentar identificar el usuario usado en la conexión y sus privilegios. La instrucción EXECUTE
puede utilizarse para enviar comandos directamente a los linked servers. Colocamos nuestro comando entre paréntesis y especificamos el nombre del linked server entre corchetes [ ]
.
Como hemos visto, ahora podemos ejecutar consultas con privilegios de sysadmin sobre el linked server. Siendo sysadmin, tenemos control total sobre la instancia de SQL Server: podemos leer datos de cualquier base de datos o ejecutar comandos del sistema usando xp_cmdshell
.
Última actualización