Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql-

This commit is contained in:
Translator 2023-10-11 22:49:52 +00:00
parent 598420d252
commit 4ffa837468

View file

@ -107,53 +107,31 @@ When performing a penetration test on a Microsoft SQL Server (MSSQL), it is impo
Durante a realização de um teste de penetração em um servidor Microsoft SQL (MSSQL), é importante realizar uma enumeração completa do sistema alvo. A enumeração é o processo de coletar informações sobre o sistema alvo, como a versão do MSSQL sendo utilizada, os bancos de dados presentes e as contas de usuário configuradas.
The following are some common enumeration techniques that can be used during a MSSQL penetration test:
Here are some common enumeration techniques that can be used during a MSSQL penetration test:
A seguir estão algumas técnicas comuns de enumeração que podem ser usadas durante um teste de penetração MSSQL:
Aqui estão algumas técnicas comuns de enumeração que podem ser usadas durante um teste de penetração MSSQL:
##### 1. Banner Grabbing
1. **Banner Grabbing**: This technique involves connecting to the MSSQL server and capturing the banner information, which typically includes the version number. Tools like `nmap` can be used to perform banner grabbing.
Banner grabbing involves connecting to the MSSQL server and capturing the initial response from the server. This response often contains valuable information such as the version of MSSQL being used.
1. **Banner Grabbing**: Essa técnica envolve conectar-se ao servidor MSSQL e capturar as informações do banner, que normalmente incluem o número da versão. Ferramentas como `nmap` podem ser usadas para realizar o banner grabbing.
##### 1. Banner Grabbing
2. **Port Scanning**: Conducting a port scan on the target system can help identify open ports, including the default MSSQL port (1433). Tools like `nmap` or `masscan` can be used for port scanning.
O banner grabbing envolve conectar-se ao servidor MSSQL e capturar a resposta inicial do servidor. Essa resposta geralmente contém informações valiosas, como a versão do MSSQL sendo utilizada.
2. **Varredura de Portas**: Realizar uma varredura de portas no sistema alvo pode ajudar a identificar portas abertas, incluindo a porta padrão do MSSQL (1433). Ferramentas como `nmap` ou `masscan` podem ser usadas para a varredura de portas.
##### 2. Service and Port Scanning
3. **Service Detection**: Once the MSSQL port is identified, it is important to confirm that MSSQL is running on that port. Tools like `nmap` can be used to detect the MSSQL service.
Performing a service and port scan can help identify open ports and services running on the MSSQL server. Tools like Nmap can be used to scan for open ports and determine the services associated with those ports.
3. **Detecção de Serviço**: Uma vez identificada a porta do MSSQL, é importante confirmar que o MSSQL está sendo executado nessa porta. Ferramentas como `nmap` podem ser usadas para detectar o serviço MSSQL.
##### 2. Varredura de Serviço e Porta
4. **SQL Server Browser Enumeration**: If the target system has the SQL Server Browser service enabled, it can be used to enumerate the instances and ports of MSSQL running on the system. Tools like `sqlmap` can be used for SQL Server Browser enumeration.
Realizar uma varredura de serviço e porta pode ajudar a identificar portas abertas e serviços em execução no servidor MSSQL. Ferramentas como o Nmap podem ser usadas para varrer portas abertas e determinar os serviços associados a essas portas.
4. **Enumeração do SQL Server Browser**: Se o sistema alvo tiver o serviço SQL Server Browser habilitado, ele pode ser usado para enumerar as instâncias e portas do MSSQL em execução no sistema. Ferramentas como `sqlmap` podem ser usadas para a enumeração do SQL Server Browser.
##### 3. SQL Server Discovery
5. **Username Enumeration**: Attempting to enumerate valid usernames can help in further attacks, such as brute-forcing passwords. Tools like `mssql-cli` or `Metasploit` can be used for username enumeration.
Using tools like SQLPing, SQLPing2, or SQLPing3, it is possible to discover SQL servers on the network. These tools send specific SQL queries to the network and analyze the responses to identify SQL servers.
5. **Enumeração de Nomes de Usuário**: Tentar enumerar nomes de usuário válidos pode ajudar em ataques posteriores, como força bruta de senhas. Ferramentas como `mssql-cli` ou `Metasploit` podem ser usadas para a enumeração de nomes de usuário.
##### 3. Descoberta do SQL Server
Usando ferramentas como SQLPing, SQLPing2 ou SQLPing3, é possível descobrir servidores SQL na rede. Essas ferramentas enviam consultas SQL específicas para a rede e analisam as respostas para identificar servidores SQL.
##### 4. SQL Server Browser Service Enumeration
The SQL Server Browser service is responsible for providing information about SQL Server instances on the network. Enumerating this service can provide valuable information about the SQL Server instances running on the target system.
##### 4. Enumeração do Serviço SQL Server Browser
O serviço SQL Server Browser é responsável por fornecer informações sobre as instâncias do SQL Server na rede. Enumerar este serviço pode fornecer informações valiosas sobre as instâncias do SQL Server em execução no sistema alvo.
##### 5. User Enumeration
Enumerating the user accounts configured on the MSSQL server can help identify potential targets for further exploitation. Tools like Metasploit can be used to enumerate users and their associated privileges.
##### 5. Enumeração de Usuários
Enumerar as contas de usuário configuradas no servidor MSSQL pode ajudar a identificar possíveis alvos para exploração adicional. Ferramentas como o Metasploit podem ser usadas para enumerar usuários e seus privilégios associados.
By performing these common enumeration techniques, a penetration tester can gather valuable information about the MSSQL server and its configuration. This information can then be used to identify potential vulnerabilities and plan further exploitation.
Ao realizar essas técnicas comuns de enumeração, um testador de penetração pode coletar informações valiosas sobre o servidor MSSQL e sua configuração. Essas informações podem ser usadas para identificar possíveis vulnerabilidades e planejar uma exploração adicional.
By performing these common enumeration techniques, a penetration tester can gather valuable information about the MSSQL server, which can be used to plan and execute further attacks.
```sql
# Get version
select @@version;
@ -307,7 +285,7 @@ Você pode ver como usar essas ferramentas em:
### **Escrevendo Arquivos**
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 algumas stored procedures para criar o arquivo:
Para escrever arquivos usando `MSSQL`, 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 algumas stored procedures para criar o arquivo:
```bash
# Enable Ole Automation Procedures
sp_configure 'show advanced options', 1
@ -339,14 +317,12 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTE
#### Vetor baseado em erros para SQLi:
```sql
SELECT * FROM table WHERE column = 'value' AND 1=convert(int,(select top 1 column from table2)))
SELECT * FROM table WHERE column = '1' AND 1=convert(int,(select top 1 column_name from information_schema.columns where table_name='table_name'))--
```
This error-based vector for SQL injection is used to exploit vulnerabilities in Microsoft SQL Server (MSSQL). It leverages the `convert` function to force an error and extract information from the database.
Este vetor de injeção de SQL é baseado em erros e é usado para explorar vulnerabilidades de injeção de SQL em servidores Microsoft SQL Server. Ele aproveita a função `convert` para converter o resultado de uma subconsulta em um valor inteiro. O objetivo é obter informações sobre as colunas de uma tabela específica na base de dados.
To use this vector, replace `table` with the target table name, `column` with the target column name, and `value` with the desired value. The subquery `(select top 1 column from table2)` retrieves the value from the specified column in `table2`.
If the injection is successful, the query will generate an error, revealing the extracted information. This technique is effective for extracting data from MSSQL databases during penetration testing.
Para usar este vetor, substitua `table` pelo nome da tabela desejada e `column_name` pelo nome da coluna que você deseja obter informações.
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
@ -510,10 +486,30 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## Escalada de Privilégios Local
## Extraindo senhas de SQL Server Linked Servers
Um invasor pode extrair senhas de SQL Server Linked Servers das instâncias SQL e obtê-las em texto claro, concedendo ao invasor 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 Linked Servers pode ser encontrado [aqui](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Algumas configurações e requisitos devem ser feitos para que essa exploração funcione.
Primeiro, você deve ter direitos de administrador na máquina ou a capacidade de gerenciar as configurações do SQL Server.
Após validar suas permissões, você precisa configurar três coisas, que são as seguintes:
1. Habilitar o TCP/IP nas instâncias do SQL Server;
2. Adicionar um parâmetro de inicialização, neste caso, será adicionada uma flag de rastreamento, que é -T7806.
3. Habilitar a conexão de administração remota.
Para automatizar essas configurações, [este repositório](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) possui os scripts necessários.
Além de ter um script do 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.
Para mais informações, consulte os seguintes links sobre esse ataque:
[Descriptografando Senhas de Banco de Dados Link Server do MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Solução de problemas da Conexão do Administrador Dedicado do SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Escalação de Privilégios Local
O usuário que executa o servidor MSSQL terá habilitado o token de privilégio **SeImpersonatePrivilege.**\
Provavelmente você será capaz de **escalar para Administrador** seguindo uma dessas 2 páginas:
Provavelmente você poderá **escalar para Administrador** seguindo uma dessas 2 páginas:
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)