PowerShell是Microsoft開發的一種腳本語言。它提供了對Windows平臺幾乎所有內容的API訪問,不容易被檢測到,易于學習,因此對于滲透測試的后期開發過程中或payload執行的exploit開發來說非常強大。以Metasploit的[windows/smb/psexec_psh.rb](https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/smb/psexec_psh.rb) 模塊為例子.它模仿SysInternals中的psexec工具,有效載荷被壓縮并從命令行執行,這使得它對防病毒有些隱蔽.psexec_psh.rb中只有不到30行代碼(不包括描述模塊的元數據),因為大部分工作都是由Powershell mixin完成的,沒有比這更容易的了。
命令行將自動嘗試檢測正在運行的體系結構(x86或x86_64)以及它所包含的有效負載體系結構。如果存在不匹配的情況,則會生成正確的PowerShell體系結構以將有效載荷注入到內存中,因此無需擔心目標系統的體系結構。
### 要求
要使用PowerShell mixin,請確保您符合以下要求
* 目標機器支持PowerShell。Vista或更新版本應該支持它。
* 您必須擁有執行powershell.exe的權限
* 您必須能夠提供系統命令參數。
* 您必須設置命令執行類型為了執行powershell.exe攻擊
### 示例
* 添加Powershell到你的模塊,首先你需要require 它
```ruby
require 'msf/core/exploit/powershell'
```
* 然后把這個mixin包含在這個Metasploit3類的范圍內(或者對于一些是Metasploit4)
```ruby
include Msf::Exploit::Powershell
```
* 使用該`cmd_psh_payload`方法生成PowerShell payload。
```ruby
cmd_psh_payload(payload.encoded, payload_instance.arch.first)
```
```cmd_psh_payload```實際輸出是一個系統命令.它看起來像下面的格式(作為一行)
```
%COMSPEC% /B /C start powershell.exe -Command $si = New-Object
System.Diagnostics.ProcessStartInfo;$si.FileName = 'powershell.exe';
$si.Arguments = ' -EncodedCommand [BASE64 PAYLOAD] ';
$si.UseShellExecute = $false;
$si.RedirectStandardOutput = $true;$si.WindowStyle = 'Hidden';
$si.CreateNoWindow = $True;
$p = [System.Diagnostics.Process]::Start($si);
```
根據漏洞的情況,可以使用多種選項來調整最終的命令。默認情況下腳本是壓縮的,但是沒有編碼發生在。這產生了一個約2000字符的小命令(取決于有效載荷)。
其中最值得一提的是`encode_final_payload` 將完整的負載Base64編碼成一個非常簡單的命令,并且很少有壞字符。但是,命令長度會因此而增加。結合`remove_comspec`意味著有效載荷將是非常簡單的
`powershell.exe -nop -ep bypass -e AAAABBBBCCCCDDDD.....==`
在下面的api文檔確認更多的高級選項
### References
https://dev.metasploit.com/api/Msf/Exploit/Powershell.html
https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/exploit/powershell.rb
https://github.com/rapid7/metasploit-framework/blob/master/data/exploits/powershell/powerdump.ps1
- Home
- 開始使用
- 安裝metasploit開發環境
- 使用metasploit
- 使用git
- 報告一個bug
- 貢獻代碼
- 貢獻給metasploit
- 創建一個loginscans Metasploit模塊
- 接受模塊和增強功能的指導
- 常見的Metasploit模塊代碼錯誤
- 樣式提示
- metasploit提交者
- metasploit開發
- 為什么是ruby
- 樣式提示
- 如何開始寫一個exploit
- 如何開始寫一個輔助模塊
- 如何開始寫一個post模塊
- 如何開始寫一個Meterpreter腳本
- 載入外部模塊
- exploit rank
- Metasploit模塊引用標識符
- 怎么在你的exploit中確認window補丁程序級別
- 如何使用filedropper清理文件
- 如何棄用metasploit模塊
- 如何在模塊開發中報告或儲存數據
- 在metasploit如何使用日志
- 如何在metasploit對JavaScript進行混淆
- 如何解析一個http響應
- 如何使用HTTPClient發送HTTP請求
- 如何使用命令階段
- 如何使用數據儲存選項
- 如何在window后期開發中使用railgun
- 如何在exploit中使用powershell
- 如何使用PhpEXE來利用任意文件上傳漏洞
- 如何使用FILEFORMAT mixin創建一個文件格式exploit
- 如何使用BrowserExploitServer編寫一個瀏覽器exploit
- 如何使用HttpServer編寫瀏覽器exploit
- 如何編寫一個check()方法
- 如何使用Seh mixin來利用異常處理程序
- 如何在Windows上使用WbemExec進行寫入權限攻擊
- 如何使用httpserver和httpclient編寫一個模塊
- payloads如何工作
- 如何免殺
- 如何正確使用metasploit模塊