Windows远程执行

本文介绍了Windows系统下利用powershell、schtasks和wmic进行远程执行的方法,包括winrm服务远程操作、自动化脚本、远程拷贝文件、创建计划任务及wmic执行命令等。并强调了关闭不必要的远程服务和监控相关命令执行的重要性,以提高系统安全性。

Windows远程执行

前言

1、在办公环境中,利用系统本身的远程服务进行远程代码执行甚至内网穿透横向移动的安全事件是非常可怕的,因此系统本身的一些远程服务在没有必要的情况下建议关闭,防止意外发生;
2、作为安全人员,了解远程执行的方法或者原理对于防范或者事件监控也都是很有必要的;

以下只是一些简单的示例,如有不对的地方,请大家指正,我会立马修改!!!

一、利用powershell 远程执行

1、通过winrm服务进行远程操作

Get-Service WinRM ##查看winrm状态
Enable-PSREmoting -Force ##启用配置系统接收远程命令

在这里插入图片描述
防火墙规则也会多出监听端口
在这里插入图片描述
如果计算机已经加入了域,直接可以发起连接,若没有需要先做一步信任设置,然后重启winrm服务
A连接B 需要在A上面设置信任B

set-item wsman:\localhost\client\trustedhosts B主机ip ##信任设置
Restart-Service WinRM ##重启winrm服务
get-item wsman:\localhost\client\trustedhosts ##查看信任ip
clean-item wsman:\localhost\client\trustedhosts ##去掉信任ip

在这里插入图片描述
在这里插入图片描述
测试远程连接
powerShell 还提供了一个命令用来测试远程主机是否开启了远程操作服务:

test-wsman 主机IP地址 

在这里插入图片描述
创建远程连接 Session

enter-pssession -computername 主机IP -credential 主机用户名 

在这里插入图片描述
在这里插入图片描述已连接 且B主机无感知 可执行命令

Exit-PSSession 退出连接

2、自动化脚本

命令被执行了,但缺陷也很明显:需要用户输入密码,因此无法被写到脚本中进行自动化操作
使用如下办法就可以实现脚本自动化

$Username = 'xxxx'
$Password = 'yyyy'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName cd-lsr-svr -ScriptBlock { Get-Service WinRM } -credential $Cred

3、远程执行多个命令

有时候我们需要连续执行多个有关联的命令,比如后一条命令会用到前一条命令的结果。此时再使用上面的方法就不行了。需要通过 session 来处理命令之间的联系;

Invoke-Command -ComputerName myserver -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName myserver -ScriptBlock {$p.VirtualMemorySize}
$s = New-PSSession -ComputerName myserver
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}

当我们直接执行前两个命令时,由于第二个命令中的 $p 没有值,所以不能获得结果。最后两行的命令是通过同一个 session 执行的,所以它们可以共享变量,并最终获得结果;

4、远程拷贝文件

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path .\task.ps1 -Destination C:\task.ps1 -ToSession $mySession

上面的命令把本地当前目录下的 task.ps1 文件拷贝到远程主机 xxxxxx 的 C 盘根目录下。注意 Copy-Item 命令使用了一个 Session 对象作为参数,这个参数的名称为 ToSession。其实文件传递的方向就是由这个参数决定的:使用 ToSession 会把本地的文件传递到远程主机;使用 FromSession 则会把远程主机上的文件传递到本机;

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path .\PowerShell -Destination C:\PowerShell -ToSession $mySession -Recurse

注意目录拷贝操作要加上 Recurse 参数;

上面的两个操作分别是把一个文件和一个目录拷贝到远程的主机上,接下来我们要把远程主机上的文件或文件夹拷贝到本机来:

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path C:\task.ps1 -Destination F:\temp\task.ps1 -FromSession $mySession
Copy-Item -Path C:\PowerShell -Destination F:\temp -FromSession $mySession -Recurse

在这里插入图片描述

注:语言模式会影响powershell文件远程拷贝命令执行,需要将目的机器改为FullLanguage模式

$ExecutionContext.SessionState.LanguageMode = "FullLanguage"

在这里插入图片描述

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path .\task.ps1 -Destination C:\task.ps1 -ToSession $mySession  ##拷贝本地文件到目的机器
Copy-Item -Path .\PowerShell -Destination C:\PowerShell -ToSession $mySession -Recurse  ##拷贝本地目录到目的机器 
Copy-Item -Path C:\task.ps1 -Destination F:\temp\task.ps1 -FromSession $mySession ##拷贝目的机器文件到本地
Copy-Item -Path C:\PowerShell -Destination F:\temp -FromSession $mySession -Recurse    ##拷贝目的机器目录到本地

在这里插入图片描述

二、利用schtasks 远程执行

1、传输文件到目标服务器

首先确保受控端开启smb服务(445端口开放)
在这里插入图片描述建立IPC连接
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、创建计划任务运行后删除

SCHTASKS /Create /S 192.168.17.130 /U Administrator /P "######" /SC ONCE /ST 11:00 /TN test1 /TR c:\cmd.exe /RU system

在这里插入图片描述
因为防火墙规则并没有开通 文件和打印机共享的rpc-epamp规则 只开了139,445端口
rpc-epmap程序服务用于RPCSS服务的入站规则,以允许后台打印程序服务的RPC/TCP通信
在这里插入图片描述
启用规则之后 便可以远程创建定时

在这里插入图片描述
在这里插入图片描述
查看是否执行成功
此计划任务是建立一个用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除计划任务
在这里插入图片描述

三、利用wmic 远程执行

  1. 需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
  2. 远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证
  3. wmic 会以管理员权限在远程系统上执行命令
  4. 防火墙开启将无法连接
  5. 如果报错 “Invalid Global Switch” ,用双引号把包含-的结点括起来即可正常执行。
C:\Users\Administrator>wmic /node:192.168.17.131  /user:administrator /password:****** process call create "cmd.exe /c net user test1 westos /add && net localgroup administrators test1 /add"
执行(Win32_Process)->Create()
方法执行成功。
外参数:
instance of __PARAMETERS
{
        ReturnValue = 9;
};

C:\Users\Administrator>wmic /node:192.168.17.131  /user:administrator /password:****** process call create c:\cmd.exe
执行(Win32_Process)->Create()
方法执行成功。
外参数:
instance of __PARAMETERS
{
        ProcessId = 8488;
        ReturnValue = 0;
};

C:\Users\Administrator>wmic /node:192.168.17.131  /user:administrator /password:****** process call create "cmd.exe /c net user test1 westos /add"
执行(Win32_Process)->Create()
方法执行成功。
外参数:
instance of __PARAMETERS
{
        ProcessId = 8632;
        ReturnValue = 0;
};

返回值为0代表执行成功

总结

1、对于powershell的远程执行,建议用户没有必要的情况下关闭winrm服务,安全人员可检测监控此服务进程是否开启,监控 enter-pssession,Invoke-Command,new-PSSession,Copy-Item等命令执行;
2、对于schtasks的远程执行,建议用户没有必要的情况下关闭smb服务,安全人员可检测监控此服务端口是否开启,监控 net.exe,net1.exe,SCHTASKS等命令执行
3、对于wmic的远程执行,建议用户用户没有必要的情况下关闭Windows Management Instrumentation 服务(135端口),安全人员可检测监控此服务端口是否开启,监控wmic等命令执行;

<think>我们正在处理用户的问题:如何在Windows远程连接环境中执行VB脚本?用户的需求是在远程桌面连接(RDC)环境中运行VBScript(.vbs)文件。根据我们的知识,执行VBScript通常可以通过以下几种方式:1.直接在远程桌面的命令行中使用`cscript`或`wscript`命令执行。2.通过计划任务(TaskScheduler)在远程机器上执行。3.使用WindowsManagement Instrumentation (WMI)远程执行脚本。4.使用PowerShell远程执行(例如,通过Invoke-Command)。但是,用户特别提到了“远程连接环境”,所以我们假设用户已经通过远程桌面连接到了目标机器,那么最简单的方法就是在远程桌面的命令行中直接执行脚本。如果用户没有远程桌面连接,而是希望从本地机器远程执行目标机器上的脚本,那么我们需要使用WMI或PowerShell远程执行。根据引用[1]中提到的WMIObject.Create方法,我们可以使用WMI来远程创建进程执行脚本。同时,引用[3]展示了一个VBA子过程,虽然不直接相关,但表明VBScript/VBA可以操作Office和数据库,这可能是用户场景的一部分。考虑到用户问题,我们将提供两种主要场景的方法:场景一:用户已经通过远程桌面连接(RDC)登录到远程计算机。场景二:用户没有登录远程桌面,需要从本地计算机远程执行远程计算机上的VBScript。我们将分别给出步骤。注意:在远程执行脚本时,需要确保有足够的权限,并且远程计算机上的防火墙设置允许相应的远程管理操作。另外,引用[4]提供了一个命令行参考网站的链接,我们可以参考其中的命令用法。现在,我们按照用户要求的结构化方式回答。</think>### 如何在Windows远程连接环境中执行VB脚本 在Windows远程桌面连接(RDC)环境中执行VBScript(.vbs文件)主要有以下两种方法: #### 方法1:通过远程桌面直接执行 1. **连接远程计算机** 使用远程桌面连接(mstsc.exe)登录目标计算机 2. **执行VBScript** 在远程桌面的命令行中直接运行: ```cmd cscript.exe "C:\路径\脚本名.vbs" // 显示命令行输出 或 wscript.exe "C:\路径\脚本名.vbs" // 无命令行窗口 ``` > ⚠️ 需确保远程计算机已启用脚本执行权限 #### 方法2:通过WMI远程执行(无需登录) 使用Windows Management Instrumentation(WMI)从本地计算机远程触发: ```vbscript strComputer = "远程计算机名/IP" Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set objProcess = objWMIService.Get("Win32_Process") objProcess.Create "cscript.exe ""C:\远程路径\脚本.vbs""", Null, Null, intProcessID ``` > 引用[1]: WMIObject.Create(Path,Name,Type,MaximumAllowed,Description,Password,Win32_SecurityDescriptor Access)[^1] #### 关键注意事项: 1. **权限要求** - 远程执行需管理员权限 - 防火墙需开放WMI端口(默认TCP 135) - 组策略设置:`计算机配置 > 管理模板 > Windows组件 > Windows远程管理 > 允许自动配置` 2. **脚本兼容性** VBScript在Windows 10/11中默认禁用,需通过注册表启用: ```reg [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings] "Enabled"=dword:00000001 ``` 3. **替代方案** 对于新系统推荐使用PowerShell远程执行: ```powershell Invoke-Command -ComputerName 远程主机 -ScriptBlock { & "C:\脚本路径.ps1" } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值