您好,登錄后才能下訂單哦!
本篇文章為大家展示了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中怎么繞過訪問限制,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。