PowerShell中怎么绕过访问限制

发布时间:2021-07-24 13:59:00 作者:Leah
来源:亿速云 阅读:165

本篇文章为大家展示了PowerShell中怎么绕过访问限制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

首先,我们为什么不适用powershell.exe来执行我们的.ps1脚本呢?因为PowerShell脚本跟C#一样,它们两个对于.NET框架而言,都只是“前端”方面的东西,它们的本质都只是一种编程语言。不过在C#中,我们需要对程序代码进行编译才可以使用和执行,即编译型语言,这是它和PowerShell这种解释型脚本语言有很大区别。

鉴于PowerShell.exe只是.NET程序集“system.management.automation”的解释器,因此它应该可以在C程序中与这个对象进行交互并执行.ps1脚本。

下面给出的就是实例代码:

using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; using System.IO;using System;using System.Text;namespace PSLess{ class PSLess {   static void Main(string[] args)   {     if(args.Length ==0)         Environment.Exit(1);     string script=LoadScript(args[0]);     string s=RunScript(script);     Console.WriteLine(s);     Console.ReadKey();   } private static string LoadScript(string filename)  {    string buffer ="";   try {    buffer = File.ReadAllText(filename);    }   catch (Exception e)    {      Console.WriteLine(e.Message);     Environment.Exit(2);    }  return buffer; } private static string RunScript(string script)  {     Runspace MyRunspace = RunspaceFactory.CreateRunspace();    MyRunspace.Open();    Pipeline MyPipeline = MyRunspace.CreatePipeline();     MyPipeline.Commands.AddScript(script);    MyPipeline.Commands.Add("Out-String");    Collection<PSObject> outputs = MyPipeline.Invoke();    MyRunspace.Close();   StringBuilder sb = new StringBuilder();    foreach (PSObject pobject in outputs)    {        sb.AppendLine(pobject.ToString());    }    return sb.ToString();   } }}

其中的RunScript()方法会创建一个“runspace”对象,我们可以将其视作是PowerShell运行时的一个独立实例。接下来,我们需要将脚本添加到新创建的pipeline中,并对通信信道进行排序,最后通过Invoke()方法执行我们的脚本命令。

最终的结果将会被追加到我们的字符串生成器中,然后作为字符串发回给调用函数,以便显示在控制台的输出结果中。这也就是为什么我们要在命令中添加“Out-String”的原因。

怎么样,整个过程很简单吧?

接下来,我们需要对代码进行编译并完成代码测试。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe/reference:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\system.management.automation.dll /out:c:\setup\powerless.exe c:\scripts\powersless.cs

请记住,具体的执行路径需要取决于目标系统中所安装的框架版本。除此之外,别忘了添加对“system.management.automation.dll”程序集的引用。

如果一切正常的话,我们就已经完成了代码的编译。接下来,创建一个简单地测试脚本:

test.ps1:echo "Hello from powershell-less"echo "PID: $pid"

然后运行该脚本:

PowerShell中怎么绕过访问限制

上述内容就是PowerShell中怎么绕过访问限制,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. Powershell: powershell 整理桌面文件
  2. 怎么在Nginx中配置访问限制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

powershell

上一篇:php中的session劫持和防范的方法

下一篇:thinkphp下MySQL数据库读写分离的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》