MSSQL
📌 Comandos en MSSQL para Evaluar Seguridad
Si tienes acceso a un servidor Microsoft SQL Server, puedes ejecutar varios comandos para evaluar qué tan seguro o vulnerable se encuentra
🔍 Ver permisos y usuarios en el servidor
🔹 Listar todos los usuarios en SQL Server :
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT name, create_date, modify_date FROM sys.sql_logins;
name create_date modify_date
--------------------------------- ----------- -----------
sa 2003-04-08 09:10:35 2020-01-19 15:10:07
##MS_PolicyEventProcessingLogin## 2017-08-22 19:39:30 2020-01-19 15:10:07
##MS_PolicyTsqlExecutionLogin## 2017-08-22 19:39:30 2020-01-19 15:10:07
🔹 Comprobar si tienes permisos sysadmin :
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT IS_SRVROLEMEMBER('sysadmin');
-
1
🔹 Ver los roles de servidor y sus miembros
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT spr.name AS ServerRole FROM sys.server_role_members srm JOIN sys.server_principals spr ON srm.role_principal_id = spr.principal_id JOIN sys.server_principals sp ON srm.member_principal_id = sp.principal_id WHERE sp.name = 'ARCHETYPE\sql_svc';
ServerRole
----------
sysadmin
Explicación:
sys.server_role_members
almacena la relación entre roles y usuarios a nivel de servidor.sys.server_principals
almacena los usuarios y roles de servidor.JOIN
nos ayuda a obtener el nombre de los roles y los usuarios asignados a ellos
🔹 Ver qué roles tiene un usuario específico
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT dr.name AS DatabaseRole FROM sys.database_role_members drm JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id WHERE dp.name = 'sql_svc';
DatabaseRole
------------
Explicación:
sys.database_role_members
: Relación entre usuarios y roles dentro de una base de datos.sys.database_principals
: Contiene la lista de usuarios y roles de la base de datos.JOIN
nos permite combinar la información de los usuarios y los roles.
🔍 Buscar posibles credenciales en la base de datos
🔹 Ver conexiones activas y qué usuarios están conectados
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT session_id, login_name, host_name, program_name FROM sys.dm_exec_sessions;
session_id login_name host_name program_name
---------- ----------------------- --------- -------------
1 ARCHETYPE\sql_svc bMobAXqR YcrAHibK
2 NT SERVICE\SQLTELEMETRY ARCHETYPE SQLServerCEIP
3 sa NULL NULL
4 sa NULL NULL
🔹 Listar todas las bases de datos disponibles
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT name FROM sys.databases;
name
------
master
tempdb
model
msdb
🔹 Ver si hay credenciales almacenadas en texto plano (puede requerir permisos elevados)
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT name, password_hash FROM sys.sql_logins;
name password_hash
--------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------
sa b'0200100bac9600580c3c299ed7ff81d77bcbe50b830ca60306d7a5e5bf34a5c6be0d895247952bfff5708764033a797e8ca4f2004797203d7ee5c794d655c3218a0b13a3ce63'
##MS_PolicyEventProcessingLogin## b'02003d1be73b4e8454e737ed6b68096e53a810f2ff98dc50df96a240f5b560aebdafcbf6c2db0cab31ad1b1f2af285b3659a6d5479de875380b8100a34882ad7748438985cae'
##MS_PolicyTsqlExecutionLogin## b'0200b21fd125bfc51840773537c9389ba510dddede01db01a45dbea30a74cb34a3b84fb7fa54c60d7f5c7e71813f50182f6ad974c7ab3cd077ca1bea8e1e65979b6d9e1cb223'
🔹 Buscar posibles credenciales en texto dentro de las tablas
SQL (ARCHETYPE\sql_svc dbo@master)> SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%pass%' OR COLUMN_NAME LIKE '%cred%';
TABLE_NAME COLUMN_NAME
---------- -----------
🔍 Evaluar missconfigurations
🔹 Ver ubicación de los archivos de la base de datos (puede revelar rutas sensibles)
SQL (ARCHETYPE\sql_svc dbo@master)> EXEC sp_helpdb;
name db_size owner dbid created status compatibility_level
------ ------------- ----- ---- ----------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------
master 6.44 MB sa 1 Apr 8 2003 Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=SIMPLE, Version=869, Collation=SQL_Latin1_General_CP1_CI_AS, SQLSortOrder=52, IsAutoCreateStatistics, IsAutoUpdateStatistics 140
model 16.00 MB sa 3 Apr 8 2003 Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=FULL, Version=869, Collation=SQL_Latin1_General_CP1_CI_AS, SQLSortOrder=52, IsAutoCreateStatistics, IsAutoUpdateStatistics 140
msdb 15.44 MB sa 4 Aug 22 2017 Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=SIMPLE, Version=869, Collation=SQL_Latin1_General_CP1_CI_AS, SQLSortOrder=52, IsAutoCreateStatistics, IsAutoUpdateStatistics, IsFullTextEnabled 140
tempdb 24.00 MB sa 2 Apr 2 2025 Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=SIMPLE, Version=869, Collation=SQL_Latin1_General_CP1_CI_AS, SQLSortOrder=52, IsAutoCreateStatistics, IsAutoUpdateStatistics 140
🔹 Listar configuraciones avanzadas (puede revelar configuraciones débiles)
SQL (ARCHETYPE\sql_svc dbo@master)> EXEC sp_configure;
name minimum maximum config_value run_value
--------------------------------- ------- ---------- ------------ ---------
allow polybase export 0 1 0 0
allow updates 0 1 0 0
backup checksum default 0 1 0 0
backup compression default 0 1 0 0
clr enabled 0 1 0 0
contained database authentication 0 1 0 0
cross db ownership chaining 0 1 0 0
default language 0 9999 0 0
external scripts enabled 0 1 0 0
filestream access level 0 2 0 0
hadoop connectivity 0 7 0 0
max text repl size (B) -1 2147483647 65536 65536
nested triggers 0 1 1 1
polybase network encryption 0 1 1 1
remote access 0 1 1 1
remote admin connections 0 1 0 0
remote data archive 0 1 0 0
remote login timeout (s) 0 2147483647 10 10
remote proc trans 0 1 0 0
remote query timeout (s) 0 2147483647 600 600
server trigger recursion 0 1 1 1
show advanced options 0 1 0 0
user options 0 32767 0 0
Conceptos y aclaraciones:
📌 ¿Por qué SQL Server permite ejecutar comandos del sistema?
SQL Server permite ejecutar comandos del sistema operativo mediante procedimientos almacenados extendidos como xp_cmdshell
o funciones del sistema porque, en entornos legítimos, esto facilita tareas administrativas y de automatización. Sin embargo, esta funcionalidad también representa un riesgo de seguridad si se abusa.
📌 ¿Qué es xp_cmdshell?
xp_cmdshell
es un procedimiento almacenado extendido en Microsoft SQL Server que permite ejecutar comandos del sistema operativo desde SQL Server.
✅ Si el usuario tiene privilegios suficientes (sysadmin
o control sobre la base de datos master
), puede usar xp_cmdshell
para ejecutar comandos como si estuviera en una terminal de Windows.
⚠️ Peligro de seguridad:
Debido a que permite ejecución remota de comandos, xp_cmdshell
es una función peligrosa y suele estar deshabilitada por defecto en SQL Server por razones de seguridad.
📌 Procedimiento Almacenado Extendido en Microsoft SQL Server
Un Procedimiento Almacenado Extendido (Extended Stored Procedure, XP) es una función especial en SQL Server que permite ejecutar código nativo del sistema operativo (C/C++) directamente desde SQL Server.
Estos procedimientos permiten a SQL Server interactuar con el sistema operativo, ejecutar comandos externos y acceder a funcionalidades avanzadas fuera del alcance de T-SQL tradicional.
📌 Procedimiento almacenado y procedimiento almacenado extendido en SQL Server
Un Procedimiento Almacenado (Stored Procedure) es un conjunto de instrucciones SQL predefinidas que se pueden ejecutar con un solo comando. Es como un script predefinido dentro del servidor que se puede reutilizar múltiples veces.
Ejemplo de un procedimiento almacenado en SQL Server:
CREATE PROCEDURE ObtenerUsuarios
AS
BEGIN
SELECT * FROM Usuarios;
END;
Luego, se ejecuta así:
EXEC ObtenerUsuarios;
Ventajas de los procedimientos almacenados: - Mejor rendimiento (se compilan y almacenan en caché). - Reutilización del código. - Mayor seguridad (pueden restringirse permisos).
📌 ¿Qué es un Procedimiento Almacenado Extendido?
Un Procedimiento Almacenado Extendido (Extended Stored Procedure) es una versión especial que permite a SQL Server ejecutar funciones externas del sistema operativo, generalmente mediante archivos DLL.
Diferencia clave: 🔹 Procedimientos almacenados normales → Ejecutan solo comandos SQL. 🔹 Procedimientos almacenados extendidos → Se comunican con el sistema operativo
Por ejemplo xp_cmdshell
es un procedimiento almacenado extendido, porque permite ejecutar comandos del sistema operativo desde SQL Server. En cambio sp_configure
no es un procedimiento almacenado extendido porque solo modifica configuraciones internas de SQL Server y no interactúa directamente con el sistema operativo.
Last updated