`
javayestome
  • 浏览: 1030880 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

如何在不提升用户权限的情况下,使普通用户执行sp_OACreate存储过程

阅读更多

环境需求:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

SQL Server 2005 及之后的版本

背景

在论坛上遇到一个问题,询问如何使用一个普通用户调用一个存储过程,这个存储过程使用了sp_OACreate这一系列存储过程来执行一些非常规的任务。当然,前提是普通用户只有调用这个存储过程的时候才能获得执行sp_OACreate的权限。最初的时候也没有仔细考虑,心想,sp_OACreate需要具有sysadmin固定服务器角色的成员身份才能调用,那么直接在存储过程用EXECUTE AS LOGIN将会话的执行上下文设置了一个sysadmin固定服务器角色的成员就好了吧,于是给了一段T-SQL脚本。

但随后发现是行不通的,如果要用EXECUTE AS LOGIN,调用者必须对要模拟的登录具有IMPERSONATE权限,但如果普通用户拿到了这个权限,则他可以随时使用EXECUTE AS LOGIN,没有达到“普通用户只有调用这个存储过程的时候才能获得执行sp_OACreate的权限”的控制目的。

错误的解决办法

USE master;

GO

-- 建立登录

CREATE LOGIN OA_login

WITH PASSWORD = N'Pwd.123',

CHECK_POLICY = OFF;

GO

-- 授予权限

EXEC sp_addsrvrolemember N'OA_login', N'sysadmin';

GO

-- 这个登录是内置的, 不允许登录, 这样可以减少安全隐藏

DENY CONNECT SQL

TO oa_login;

GO

-- 被调用的存储过程

USE tempdb;

GO

CREATE PROC dbo.p

AS

EXECUTE AS LOGIN = N'OA_login' ;

-- 调用sp_OACreate 的代码

--EXEC sp_OACreate;

REVERT;

GO

当试图使用普通用户调用上面的存储过程的时候,会收到如下的错误信息。

无法作为服务器主体执行,因为主体 "grant_login" 不存在、无法模拟这种类型的主体,或您没有所需的权限。

正确的解决办法

正确的解决办法是在通过存储过程的EXEUTE AS指定存储过程执行时的安全上下文,当然,这个被指定的用户要求能够调用sp_OACreate这一系列存储过程。

-- 1. 具有执行sp_OA... 权限的登录

USE master;

GO

-- 1.a. 建立登录

CREATE LOGIN OA_login

WITH PASSWORD = N'Pwd.123',

CHECK_POLICY = OFF;

GO

-- 1.b. 这个登录是内置的, 不允许登录, 这样可以减少安全隐藏

DENY CONNECT SQL

TO OA_login;

GO

-- 1.c. 因为要使用sp_OA 这一系列的存储过程, 所以在 master 中要有用户, 并具有权限

CREATE USER OA_login

FOR LOGIN OA_login

WITH DEFAULT_SCHEMA = dbo;

GRANT EXECUTE ON sys.sp_OACreate

TO OA_login;

GRANT EXECUTE ON sys.sp_OADestroy

TO OA_login;

GRANT EXECUTE ON sys.sp_OAGetErrorInfo

TO OA_login;

GRANT EXECUTE ON sys.sp_OAGetProperty

TO OA_login;

GRANT EXECUTE ON sys.sp_OAMethod

TO OA_login;

GRANT EXECUTE ON sys.sp_OASetProperty

TO OA_login;

GRANT EXECUTE ON sys.sp_OAStop

TO OA_login;

GO

-- 2. 用户数据库

USE tempdb;

GO

-- 2.a 为执行sp_OA... 权限的登录建立用户

CREATE USER OA_login

FOR LOGIN OA_login

WITH DEFAULT_SCHEMA = dbo;

GO

-- 2.b 测试存储过程

CREATE PROC dbo.p

WITH EXECUTE AS N'OA_login' -- 指定存储过程的执行时的上下文

AS

DECLARE @object int;

DECLARE @hr int;

DECLARE @src varchar(255), @desc varchar(255);

EXEC @hr = sp_OACreate 'ADODB.RecordSet', @object OUT;

IF @hr <> 0

GOTO lb_Err;

EXEC @hr = sp_OAMethod @object, 'Open', NULL, 'SELECT ServerName = @@SERVERNAME', N'Provider=SQLOLEDB.1;Integrated Security=SSPI';

IF @hr <> 0

GOTO lb_Err;

EXEC @hr = sp_OAMethod @object, 'GetRows';

IF @hr <> 0

GOTO lb_Err;

EXEC @hr = sp_OADestroy @object;

RETURN;

border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #d9d9d9; padding-bottom: 0cm; margin: 0cm 0cm 0pt; border-left:

分享到:
评论

相关推荐

    sql oacreate

    在默认情况下,此选项是禁用的,因为直接使用这些存储过程可能会对系统安全构成威胁。 **启用步骤**: ```sql USE master; EXEC sp_configure 'showadvancedoptions', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_...

    sa权限下无xp_cmdshell下取权限又一简单方法.txt

    - **权限提升**:在某些场景下可能需要将某个程序复制到特定位置来提升程序的执行权限。 - **故障排查**:在遇到系统级问题时,可以通过这种方式获取更多关于系统状态的信息。 #### 安全性考量 - **潜在风险**:...

    扩展存储过程调用失败126找不到指定模块等处理

    在SQL Server数据库管理过程中,有时会遇到扩展存储过程调用失败的情况,错误代码为126,提示“找不到指定模块”。这类问题通常与扩展存储过程被非法篡改有关。本文将详细介绍如何检查这些扩展存储过程是否被篡改,...

    MSsql2005(Sa)权限执行命令总结.txt

    本文档主要汇总了与Sa权限相关的执行命令,特别是用于启用或禁用扩展存储过程以及其他高级功能的方法。这些命令对于系统管理员和技术支持人员来说非常有用,能够帮助他们更有效地管理SQL Server实例。 #### 扩展...

    合并SQL脚本文件的方法分享

    由于`sp_OACreate`在较新的SQL Server版本中已被标记为不推荐使用,因此在SQL Server 2016及更高版本中,你可能需要寻找其他替代方案,如使用外部脚本语言(如PowerShell)或SQL Server Integration Services(SSIS...

    第60天:权限提升-MY&MS&ORA等SQL数据库提权1

    在网络安全和渗透测试中,权限提升是一个关键环节,尤其是在无法利用系统级溢出漏洞时,数据库提权成为了攻击者常用的技术。本篇文章将详细讲解如何针对MY&MS&ORA等SQL数据库进行提权,以及涉及的相关知识点。 首先...

    1433解封代码[借鉴].pdf

    这些存储过程允许在SQL Server中调用外部COM对象,从而执行操作系统级别的操作,例如文件操作,这在某些情况下可能会被用来执行恶意活动,因此在安全策略中可能会被禁止。 接着,代码创建了`sp_addextendedproc`...

    sql安全设置详细解答

    对于普通用户,只需授予必要的最小权限即可,比如只允许查询数据而不允许修改数据。 6. **定期审计和监控** 定期进行安全审计和监控对于及时发现潜在的安全威胁非常重要。可以使用SQL Server内置的审计功能或...

    sql2000 利用存储过程导出excel

    标题“sql2000 利用存储过程导出excel”指的是在SQL Server 2000中使用存储过程来生成Excel文件的过程。这个技术在数据处理和分析时非常有用,因为它允许用户直接从数据库中导出数据到Excel格式,方便进一步的数据...

    1433修复资料.txt1433修复资料.txt1433修复资料.txt

    在SQL Server中,扩展存储过程是通过外部DLL(动态链接库)文件实现的一些功能,它们可以提供额外的功能,例如执行操作系统命令或调用其他应用程序等。然而,由于这些功能可能会带来安全风险,因此使用时需格外小心...

    mssql提权的一些方法.docx

    默认情况下,只有SYSADMIN服务器角色的用户才有权限执行此过程。例如,可以通过以下方式创建一个新的用户: ```sql exec master..xp_cmdshell "net user ray ray /add" ``` 这种方法需要攻击者首先获得对数据库的...

    sql2000安全设置,SA改名方法,sql2000杀锁死进程.

    在某些情况下,可能不需要完全禁用上述扩展存储过程,而是根据具体需求选择性地禁用部分功能。这种情况下可以采用以下通用型删除扩展方法: 1. **只禁用特定功能**:例如,如果只需要禁用`xp_cmdshell`的功能,可以...

    SQLserver 数据库危险存储过程删除与恢复方法

    如果这些存储过程落入恶意用户的手中,他们可能利用这些功能对系统进行破坏,因此在不需要的情况下,删除这些存储过程可以提高系统的安全性。 删除这些存储过程的步骤如下: 1. 打开SQL Server查询分析器,并以...

    MSSQL2000安全设置图文教程

    总结,MSSQL2000的安全设置涉及到多个层面,包括但不限于创建独立数据库账号、设置合适的字符集、限制用户权限、移除不安全的存储过程以及设置自动备份计划。通过这些步骤,你可以有效提升Sql server 2000的安全水平...

    sql综合利用工具一部分常用的命令

    这些工具通常包括了一系列命令行工具,允许用户执行复杂的数据库操作,如数据查询、数据修改、存储过程调用等。本文将详细介绍一些在SQL综合利用工具中常用的命令。 #### 二、常用命令详解 ##### 1. **查看系统...

    windows2003一键安全设置包下载 网站架设安全设置

    从安全角度应该让MSSQL和MYSQL必须运行在普通计算机用户权限下,而不是system用户或adm用户下,否则后果不堪设想! MYSQL设置方法: ===================================== 1. 建立用户(用计算机管理...

    1433修复提权资料

    标题与描述中的“1433修复提权资料”涉及的是在特定环境下,尤其是在SQL Server数据库管理系统中的权限提升(提权)技术。这种技术通常被用于安全研究、渗透测试或非法活动,如黑客攻击,因此在提及“无视”、“牛逼...

    【红蓝对抗】SQL Server提权1

    在SQL Server 2005及以后的版本中,为了防止滥用,对存储过程的执行进行了权限控制。攻击者可能会利用存储过程执行高级功能,如创建数据库用户、列举文件目录、执行系统命令。例如,`sp_oacreate`存储过程可以用来...

    记一次利用mssql上线1

    为绕过360安全防护,研究发现可以使用sp_oacreate存储过程来执行命令。首先,需要开启 Ole Automation Procedures 配置,然后构造无回显的命令语句,如使用DNS日志平台进行ping命令的执行判断。然而,即使使用...

Global site tag (gtag.js) - Google Analytics