JScript 创建远程脚本执行时提示:0x80040154 - 没有注册类

发布时间 2023-08-31 14:30:16作者: 小风风的博客

您可以重复使用粘贴在 Microsoft站点上的代码,并根据您的需要对其进行调整(也就是编辑远程计算机的名称和脚本的文件名):

strRemoteComputer = "RASServer01"
strWorkerScript = "MapNetworkDrive.vbs"
设置 objWshController = WScript.CreateObject("WshController")
设置 objRemoteScript = _
objWshController.CreateScript(strWorkerScript,strRemoteComputer)
objRemoteScript.Execute

不做 objRemoteScript.Status = 2
   Wscript.Sleep(100)
   Wscript.Echo "远程脚本尚未完成。"
环形

当你第一次尝试时,你会失败。

为什么?

很多原因。事实证明,此功能需要一些准备才能使用。

在四处寻找并阅读其他人为使其发挥作用所做的工作之后,我将这些想法放在一起:

  • 使用管理员帐户执行接下来描述的两个操作(如果 wscript 无法写入注册表项,它不会返回错误!)
  • 服务器和客户端上运行以下命令(有些网站建议只使用客户端,但您也需要在服务器上注册它!)
    • wscript -regserver
  • 确保客户端(目标机器)启用了以下注册表设置:
    • HKLM\SOFTWARE\Microsoft\Windows 脚本主机\ Settings\Remote=1 (Reg_SZ)

而已。现在脚本应该可以工作了。

如果您担心运行“wscript -regserver”会将此技巧置于 catch 22 部门(我们需要先远程运行一个进程来运行我们的脚本),请不要担心。“wscript -regserver”添加了一堆注册表键和值——它们也可以使用远程注册表功能添加,这根本不需要远程运行进程!

这是这些键的高级列表——如果你想要详细的值,你可以从你的测试实验室盒子上的 regshot 会话中获取它们:

  • HKLM\SOFTWARE\Classes\CLSID\{6F201542-B482-11D2-A250-00104BD35090}
  • HKLM\SOFTWARE\类\接口\{6F201541-B482-11D2-A250-00104BD35090}
  • HKLM\SOFTWARE\类\接口\{83EA33C0-CD14-11D2-A252-00104BD35090}
  • HKLM\SOFTWARE\类\接口\{8A9EA2C0-D348-11D2-A253-00104BD35090}
  • HKLM\SOFTWARE\Classes\TypeLib\{6F201540-B482-11D2-A250-00104BD35090}
  • HKLM\SOFTWARE\Classes\WSHRemote

从取证的角度来看,您需要注意这些工件:

  • 上述注册表工件(远程值 + 类条目)
  • 在用户临时目录中创建的文件 - 如果在 localhost 上启动
    • %TEMP%\wsh*.tmp
    • %TEMP%\wsh*.tmp.vbs
  • 在目标系统的 Windows 临时目录中创建的文件(如果在远程主机上启动)
    • C:\Windows\Temp\wsh*.tmp
    • C:\Windows\Temp\wsh*.tmp.vbs
  • 存在通过 svchost.exe 生成的进程 wscript.exe:
    • C:\WINDOWS\system32\wscript.exe -嵌入

在事件日志方面,我看到的唯一活动是安全日志中记录的一些事件:

  • 4672:分配给新登录的特殊权限。
  • 4624: 一个帐户已成功登录。
  • 4634:帐户已注销。

因此,在短时间内看到这个三连音可能是使用这种技术进行横向运动的一个很好的指标。

还有一点。由于您可以在 localhost 上使用此技巧,因此它可用于破坏进程树(如 EDR 解决方案所见),并可能逃避一些沙盒分析(进程不直接由分析的样本或其子进程产生)有时会被忽略,除非沙盒知道规避技巧并监视其使用)。

使用 WSHController/WSHRemote 对象(IWSHController 和 IWSHRemote 接口)进行横向移动