滲透測試神器之PowerShell入門必備

滲透測試神器之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命令並且靈活運用。

本文翻譯自:resources.infosecinstitute.com如若轉載,請註明原文地址: 4hou.com/technology/122 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

谷歌更新Gmail郵箱安全功能
什麼是 HMAC-MD5?
coolfire 的第一篇文章中的遠程登錄進入主機用的是win系統中的 「Telnet」 嗎?
2016年下半年信息安全工程師考試真題含答案(下午題)

TAG:滲透測試 | 信息安全 |