<summary><strong>Aprenda hacking AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
> **Microsoft SQL Server** é um **sistema de gerenciamento de banco de dados relacional** desenvolvido pela Microsoft. Como servidor de banco de dados, é um produto de software com a função principal de armazenar e recuperar dados conforme solicitado por outras aplicações de software - que podem ser executadas no mesmo computador ou em outro computador em uma rede (incluindo a Internet).\
* **Banco de Dados model**: Age como um modelo para cada novo banco de dados na instância do SQL Server, onde quaisquer alterações como tamanho, colação, modelo de recuperação e mais são espelhadas em bancos de dados recém-criados.
* **Banco de Dados Resource**: Um banco de dados somente leitura que abriga objetos do sistema que vêm com o SQL Server. Esses objetos, embora armazenados fisicamente no banco de dados Resource, são apresentados logicamente no esquema sys de cada banco de dados.
* **Banco de Dados tempdb**: Serve como uma área de armazenamento temporário para objetos transitórios ou conjuntos de resultados intermediários.
Se **não tiver credenciais**, você pode tentar adivinhá-las. Você pode usar nmap ou metasploit. Tenha cuidado, você pode **bloquear contas** se falhar ao fazer login várias vezes usando um nome de usuário existente.
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.**Securável:** Definido como os recursos gerenciados pelo SQL Server para controle de acesso. Estes são categorizados em:
- **Servidor** – Exemplos incluem bancos de dados, logins, endpoints, grupos de disponibilidade e funções do servidor.
- **Banco de Dados** – Exemplos abrangem funções de banco de dados, funções de aplicativo, esquema, certificados, catálogos de texto completo e usuários.
- **Esquema** – Inclui tabelas, visualizações, procedimentos, funções, sinônimos, etc.
2.**Permissão:** Associada aos securáveis do SQL Server, permissões como ALTER, CONTROL e CREATE podem ser concedidas a um principal. A gestão de permissões ocorre em dois níveis:
3.**Principal:** Este termo refere-se à entidade que recebe permissão para um securável. Os principais incluem principalmente logins e usuários de banco de dados. O controle sobre o acesso aos securáveis é exercido através da concessão ou negação de permissões ou incluindo logins e usuários em funções equipadas com direitos de acesso.
Note que, para ser capaz de executar comandos, não é apenas necessário ter o **`xp_cmdshell`** **habilitado**, mas também ter a **permissão EXECUTE no procedimento armazenado `xp_cmdshell`**. Você pode verificar quem (exceto sysadmins) pode usar o **`xp_cmdshell`** com:
[**Leia este post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **para encontrar mais informações sobre como abusar dessa funcionalidade:**
Para escrever arquivos usando `MSSQL`, nós **precisamos habilitar** [**Procedimentos de Automação Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), o que requer privilégios de administrador, e então executar alguns procedimentos armazenados para criar o arquivo:
Por padrão, o `MSSQL` permite a **leitura de arquivos em qualquer arquivo no sistema operacional ao qual a conta tenha acesso de leitura**. Podemos usar a seguinte consulta SQL:
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
O MSSQL pode permitir que você execute **scripts em Python e/ou R**. Esse código será executado por um **usuário diferente** do que está usando **xp\_cmdshell** para executar comandos.
O Microsoft SQL Server fornece **múltiplos procedimentos armazenados estendidos** que permitem interagir não apenas com a rede, mas também com o sistema de arquivos e até mesmo o [**Registro do 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!';
É possível **carregar um arquivo .NET dentro do MSSQL com funções personalizadas**. No entanto, isso **requer acesso `dbo`**, então você precisa de uma conexão com o banco de dados **como `sa` ou com uma função de Administrador**.
Existem outros métodos para obter execução de comandos, como adicionar [procedimentos armazenados estendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [Assemblies CLR](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [Trabalhos do SQL Server Agent](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) e [scripts externos](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
Se um **usuário regular** recebe a função **`db_owner`** sobre o **banco de dados de propriedade de um administrador** (como **`sa`**) e esse banco de dados está configurado como **`trustworthy`**, esse usuário pode abusar desses privilégios para **escalação de privilégios** porque **procedimentos armazenados** criados lá podem **executar** como o proprietário (**administrador**).
O SQL Server possui uma permissão especial, chamada **`IMPERSONATE`**, que **permite que o usuário em execução assuma as permissões de outro usuário** ou login até que o contexto seja redefinido ou a sessão termine.
Se você pode se passar por um usuário, mesmo que ele não seja sysadmin, você deve verificar se o usuário tem acesso a outros bancos de dados ou servidores vinculados.
## Extraindo senhas de Servidores Vinculados do SQL Server
Um atacante pode extrair senhas de Servidores Vinculados do SQL Server das Instâncias SQL e obtê-las em texto claro, concedendo ao atacante senhas que podem ser usadas para obter uma posição mais forte no alvo.
O script para extrair e descriptografar as senhas armazenadas para os Servidores Vinculados pode ser encontrado [aqui](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Para automatizar essas configurações, [este repositório](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) possui os scripts necessários.
Além de ter um script em PowerShell para cada etapa da configuração, o repositório também possui um script completo que combina os scripts de configuração e a extração e descriptografia das senhas.
[Descriptografando Senhas de Servidores de Banco de Dados MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Resolvendo problemas com a Conexão de Administrador Dedicado do SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
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>Aprenda hacking AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.