Board logo

标题: [问题求助] VBS脚本getobject到底怎么用 有什么用? [打印本页]

作者: jyswjjgdwtdtj    时间: 2023-6-20 21:01     标题: VBS脚本getobject到底怎么用 有什么用?

问题1
wscript.getobject和getobject有什么区别?
问题2
getobject能获取到什么?
我看到有人可以getobject一个asp服务页
  1. set a=getobject("https://xxx.com\xx.asp")
复制代码
也有人能getobject到一个word
  1. GetObject(, "Word.Application")
复制代码
那这是获取到word的引用还是一个新的word?
和createobject有什么区别?
和getobject("word.application")有什么区别?
还有人能用getobject利用clsid创建
  1. 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格式应当为
  1. 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
  1. <?XML version="1.0"?>
  2. <scriptlet>
  3. <registration
  4.   description="Component"
  5.   progid="Component.TESTCB"
  6.   version="1.00"
  7.   classid="{20002222-0000-0000-0000-000000000002}"
  8. >
  9. </registration>
  10. <public>
  11.   <method name="exec">
  12.   </method>
  13. </public>
  14. <script language="JScript">
  15.   <![CDATA[
  16.     function exec(){
  17.       new ActiveXObject('WScript.Shell').Run('calc.exe');
  18.     }
  19.   ]]>
  20. </script>
  21. </scriptlet>
复制代码
1.vbs
  1. set a=getobject("script:[1.wsc所在的文件夹 自己填写]1.wsc")
  2. a.exec()
复制代码
winmgmts:就不说了 这里我最不懂wmi
作者: czjt1234    时间: 2023-6-22 15:00

本帖最后由 czjt1234 于 2023-6-22 15:05 编辑

WMI 就是一组COM对象,没什么特别

  1. 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")了

还有试了一下
  1. 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")
  2. a.exec()
复制代码
用文叔叔传了那个wsc 真的可以
也算是”无文件攻击“?
作者: czjt1234    时间: 2023-7-1 14:07

本帖最后由 czjt1234 于 2023-7-1 14:12 编辑
  1. Set obj = GetObject("File:C:\Users\Administrator\Desktop\1.htm")
  2. MsgBox TypeName(obj)    'HTMLDocument
  3. Set obj = GetObject("C:\Users\Administrator\Desktop\1.htm")
  4. MsgBox TypeName(obj)    'HTMLDocument
  5. Set obj = GetObject("New:{72C24DD5-D70A-438B-8A42-98424B88AFB8}")
  6. MsgBox TypeName(obj)    'IWshShell3
  7. Set obj = GetObject("New:72C24DD5-D70A-438B-8A42-98424B88AFB8")
  8. MsgBox TypeName(obj)    'IWshShell3
  9. Set obj = GetObject("New:WScript.Shell")
  10. MsgBox TypeName(obj)    'IWshShell3
  11. Set obj = GetObject("CLSID:72C24DD5-D70A-438B-8A42-98424B88AFB8")
  12. MsgBox VarType(obj)     '13 数据对象
  13. Set obj = GetObject("CLSID:{72C24DD5-D70A-438B-8A42-98424B88AFB8}")
  14. MsgBox VarType(obj)     '13 数据对象
  15. Set obj = GetObject("Script:C:\Users\Administrator\Desktop\1.wsc")
  16. MsgBox TypeName(obj)    '一个随机的CLSID
  17. obj.exec()              '该方法来自 1.wsc 中的定义
  18. Set obj = GetObject("Script:http://192.168.0.11/1.wsc")
  19. MsgBox TypeName(obj)    '一个随机的CLSID
  20. obj.exec()              '该方法来自 1.wsc 中的定义
  21. Set obj = GetObject("Script:ftp://a:Aa12345678@192.168.0.11/1.wsc")
  22. MsgBox TypeName(obj)    '一个随机的CLSID
  23. obj.exec()              '该方法来自 1.wsc 中的定义
  24. Set obj = GetObject("Winmgmts:")
  25. MsgBox TypeName(obj)    'SWbemServicesEx
  26. Set obj = GetObject("WinNT:")
  27. MsgBox TypeName(obj)    'Object
  28. Set obj = GetObject("LDAP:")
  29. MsgBox TypeName(obj)    'Object
复制代码
上述在 win7x64sp1  win10v22H2 win11v22H2 均测试通过
其中1.wsc来自5楼
数据对象应该是com对象的接口的指针,vbs不能调用指针

下列各行代码在 win7x64sp1  win10v22H2 win11v22H2 中均报语法错误
  1. Set obj = GetObject("File:http://192.168.0.11/1.wsc")
  2. Set obj = GetObject("http://192.168.0.11/1.wsc")
  3. Set obj = GetObject("File:ftp://a:Aa12345678@192.168.0.11/1.wsc")
  4. Set obj = GetObject("ftp://a:Aa12345678@192.168.0.11/1.wsc")
  5. 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