滲透測試神器之PowerShell入門必備
來自專欄嘶吼RoarTalk14 人贊了文章
簡介
對於滲透測試而言,PowerShell非常強大。
在這個系列文章中,我們會集中講解它的強大之處。
本文是為滲透測試員準備的PowerShell系列的第一篇,我們將從使用PowerShell執行滲透測試任務時的基礎知識講起。
PowerShell能做什麼?
微軟對PowerShell的定義如下:
PowerShell是一種基於任務的命令行解釋器和腳本環境,專為系統管理員而設計,以.NET框架為平台。Windows PowerShell幫助IT專業人員和超級用戶控制和自動化管理Windows操作系統和運行在操作系統上的應用。
不過,對於我們滲透測試員來說,PowerShell給我們提供了一個非常強大的shell和腳本環境。現在我們的滲透目標上都已經默認安裝了PowerShell(win7以後,PowerShell已經默認集成在操作系統上),這給我們提供了一個強大的後滲透利用工具,給予我們很高的許可權和廣闊的攻擊面。
PowerShell成為滲透測試的神兵利器主要有以下優點:
· 易學
· 基於.NET框架
· 操作系統信任
· 提供win系列操作系統的幾乎一切訪問許可權
· win7之後默認安裝
· 面向對象
· ISE編程介面
這就是我們使用PowerShell的原因。
注意,我們使用的版本是PowerShell v2,因為現在幾乎所有的Windows操作系統上都是這個版本。
PowerShell概覽
你可以在win7以後的任何版本上,通過快速啟動欄輸入PowerShell.exe來打開PowerShell命令行,如圖:
你也可以在PowerShell所在的目錄來直接啟動,比如:
「C:WindowsSystem32WindowsPowerShellvX.0PowerShell.exe」
路徑中的x代表的是版本號。
啟動之後我們就能看到這個美觀的PowerShell控制台了。
首先我們輸入「Get-Help」來看下幫助提示,如圖:
簡短說明
這條命令顯示Windows PowerShell的cmdlets及概念的幫助。
對於這第一篇文章,我們只講cmdlets命令。
你也可以輸入「Get-Help<關鍵詞>」來搜索特定的命令,Get-Help命令是支持通配符的。
首先我們只輸入「Get-Help」來獲取所有幫助,這將返回一個超長的幫助清單,如圖所示:
我們再試一下輸入「Get-Help *alia*」,這樣就只會返回關於「aliases」的相關命令和幫助文檔(只是一個簡單的例子):
然後我們嘗試輸入「Get-Alias」來獲取當前會話中的所有別名:
你也可以通過輸入「-Examples」來獲取指定命令的使用例子,這裡我們輸入「Get-Help -Examples」:
探索Cmdlets
Cmdlets是PowerShell的非常重要的內部命令集。
Cmdlet是以.NET類實例形式存在的命令。
它並不是簡單的可執行文件,它有很多屬性,這些屬性用來指定輸入參數或者使用管道來管理重定向。
Cmdlets可以用任何.NET語言來編寫,也可以用PowerShell腳本語言來編寫。我們可以通過輸入「Get-Command」可以顯示可用的Cmdlets命令。
現在我們輸入「Get-Command」,這將返回所有可用的命令。
另外,你也可以使用下面的命令只獲取cmdlets命令集:
「Get-Command -CommandType cmdlet」
可以看到,cmdlets命令集其實就是很多的小腳本,命令的形式就是「動詞-名詞」,比如「Start-Process」或「Stop-Process」。我們可以看到所有的動詞代表的就是不同的動作。cmdlets的命令結構圖如下所示:
你也可以輸入以下命令來獲取關於參數用法的幫助:
「Get-Help Get-Process -Parameter * | more」
一個很有用的參數是 -verb,使用這個參數,我們可以搜索基於指定動作的所有命令。
(當然也有基於命令其他部分的過濾器)
上面這個例子的意思就是使用 -verb加參數來進行搜索,我們輸入如下命令:
「Get-Command –Verb start」
結果如圖:
返回所有以start開頭的命令。
我們也可以直接輸入關鍵詞或者使用通配符來獲取信息(這個例子中我們使用通配符*rocess*來搜索),命令如下:
「Get-Command -CommandType cmdlet -Name *rocess*」
滲透中有用的cmdlets命令
在我們滲透過程中,有一些cmdlets命令確實對我們大有幫助。不過,這並不是詳盡的cmdlets命令清單,只是一些比較有意思的。
下篇文章中,我們將用例子來深度講解所有用法,不過頭兩篇文章中只是介紹PowerShell的要點知識。
第一個例子中,我們可以找到cmdlets中很有用的命令,就是start-process,這在後滲透利用中非常重要,可以用來啟動一個指定的進程。
查看start-process的幫助文檔,Get-Help Start-Process,如圖:
如圖所示就是start-process的一個實例,輸入start-process notepad.exe
這個例子中我們可以運行記事本,並且寫入InfoSec Institue Rocks:)。
我們也可以使用Get-Process命令來獲取指定的進程。
這個命令在後滲透中也很有用而且經常用到,可以用來獲取進程的ID,比如獲取資源管理器的ID,如圖:
還有一條命令是「Get-Content」,這條命令是獲取文件內容,這在滲透中的作用極其有用,就不用多說了。
圖片展示的是獲取Testit.txt里的內容
我們也能找到「Get-Location」這條命令,意思是返回當前目錄:
當然,我們也可以使用命令把結果以特殊的格式輸出,比如CSV格式(也可以輸出其他格式)。在這個例子中我們使用「Export-Csv」,可以使用管道來實現,如圖所示:
當然,這些並不是cmdlets的詳細命令清單,只是我覺得比較有用的。
根據上下文情景,任何cmdlets命令都會有作用。
最後,獻上幾條很有用的cmdlets命令。
· Copy a file: Copy-Item source_file destination_file
· Move a file: Move-Item source_file destination_file
· Get Services: Get-Service
· Formatting output: Get-Process l Format-List –property name
· Get hash (SHA1) of a file: Get-FileHash –Algorithm SHA1 file
各位大大們放心,我將在本系列第三篇文章深度詳細講解PowerShell在滲透測試中的運用,並且會結合一些實例。
總結
PowerShell是滲透測試非常趁手也非常強大的工具。
在這個系列文章和實驗里,我會嘗試著講解在滲透測試環境中PowerShell的所有基礎知識,但是不要忘了,現在最重要的就是自己在實戰中勤加練習所有常用的命令(除了我們會講解的那些),俗話說,孰能生巧,只有反覆不斷的練習,你才能完美掌握PowerShell命令並且靈活運用。
本文翻譯自:https://resources.infosecinstitute.com/powershell-for-pentesters-part-1-introduction-to-powershell-and-cmdlets/如若轉載,請註明原文地址: http://www.4hou.com/technology/12299.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※谷歌更新Gmail郵箱安全功能
※什麼是 HMAC-MD5?
※coolfire 的第一篇文章中的遠程登錄進入主機用的是win系統中的 「Telnet」 嗎?
※2016年下半年信息安全工程師考試真題含答案(下午題)