标题: [问题求助] VBS脚本getobject到底怎么用 有什么用? [打印本页]
作者: jyswjjgdwtdtj 时间: 2023-6-20 21:01 标题: VBS脚本getobject到底怎么用 有什么用?
问题1
wscript.getobject和getobject有什么区别?
问题2
getobject能获取到什么?
我看到有人可以getobject一个asp服务页- set a=getobject("https://xxx.com\xx.asp")
复制代码
也有人能getobject到一个word- GetObject(, "Word.Application")
复制代码
那这是获取到word的引用还是一个新的word?
和createobject有什么区别?
和getobject("word.application")有什么区别?
还有人能用getobject利用clsid创建- Set wshshell = GetObject("new:72C24DD5-D70A-438B-8A42-98424B88AFB8")
复制代码
所以getobject到底能干啥 还能干啥 谁能解释一下
作者: czjt1234 时间: 2023-6-20 22:28
Set wshshell = GetObject("new:72C24DD5-D70A-438B-8A42-98424B88AFB8")
测试可行,这是谁想到的,牛叉啊
作者: jyswjjgdwtdtj 时间: 2023-6-21 19:03
回复 2# czjt1234
网上的getobject事例都是援引的微软那个.cad的例子 要么就是wmi
作者: jyswjjgdwtdtj 时间: 2023-6-21 20:20
问ai 搜到了一些奇奇怪怪的东西
问:
vbs,vba中的getobject函数,拥有所谓的”协议“ 如set a=getobject("new:wscript.shell") 是new协议 指新创建一个com组件 能说说协议有哪些 怎么用吗
答:
在VBScript和VBA中,GetObject函数用于获取对现有COM对象的引用。GetObject函数的语法如下:
GetObject([pathname] [, class])
其中,pathname参数是必需的,它指定要获取的COM对象的路径或名称。class参数是可选的,它指定要创建的对象的类名。
在GetObject函数中,pathname参数可以使用不同的协议来指定COM对象的路径或名称。以下是一些常见的协议:
new::使用new:协议可以创建一个新的COM对象。例如,Set obj = GetObject("new:Excel.Application")将创建一个新的Excel应用程序对象。
file::使用file:协议可以指定COM对象的路径。例如,Set obj = GetObject("file:C:\MyFolder\MyObject.dll")将获取名为MyObject.dll的COM对象。
clsid::使用clsid:协议可以指定COM对象的类标识符(CLSID)。例如,Set obj = GetObject("clsid:{00024500-0000-0000-C000-000000000046}")将获取Excel应用程序对象的引用。
progid::使用progid:协议可以指定COM对象的程序标识符(ProgID)。例如,Set obj = GetObject("progid:Excel.Application")将获取Excel应用程序对象的引用。
除了上述协议外,还可以使用其他协议来指定COM对象的路径或名称,具体取决于系统中安装的COM组件。
需要注意的是,使用GetObject函数获取COM对象时,需要确保COM对象已经注册并且可用。如果COM对象未注册或不可用,将会引发错误。
问:
经过我的搜索 我发现似乎还有script:协议 以及常用的用于获取wmi对象的winmgmts:协议 那还有什么协议呢? 你能说说它们的用法吗?
答:
是的,除了上述协议外,还有其他一些协议可以用于获取COM对象。以下是一些常见的协议及其用法:
script::使用script:协议可以在VBScript或JScript脚本中获取对当前脚本引擎的引用。例如,Set obj = GetObject("script:ActiveXObject")将获取对ActiveXObject的引用。
winmgmts::使用winmgmts:协议可以获取对WMI服务的引用,从而访问系统信息和管理功能。例如,Set obj = GetObject("winmgmts:\\.\root\cimv2")将获取对本地计算机上的WMI服务的引用。
ldap::使用ldap:协议可以获取对LDAP目录服务的引用,从而访问目录中的对象和属性。例如,Set obj = GetObject("LDAP://CN=John Smith,OU=Sales,DC=Fabrikam,DC=com")将获取名为John Smith的用户对象的引用。
http::使用http:协议可以获取对Web服务的引用,从而访问Web应用程序的功能。例如,Set obj = GetObject("http://localhost/MyWebService")将获取对名为MyWebService的Web服务的引用。
需要注意的是,不同的协议可能需要不同的参数和语法。在使用这些协议时,需要查阅相关文档以了解其具体用法。
作者: jyswjjgdwtdtj 时间: 2023-6-22 10:21
本帖最后由 jyswjjgdwtdtj 于 2023-6-23 15:59 编辑
自问自答一下
一下只是我的猜测奥 毕竟网上没有相关资料 只能靠着ai强大的搜索能力管中窥豹一下
getobject格式应当为- set obj=getobject("[协议名]:[文件名/progid/clsid……]","[progid]")
复制代码
协议名可以不填写 则会自动识别 如果是文件则是file:
第二个参数progid更像是打开方式 有的com组件支持这么"打开" 比如word.application
所以getobject("","word.application")的原理就是获取一个不存在的文件 用word打开 进而达成了获取word的目的
new协议的作用是创建新的组件对象
new:不带{},带-的clsid/progid
clsid协议 clsid:带{}-的clsid 是对已被实例化的com组件的引用
file,http,ftp……是对本地 互联网文件,服务的引用 不知道怎么用
script似乎是用来获取未注册的wscript com组件 就是sct,wsc文件 ai死说可以引用vbs文件 还能获取到全局作用域下的函数 这是不对的
wsc在网上或本地都是可以的
给个例子
1.wsc- <?XML version="1.0"?>
- <scriptlet>
- <registration
- description="Component"
- progid="Component.TESTCB"
- version="1.00"
- classid="{20002222-0000-0000-0000-000000000002}"
- >
- </registration>
-
- <public>
- <method name="exec">
- </method>
- </public>
- <script language="JScript">
- <![CDATA[
- function exec(){
- new ActiveXObject('WScript.Shell').Run('calc.exe');
- }
- ]]>
- </script>
- </scriptlet>
复制代码
1.vbs- set a=getobject("script:[1.wsc所在的文件夹 自己填写]1.wsc")
- a.exec()
复制代码
winmgmts:就不说了 这里我最不懂wmi
作者: czjt1234 时间: 2023-6-22 15:00
本帖最后由 czjt1234 于 2023-6-22 15:05 编辑
WMI 就是一组COM对象,没什么特别
- MsgBox TypeName(GetObject("", "WScript.Shell"))
复制代码
这个可以运行的么
作者: jyswjjgdwtdtj 时间: 2023-6-22 22:23
回复 6# czjt1234
不能 第二个参数就是打开方式 wscript.shell不能被打开
作者: czjt1234 时间: 2023-6-23 11:38
回复 7# jyswjjgdwtdtj
我在 win7x64sp1 win10v22H2 win11v22H2 均测试通过
作者: jyswjjgdwtdtj 时间: 2023-6-23 15:59
本帖最后由 jyswjjgdwtdtj 于 2023-6-23 19:03 编辑
回复 8# czjt1234
嗯 是我的问题 之前测试wshshell的时候打成getobject(,"wscript.shell")了
还有试了一下- set a=getobject("script:https://down.wss.show/mktz80f/b/iw/biwemktz80f?cdn_sign=1687517997-93-0-d60c7221d1bfe2febc24ac7140393597&exp=240&response-content-disposition=attachment; filename=""1.wsc""; filename*=utf-8''1.wsc")
- a.exec()
复制代码
用文叔叔传了那个wsc 真的可以
也算是”无文件攻击“?
作者: czjt1234 时间: 2023-7-1 14:07
本帖最后由 czjt1234 于 2023-7-1 14:12 编辑
- Set obj = GetObject("File:C:\Users\Administrator\Desktop\1.htm")
- MsgBox TypeName(obj) 'HTMLDocument
-
- Set obj = GetObject("C:\Users\Administrator\Desktop\1.htm")
- MsgBox TypeName(obj) 'HTMLDocument
-
- Set obj = GetObject("New:{72C24DD5-D70A-438B-8A42-98424B88AFB8}")
- MsgBox TypeName(obj) 'IWshShell3
-
- Set obj = GetObject("New:72C24DD5-D70A-438B-8A42-98424B88AFB8")
- MsgBox TypeName(obj) 'IWshShell3
-
- Set obj = GetObject("New:WScript.Shell")
- MsgBox TypeName(obj) 'IWshShell3
-
- Set obj = GetObject("CLSID:72C24DD5-D70A-438B-8A42-98424B88AFB8")
- MsgBox VarType(obj) '13 数据对象
-
- Set obj = GetObject("CLSID:{72C24DD5-D70A-438B-8A42-98424B88AFB8}")
- MsgBox VarType(obj) '13 数据对象
-
- Set obj = GetObject("Script:C:\Users\Administrator\Desktop\1.wsc")
- MsgBox TypeName(obj) '一个随机的CLSID
- obj.exec() '该方法来自 1.wsc 中的定义
-
- Set obj = GetObject("Script:http://192.168.0.11/1.wsc")
- MsgBox TypeName(obj) '一个随机的CLSID
- obj.exec() '该方法来自 1.wsc 中的定义
-
- Set obj = GetObject("Script:ftp://a:Aa12345678@192.168.0.11/1.wsc")
- MsgBox TypeName(obj) '一个随机的CLSID
- obj.exec() '该方法来自 1.wsc 中的定义
-
- Set obj = GetObject("Winmgmts:")
- MsgBox TypeName(obj) 'SWbemServicesEx
-
- Set obj = GetObject("WinNT:")
- MsgBox TypeName(obj) 'Object
-
- Set obj = GetObject("LDAP:")
- MsgBox TypeName(obj) 'Object
复制代码
上述在 win7x64sp1 win10v22H2 win11v22H2 均测试通过
其中1.wsc来自5楼
数据对象应该是com对象的接口的指针,vbs不能调用指针
下列各行代码在 win7x64sp1 win10v22H2 win11v22H2 中均报语法错误- Set obj = GetObject("File:http://192.168.0.11/1.wsc")
- Set obj = GetObject("http://192.168.0.11/1.wsc")
-
- Set obj = GetObject("File:ftp://a:Aa12345678@192.168.0.11/1.wsc")
- Set obj = GetObject("ftp://a:Aa12345678@192.168.0.11/1.wsc")
-
- Set obj = GetObject("progid:WScript.Shell")
复制代码
作者: czjt1234 时间: 2023-7-1 14:10
回复 9# jyswjjgdwtdtj
你这个语法格式哪来的?看不懂么
作者: segree 时间: 2024-7-17 23:08
求问能否GetObject("谷歌浏览器")
作者: jyswjjgdwtdtj 时间: 2024-7-18 13:22
回复 12# segree
不可以 默认情况下getobject函数的第一个参数是文件名称 即file:~
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |