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

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

阅读更多

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

SQL Server 2005 及之后的版本

背景

xp_cmdshell是一个很危险的存储过程,通过它,可以访问操作系统的资源,但有时候我们也需要使用它来实现一些特殊的处理。

从安全的角度来考虑,禁用xp_cmdsehll是最保险的,即使为了特殊目的而要求使用它,也最好能够编写一些实现这个特殊目的的用户存储过程,只在这个用户存储过程中使用xp_cmdshell,而普通用户只能使用这些用户存储过程。

正确的解决办法

下面的示例显示如何使普通用户在不具有执行存储过程xp_cmdshell的权限下,调用包含了执行xp_cmdshell代码的用户存储过程的方法。

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

USE master;

GO

-- 1.a. 建立登录

CREATE LOGIN Cmd_Login

WITH PASSWORD = N'Pwd.123',

CHECK_POLICY = OFF;

GO

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

DENY CONNECT SQL

TO Cmd_Login;

GO

-- 1.c. 因为要调用xp_cmdshell , 所以在master 中要有用户, 并具有权限

CREATE USER Cmd_Login

FOR LOGIN Cmd_Login

WITH DEFAULT_SCHEMA = dbo;

GRANT EXECUTE ON sys.xp_cmdshell

TO Cmd_Login;

GO

-- 2. 用户数据库

USE tempdb;

GO

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

CREATE USER Cmd_Login

FOR LOGIN Cmd_Login

WITH DEFAULT_SCHEMA = dbo;

GO

-- 2.b 测试存储过程

CREATE PROC dbo.p

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

AS

EXEC master.sys.xp_cmdshell 'dir c:\'

GO

-- 3. 调用存储过程的普通登录

USE master;

GO

-- 3.a 登录

CREATE LOGIN test

WITH PASSWORD = N'abc.123',

CHECK_POLICY = OFF;

GO

-- 3.b 数据库用户

USE tempdb;

GO

CREATE USER test

FOR LOGIN test;

GO

-- 3.c 执行存储过程的权限

GRANT EXECUTE ON dbo.p

TO test;

GO

-- 3.d 执行测试

EXECUTE AS LOGIN = N'test';

GO

EXEC dbo.p;

GO

REVERT;

GO

-- 4. 删除测试

DROP PROC dbo.p;

DROP USER test;

DROP USER Cmd_Login;

USE master;

DROP LOGIN test;

DROP USER Cmd_Login;

DROP LOGIN Cmd_Login;

补充说明

多数情况下,数据库的所有者是sa一类的sysadmin固定服务器角色的成员,所以在这种情况下,也可以直接指定使用数据库所有者作为存储过程执行的安全上下文。

-- 2. 用户数据库

USE tempdb;

GO

-- 2.b 测试存储过程

CREATE PROC dbo.p

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

AS

EXEC master.sys.xp_cmdshell 'dir c:\'

GO

-- 3. 调用存储过程的普通登录

USE master;

GO

-- 3.a 登录

CREATE LOGIN test

WITH PASSWORD = N'abc.123',

CHECK_POLICY = OFF;

GO

-- 3.b 数据库用户

USE tempdb;

GO

CREATE USER test

FOR LOGIN test;

GO

-- 3.c 执行存储过程的权限

GRANT EXECUTE ON dbo.p

TO test;

GO

-- 3.d 执行测试

EXECUTE AS LOGIN = N'test';

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

分享到:
评论

相关推荐

    SQL Server阻止了对组件xp_cmdshell过程的解决方案.docx

    在SQL Server中,`xp_cmdshell`是一个非常特殊的扩展存储过程,它允许数据库管理员(DBA)在服务器级别执行操作系统命令。这个过程的强大之处在于它能够直接与Windows操作系统进行交互,比如创建文件、运行批处理...

    XP_CMDSSQLSERVER扩展存储过程XP_CMDSHELL的简单应用

    XP_CMDSHELL存储过程是执行本机的CMD命令,要求系统登陆有SA权限,也就是说如果获得SQLSERVER的SA命令,那就可以在目标机为所欲为了,知名软件“流光”使用的应该也是这个存储过程来实现在目标机上的操作。

    MS SQL入侵(小心 xp_cmdshell)

    但是,如果服务器的安全配置不正确或者用户权限管理不善,那么攻击者就可能利用`xp_cmdshell`来执行任意系统命令,从而对服务器造成严重威胁。 #### 2. `xp_cmdshell`的潜在威胁 - **远程代码执行**:攻击者可以...

    sys.xp_cmdshell的使用方法,用处以及注意的几点

    `sys.xp_cmdshell`是SQL Server中的一个扩展存储过程,允许数据库管理员在服务器上执行操作系统命令。这个功能非常强大,但也极具风险,因为不恰当的使用可能会导致严重的安全问题。因此,理解如何正确使用它至关...

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

    在SQL Server环境中,当拥有最高权限(sa)但无法使用扩展存储过程`xp_cmdshell`时,可以通过其他技术实现对系统权限的获取或文件操作等功能。本文将详细介绍一种利用`sp_oacreate`和`sp_oamethod`存储过程来创建、...

    sql2005开启xp_cmdshell

    SQL Server 2005中的`xp_cmdshell`是一个存储过程,它允许执行操作系统命令并在SQL Server环境中返回结果。这个功能对于系统管理员来说非常有用,因为它可以用来进行一些自动化任务,比如文件操作、系统管理或者集成...

    sql 语句 cmd 权限

    - **`xp_cmdshell`**:这是一个扩展存储过程,它允许SQL Server执行外部程序或批处理文件,通常用于系统管理和维护任务。 - **`sp_configure`**:这是一个系统存储过程,用于更改服务器配置选项。 - **`RECONFIGURE`...

    sql 文件操作大全

    根据给定的文件信息,我们将深入探讨SQL Server中与文件操作相关的高级知识点,特别是通过扩展存储过程`xp_cmdshell`来执行系统级别的命令。`xp_cmdshell`是SQL Server的一个功能强大但潜在风险较高的特性,它允许在...

    sql server远程执行cmd命令

    `xp_cmdshell`是SQL Server提供的一种扩展存储过程,允许用户直接执行Windows命令行操作。这个过程在SQL Server中具有较高的权限,因为它可以直接与操作系统交互,因此通常被用于系统维护、数据导入导出等任务。然而...

    SQL语句增加删除系统用户

    需要注意的是,在默认情况下,`xp_cmdshell`扩展存储过程是禁用的,因此我们需要先启用它才能正常使用上述命令: 1. **开启高级选项**: ```sql -- To allow advanced options to be changed. EXEC sp_configure...

    SQL server执行DOS命令并把结果保存到数据库.rar

    在SQL Server中,有时我们需要执行...综上所述,通过`xp_cmdshell`扩展存储过程,我们可以方便地在SQL Server中执行DOS命令,并将结果存储到数据库中。然而,务必注意安全性和权限控制,确保系统的稳定和数据的安全。

    SA 沙盘模式下不用恢复xp_cmdshell和xplog70.dll也执行命令

    在数据库管理领域,特别...尽管这种方法能够实现在删除了xp_cmdshell和xplog70.dll等扩展存储过程的情况下仍可执行命令的目的,但出于安全和法律考虑,使用此技术应格外谨慎,并确保符合所有相关的安全政策和法律法规。

    1433全修复命令,用于1433端口入侵

    - **XP_CmdShell介绍**:`xp_cmdshell`是SQL Server的一个扩展存储过程,允许用户执行操作系统级别的命令。由于其强大的功能,如果被恶意使用,可能会导致严重的安全问题。 - **XP_CmdShell的启用与禁用** - **...

    如何用sql2005清除pcanywhere连接中断问题

    - **权限验证:** 在执行上述命令时,确保当前登录用户具有足够的权限来执行`xp_cmdshell`。 - **环境兼容性:** 需要注意的是,随着技术的发展,Microsoft在后续版本的SQL Server中逐渐限制了对`xp_cmdshell`的支持...

    E:\个人文档\1433手工入侵系列教程.doc

    - **修复`xp_cmdshell`不可用**:当`xp_cmdshell`被阻止或禁用时,可以通过执行特定的SQL语句来恢复,例如删除和添加扩展存储过程,或者通过`sp_configure`配置选项来启用。 4. **安全性配置**: - `sp_configure...

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

    `xp_cmdshell` 是一个非常强大的内置扩展存储过程,允许SQL Server直接执行外部命令行工具或程序。由于其潜在的安全风险,该功能默认是禁用的。下面是一些关于如何启用、配置和使用 `xp_cmdshell` 的命令: 1. **...

    mssql查询分析器操作1433访问提权.docx

    - 错误信息:未能找到存储过程"master..xp_cmdshell"或"SQL Server 阻挡了对组件'xp_cmdshell'的访问"。 - 修复方法:首先,确保存储过程不存在时使用`DROP PROCEDURE`命令删除,然后使用`DBCC ADDEXTENDEDPROC`...

    远程备份数据 sql server2008

    接下来,需要启用`xp_cmdshell`扩展存储过程,这是因为在备份过程中可能需要执行操作系统级别的命令。执行以下命令: ```sql exec sp_configure 'xp_cmdshell', 1; go RECONFIGURE; go ``` ### 二、执行远程备份...

    SQLSERVER数据库异地备份[归类].pdf

    1. **启用`xp_cmdshell`扩展存储过程**:`xp_cmdshell`是SQL Server的一个系统存储过程,允许执行操作系统命令。在进行异地备份时,可能需要执行如文件操作或网络命令,因此需要先开启`xp_cmdshell`。开启步骤如下:...

    sql 删除文件 job来删除

    根据提供的文件信息,本文将详细解释如何利用SQL Server中的扩展存储过程`xp_cmdshell`结合作业(Job)功能实现定期删除文件或文件夹的操作。这种方法主要用于自动化管理数据库服务器上的文件清理任务,确保磁盘空间...

Global site tag (gtag.js) - Google Analytics