C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程

前言:有时候远程服务器的进程你想偷偷去围观一下有哪些,或者对一些比较调皮的进程进行封杀,或者对一些自己研发的服务进行远程手动启动或者重启等,又不想打开远程桌面,只想悄咪咪地执行,那也许下面的文章会对你有启发。

前提条件

  1. 确保远程服务器(服务端)已启用WinRM。在远程服务器上运行以下命令可以启用和配置WinRM:

winrm quickconfig

0

  1. 确保执行远程命令的客户端和服务器之间的防火墙规则允许WinRM通信(默认使用端口5985和5986)。
  2. 本地客户端网络,需要设置为专用网络

打开设置:

点击开始按钮,然后选择“设置”(齿轮图标)。

访问网络和互联网设置:

在设置菜单中,选择“网络和互联网”。

更改网络属性:

在“状态”下,点击“属性”(可能需要先选择你的网络连接,如Wi-Fi或以太网)。

找到“网络配置文件”部分,将其从“公用”更改为“专用”。

0

管理员权限打开本地power shell,并按照上面服务端的同样配置启用WinRM

0

配置TrustedHosts

本地客户端,在管理员权限下,执行以下命令,使得客户端信任远程主机的连接。远程服务器IP替换为你自己的服务端IP。

winrm set winrm/config/client '@{TrustedHosts="远程服务器IP"}'

0

确认远程服务器的身份验证设置

在远程服务器上,确保WinRM配置允许你选择的身份验证类型。如果你是通过HTTP连接,那么常用的身份验证方法包括Basic和Negotiate。可以在远程服务器上运行以下命令来检查WinRM的身份验证配置:

winrm get winrm/config/service/Auth

确保你使用的身份验证方法(如Basic)被设置为true。如果不是,你需要在远程服务器上开启该身份验证方法:

winrm set winrm/config/service/Auth @{Basic="true"}

注意:使用Basic身份验证时,Basic身份验证会明文传送密码。

服务器端执行:

0

创建控制台程序,引用包 System.Management.Automation

0

新建一个获取所有远程服务器进程的方法

public static void ExecuteRemoteCommand(string remoteComputer, string userName, string password, string command){WSManConnectionInfo connectionInfo = new WSManConnectionInfo();connectionInfo.ComputerName = remoteComputer;connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password));using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)){runspace.Open();using (PowerShell ps = PowerShell.Create()){ps.Runspace = runspace;ps.AddScript(command);Collection<PSObject> results = ps.Invoke();foreach (var result in results){Console.WriteLine(result);}}runspace.Close();}}

command参数可选:

Get-Process:获取进程列表

Stop-Process:关闭进程

Start-Process:启动进程

传入用户名密码和IP,并提供获取进程列表命令。

0

打开远程桌面,并启动程序,设置断点,可以看到获取到的进程列表。

0

远程通过进程ID关闭指定名称的进程

public static void StopRemoteProcessByName(string remoteComputer, string userName, string password, string processName){WSManConnectionInfo connectionInfo = new WSManConnectionInfo();connectionInfo.ComputerName = remoteComputer;connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password));using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)){runspace.Open();using (PowerShell ps = PowerShell.Create()){// 获取进程IDps.Runspace = runspace;ps.AddScript($"$proc = Get-Process -Name {processName}; if ($proc) {{$proc.Id}}");// 执行并获取进程IDvar results = ps.Invoke();if (ps.HadErrors){Console.WriteLine("Error retrieving process ID");return;}// 如果找到了进程,关闭它if (results.Count > 0){int processId = (int)results[0].BaseObject;ps.Commands.Clear();ps.AddScript($"Stop-Process -Id {processId} -Force");ps.Invoke();if (ps.HadErrors){Console.WriteLine("Error stopping process");}else{Console.WriteLine($"Process {processName} with ID {processId} stopped successfully.");}}else{Console.WriteLine("No such process found.");}}runspace.Close();}}

远程服务器打开一个记事本,查看记事本进程名称和id分别是notepad 和 2724

0

传入参数,执行程序

0

获取到notepad进程ID为2724,并且成功被关闭

0

远程启动进程,通过WinRM启动的进程通常运行在一个服务会话中,而不是在启动它的用户的会话中。因此,这限制了图形用户界面(GUI)程序的显示。但是针对于远程启动一些后台服务,确是可以的。但是具有GUI交互的程序,却没办法打开GUI界面,会在一小段时间以后自动销毁。

public static void StartRemoteProcess(string remoteComputer, string userName, string password, string processName){WSManConnectionInfo connectionInfo = new WSManConnectionInfo();connectionInfo.ComputerName = remoteComputer;connectionInfo.Credential = new PSCredential(userName, ConvertToSecureString(password));using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)){runspace.Open();using (PowerShell ps = PowerShell.Create()){ps.Runspace = runspace;ps.AddScript($"$process = Start-Process {processName} -PassThru; $process.Id");var results = ps.Invoke();if (ps.HadErrors){Console.WriteLine("Error starting process");}else if (results.Count > 0){Console.WriteLine($"Process started successfully. Process ID: {results[0]}");}}runspace.Close();}}

如果以上代码还不能满足你的好奇心,想要我本地测试的源码demo,可以在我的公众号【Dotnet Dancer】后台回复:【进程操控】  即可获取我的本地demo源码自行调试和把玩。

【备注】最近园子里面图片容易挂,如果挂掉了,可以查阅我发表其他地方的文章:https://mp.weixin.qq.com/s/-r9QQkvtBrTrReL5AQDNGQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用pycrypt加密工具测试反病毒产品的检测性能

关于pycrypt pycrypt是一款基于Python 3语言开发的加密工具&#xff0c;广大研究人员可以使用该工具来尝试绕过任意类型的反病毒产品&#xff0c;以检测目标反病毒产品的安全性能。 功能介绍 1、目前已知反病毒产品检测率为0/40&#xff1b; 2、支持绕过任意EDR解决方案&#…

202206青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 有如下 Python 程序, 包含 lambda 函数, 运行该程序后, 输出的结果是? ( ) g = lambda x,y:x*yprint(g(2,3))A :2 B :3 C :6 D :8 正确答案:C 试题解析: g = lambda x, y: x*y, lambda 函数返回参数 x 和 y 的积, 因此选 C。 第 2 题 【单选…

深入理解Spring的TransactionSynchronizationManager

在Spring框架中&#xff0c;TransactionSynchronizationManager扮演着事务同步管理的核心角色&#xff0c;它不仅负责跟踪当前活动事务的状态&#xff0c;还提供了在事务生命周期中注册回调方法的能力&#xff0c;使得开发者能够在事务开始、提交、回滚等关键时刻执行自定义逻辑…

中间件-------RabbitMQ

同步和异步 异步调用 MQ MQ优势&#xff1a;①服务解耦 ②异步调用 ③流量削峰 结构 消息模型 RabbitMQ入门案例&#xff0c;实现消息发送和消息接收 生产者&#xff1a; public class PublisherTest {Testpublic void testSendMessage() throws IOException, TimeoutExce…

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…

PyQt6--Python桌面开发(34.QStatusBar状态栏控件)

QStatusBar状态栏控件 self.statusBar.showMessage(q.text()菜单选项被点击了,5000)

泛型擦除带来的问题有哪些

泛型擦除&#xff08;Type Erasure&#xff09;在Java中是一个重要的概念&#xff0c;它是Java泛型实现的一部分&#xff0c;用于在编译时检查类型安全&#xff0c;但在运行时取消这些类型信息以保持与旧版本Java的兼容性。然而&#xff0c;泛型擦除也带来了一些问题&#xff0…

Django模型字段

字段选项 null 如果是 True&#xff0c; Django 将在数据库中存储空值为 NULL。默认为 False。 避免在基于字符串的字段上使用 null&#xff0c;如 CharField 和 TextField。如果一个基于字符串的字段有 nullTrue&#xff0c;这意味着它有两种可能的“无数据”值。NULL&…

平安养老险陕西分公司:举办“贺司庆·员工橙心面对面”活动

为践行新价值文化与“三省”推广&#xff0c;平安养老险陕西分公司以集团36周年司庆为契机结合“员工聆听计划”指引要求&#xff0c;举办“贺司庆&#xff0c;员工橙心面对面”活动。 活动邀请西北大学公共管理学院高阳教授为分公司员工带来生动有趣的《压力管理新科学》心理课…

MyBatis-Plus 从入门到精通

MyBatis-Plus 从入门到精通 前言快速入门创建一个SpringBoot项目导入依赖配置数据库创建一个实体类创建一个mapper接口在SpringBoot启动类上配置mapper接口的扫描路径在数据库中创建表编写一个SpringBoot测试类 核心功能注解CRUD接口Mapper CRUD接口Service CRUD 接口条件构造器…

安卓开发--安卓使用Echatrs绘制折线图

安卓开发--安卓使用Echatrs绘制折线图 前期资料安卓使用Echarts绘制折线图1.1 下载 Echarts 安卓资源1.2 新建assets文件1.3 新建布局文件1.4 在布局文件中布局WebView1.5 在活动文件中调用 最终效果 前期资料 Echarts 官网样式预览: https://echarts.apache.org/examples/zh/…

phonenumbers,一个强大的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - phonenumbers。 Github地址&#xff1a;https://github.com/daviddrysdale/python-phonenumbers 在现代应用程序中&#xff0c;处理和验证电话号码是一项常见的需求。无论…

《欢乐钓鱼大师》辅助:新手钓鱼全新攻略大全!

《欢乐钓鱼大师》是一款充满趣味和挑战的钓鱼游戏。在游戏中&#xff0c;玩家不仅可以体验钓鱼的乐趣&#xff0c;还可以通过不同的钓鱼竿和鱼卡来提升自己的钓鱼技能。为了帮助新手和老玩家更好地体验游戏&#xff0c;本文将为您提供详细的游戏攻略。 1. 游戏目标 在《欢乐钓…

2024年云南特岗教师报名流程,超详细,明天就开始报名哦!

2024年云南特岗教师报名流程&#xff0c;超详细&#xff0c;明天就开始报名哦&#xff01;

【Nginx <三>⭐️⭐️⭐️】Nginx 负载均衡使用

目录 &#x1f44b;前言 &#x1f440;一、 负载均衡概述 &#x1f331;二、项目模拟 2.1 环境准备 2.2 启动多个服务器 2.3 配置 Nginx 2.4 测试配置 &#x1f49e;️三、章末 &#x1f44b;前言 小伙伴们大家好&#xff0c;前不久开始学习了 Nginx 的使用&#xff0c;在…

github加速访问及资源一秒代理下载

如果你想加速打开github网页&#xff0c;可以采用以下方法&#xff0c;仅需一个插件。 1.代理加速访问 打开gitee网站&#xff0c;搜索dev-sidecar关键字&#xff0c;然后找到星星最多的项目 可以阅读项目说明&#xff0c;找到感兴趣的内容或是直接下载DevSidecar桌面应用程序…

读书会(感悟)

书友阅读↓ Morii 5阶学习法 1.测试学习法&#xff08;先测试再学习&#xff0c;课前测试&#xff09; 【4问】 标题是什么&#xff1f; 我的观点是什么?主题是什么? 想解决的问题是什么? 【看前言➕结尾——初步看本书的逻辑?好书?】 2.指读法~细节【逻辑】 手指指着文字…

SAP-技巧篇实现GUI免密码登录

做为上千万的软件怎么会没有免密码登录呢 01 — 背景需求 如何实现SAP GUI免密码登录&#xff0c;不输入密码实现系统自动登录。 免责声明&#xff1a;谨慎设置&#xff0c;因免密登录导致数据泄密&#xff0c;作者概不负责。 02 — 实现 客户端要求&#xff1a;SAP G…

C++|动手实现strcpy、memcpy、memmove

strcpy 手写一个字符串拷贝函数: char* my_strcpy(char* dest, const char* src) {char* dest_ptr dest;while (*src ! \0) *dest_ptr *src;*dest_ptr \0;return dest; }确定好函数原型&#xff0c;函数返回目标字符串 dest 的地址&#xff0c;复制原字符串const char *sr…

069.餐饮案例:背广告词吃饭免单 餐厅年入百万

069.餐饮案例&#xff1a;背广告词吃饭免单 餐厅年入百万 时间: 2024-5-26 分类: 营销流量 作者: admin 0 次浏览 069.餐饮案例&#xff1a;背广告词吃饭免单 餐厅年入百万 背广告词吃饭免单 小餐馆巧计提人气 2007 年&#xff0c;如同许多创业者一样&#xff0c;郑州女孩韩月遭…