xp_cmdshell 自己收藏

 
一、简介
        xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。
 
二、安全隐患
        由于xp_cmdshell 可以执行任何操作系统命令,所以一旦SQL Server管理员帐号(如sa)被攻破,那么攻击者就可以利用xp_cmdshell 在SQL Server中执行操作系统命令,如:创建系统管理员,也就意味着系统的最高权限已在别人的掌控之中。
 
三、SQL Server 2005中的xp_cmdshell
        由于存在安全隐患,所以在SQL Server 2005中, xp_cmdshell 默认是关闭的。
        此时,如果执行 xp_cmdshell 将会提示服务未开启:
 
        exec xp_cmdshell 'dir c:\'

消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

四、开启xp_cmdshell
        打开外围应用配置器—>
        功能的外围应用配置器—>
        实例名\Database Engine\xp_cmdshell—>
        启用

        或运行   sp_configure   系统存储过程来启用它,如下面的代码示例所示:   
 1 None.gif   --    To   allow   advanced   options   to   be   changed.   
 2 None.gif    EXEC    sp_configure    ' show   advanced   options ' ,    1    
 3 None.gif   GO    
 4 None.gif   --    To   update   the   currently   configured   value   for   advanced   options.   
 5 None.gif    RECONFIGURE    
 6 None.gif   GO    
 7 None.gif   --    To   enable   the   feature.   
 8 None.gif    EXEC    sp_configure    ' xp_cmdshell ' ,    1    
 9 None.gif   GO    
10 None.gif   --    To   update   the   currently   configured   value   for   this   feature.   
11 None.gif    RECONFIGURE    
12 None.gif   GO    
13 None.gif
 
五、使用xp_cmdshell
        显示C盘根目录下的所有目录和文件:
 
        exec xp_cmdshell 'dir c:\'
 
output
------------------------------------------------------------------------
 驱动器 C 中的卷没有标签。
 卷的序列号是 F8C5-1B8C
NULL
 c:\ 的目录
NULL
2007-01-29  14:08                 0 AUTOEXEC.BAT
2007-01-29  14:08                 0 CONFIG.SYS
2007-01-29  14:20    <DIR>          dell
2007-01-29  14:13    <DIR>          Documents and Settings
2007-07-11  09:57    <DIR>          Inetpub
2007-07-11  14:31    <DIR>          Program Files
2007-06-07  07:35    <DIR>          TEMP
2007-07-05  15:08             1,506 testout.txt
2007-07-05  15:10             1,506 testout01.txt
2007-07-11  13:32    <DIR>          WINDOWS
2007-01-29  14:09    <DIR>          wmpub
2007-06-25  15:00    <DIR>          ~CUL2
               4 个文件          3,012 字节
               8 个目录    420,556,800 可用字节
NULL
(20 行受影响)








附:一个使用例子

方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
  @srvname    varchar (30),
  @login      varchar (30),
  @password    varchar (30),
  @dbname      varchar (30),
  @tbname      varchar (30),
  @colname    varchar (30),
  @filename    varchar (30),
  @whereclause varchar (40),
  @direction  char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
        'textcopy /S ' + @srvname +
        ' /U ' + @login +
        ' /P ' + @password +
        ' /D ' + @dbname +
        ' /T ' + @tbname +
        ' /C ' + @colname +
        ' /W "' + @whereclause +
        '" /F ' + @filename +
        ' /' + @direction
EXEC master..xp_cmdshell @exec_str 

2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)    -- 必须的,且不是null
insert 表名 values(2,0x)    -- 必须的,且不是null
go

3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2

go

4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go

如果报textcopy不是可执行文件的话,你就到
C:\Program Files\Microsoft SQL Server\MSSQL\Binn
目录下拷备 textcopy.exe到:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn


转载于:https://www.cnblogs.com/shineboy1219/archive/2007/08/02/840342.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server的xp_cmdshell是一种在数据库中执行操作系统级命令的功能。然而,xp_cmdshell也被黑客滥用,用于进行SQL Server注入攻击。 xp_cmdshell注入是一种利用SQL Server的xp_cmdshell的漏洞,通过构造恶意SQL语句来执行任意操作系统命令。攻击者可以将自己的恶意脚本嵌入到SQL查询中,并在成功执行攻击后,实现对操作系统的非授权访问。 为了防止xp_cmdshell注入,我们可以采取以下措施: 1. 最佳实践规范:在部署SQL Server时,应遵循最佳实践并限制对xp_cmdshell的使用。只有授权用户才能使用xp_cmdshell,并最小化对其的权限。 2. 存储过程控制:编写存储过程是一种减少xp_cmdshell注入风险的好方法。通过使用存储过程,可以在执行xp_cmdshell之前进行输入验证和参数验证,以防止恶意代码执行。 3. 输入验证:在开发和设计应用程序时,应该对用户提供的输入进行验证和过滤,以防止恶意代码或SQL注入的注入攻击。 4. 更新和补丁:及时安装SQL Server的更新和补丁是防止xp_cmdshell注入的关键。这些更新和补丁将修复已知的漏洞,并加强系统的安全性。 5. 审计和监控:配置SQL Server以记录和监视xp_cmdshell的使用是防止注入的另一种方法。通过实时监控xp_cmdshell的使用情况,可以及时发现和阻止潜在的注入攻击。 总之,防止xp_cmdshell注入是很重要的,我们需要采取适当措施保护SQL Server,如限制访问权限、验证输入、及时更新等。这样可以提高系统的安全性,并减少被黑客攻击的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值