<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Encuentra vulnerabilidades que realmente importan para poder solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
**Microsoft SQL Server** es un sistema de gestión de bases de datos **relacionales** desarrollado por Microsoft. Como servidor de bases de datos, es un producto de software cuya función principal es almacenar y recuperar datos según lo solicitado por otras aplicaciones de software, que pueden ejecutarse ya sea en el mismo ordenador o en otro ordenador a través de una red (incluyendo Internet).
* **Base de datos model**: Se utiliza como plantilla para todas las bases de datos creadas en la instancia de SQL Server. Las modificaciones realizadas en la base de datos model, como el tamaño de la base de datos, la intercalación, el modelo de recuperación y otras opciones de la base de datos, se aplican a cualquier base de datos creada posteriormente.
* **Base de datos Resource**: Es una base de datos de solo lectura que contiene objetos del sistema que se incluyen con SQL Server. Los objetos del sistema se persisten físicamente en la base de datos Resource, pero lógicamente aparecen en el esquema sys de cada base de datos.
* **Base de datos tempdb**: Es un espacio de trabajo para mantener objetos temporales o conjuntos de resultados intermedios.
Si **no tienes credenciales**, puedes intentar adivinarlas. Puedes usar nmap o metasploit. Ten cuidado, puedes **bloquear cuentas** si fallas al iniciar sesión varias veces usando un nombre de usuario existente.
## In sqsh you need to use GO after writting the query to send it
1> select 1;
2> go
```
#### Enumeración Común
```sql
# Get version
select @@version;
# Get user
select user_name();
# Get databases
SELECT name FROM master.dbo.sysdatabases;
# Use database
USE master
#Get table names
SELECT * FROM <databaseName>.INFORMATION_SCHEMA.TABLES;
#List Linked Servers
EXEC sp_linkedservers
SELECT * FROM sys.servers;
#List users
select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create_date, sp.modify_date, case when sp.is_disabled = 1 then 'Disabled' else 'Enabled' end as status from sys.server_principals sp left join sys.sql_logins sl on sp.principal_id = sl.principal_id where sp.type not in ('G', 'R') order by sp.name;
#Create user with sysadmin privs
CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!'
1.**Securable:** Estos son los recursos a los cuales el sistema de autorización de SQL Server Database Engine controla el acceso. Hay tres categorías más amplias bajo las cuales se puede diferenciar un securable:
* Servidor – Por ejemplo bases de datos, inicios de sesión, puntos finales, grupos de disponibilidad y roles de servidor
* Base de datos – Por ejemplo rol de base de datos, roles de aplicación, esquema, certificado, catálogo de texto completo, usuario
* Esquema – Por ejemplo tabla, vista, procedimiento, función, sinónimo
2.**Permiso:** Cada securable de SQL Server tiene permisos asociados como ALTER, CONTROL, CREATE que pueden ser otorgados a un principal. Los permisos se gestionan a nivel de servidor utilizando inicios de sesión y a nivel de base de datos utilizando usuarios.
3.**Principal:** La entidad que recibe permiso para un securable se llama principal. Los principales más comunes son los inicios de sesión y los usuarios de base de datos. El acceso a un securable se controla otorgando o denegando permisos o añadiendo inicios de sesión y usuarios a roles que tienen acceso.
Ten en cuenta que para poder ejecutar comandos no solo es necesario tener **`xp_cmdshell`** **habilitado**, sino también tener el permiso **EXECUTE en el procedimiento almacenado `xp_cmdshell`**. Puedes obtener quién (excepto los sysadmins) puede usar **`xp_cmdshell`** con:
[**Lee este post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **para encontrar más información sobre cómo abusar de esta característica:**
Para escribir archivos usando `MSSQL`, **necesitamos habilitar** [**Procedimientos de Automatización Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), lo cual requiere privilegios de administrador, y luego ejecutar algunos procedimientos almacenados para crear el archivo:
Por defecto, `MSSQL` permite **leer cualquier archivo en el sistema operativo al cual la cuenta tiene acceso de lectura**. Podemos usar la siguiente consulta SQL:
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
MSSQL podría permitirte ejecutar **scripts en Python y/o R**. Este código será ejecutado por un **usuario diferente** al que usa **xp\_cmdshell** para ejecutar comandos.
Microsoft SQL Server proporciona **múltiples procedimientos almacenados extendidos** que permiten interactuar no solo con la red, sino también con el sistema de archivos e incluso con el [**Registro de Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!';
### RCE con Función Definida por el Usuario de MSSQL - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
Es posible **cargar una dll .NET dentro de MSSQL con funciones personalizadas**. Sin embargo, esto **requiere acceso `dbo`** por lo que necesitas una conexión con la base de datos **como `sa` o un rol de Administrador**.
Existen otros métodos para obtener ejecución de comandos, como agregar [procedimientos almacenados extendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [Trabajos del Agente de SQL Server](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) y [scripts externos](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
Encuentra vulnerabilidades que importan más para poder arreglarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Si a un **usuario regular** se le otorga el rol **`db_owner`** sobre la **base de datos propiedad de un usuario administrador** (como **`sa`**) y esa base de datos está configurada como **`trustworthy`**, ese usuario puede abusar de estos privilegios para **privesc** porque los **procedimientos almacenados** creados allí pueden **ejecutarse** como el propietario (**admin**).
SQL Server tiene un permiso especial, denominado **`IMPERSONATE`**, que **permite al usuario ejecutante asumir los permisos de otro usuario** o inicio de sesión hasta que se restablezca el contexto o finalice la sesión.
Si puedes suplantar a un usuario, incluso si no es sysadmin, debes verificar **si el usuario tiene acceso** a otras **bases de datos** o servidores vinculados.
Un atacante puede extraer contraseñas de SQL Server Linked Servers de las Instancias SQL y obtenerlas en texto claro, otorgando al atacante contraseñas que pueden ser utilizadas para adquirir un mayor control sobre el objetivo.
El script para extraer y descifrar las contraseñas almacenadas para los Linked Servers se puede encontrar [aquí](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Para automatizar estas configuraciones, [este repositorio](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) tiene los scripts necesarios.
Además de tener un script de powershell para cada paso de la configuración, el repositorio también tiene un script completo que combina los scripts de configuración y la extracción y descifrado de las contraseñas.
Para más información, consulta los siguientes enlaces sobre este ataque:
[Descifrando contraseñas de MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Solución de problemas de la conexión de administrador dedicado de SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
Encuentra vulnerabilidades que importan más para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
Microsoft SQL Server is a relational database management system developed by Microsoft. As a database server, it is a software product with the primary function of storing and retrieving data as requested by other software applications—which may run either on the same computer or on another computer across a network (including the Internet).
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).