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模块