3

我正在分析一个 metasploit 漏洞利用我试图找出第 358 行的payloadinpayload.encoded来自哪里。我是利用开发的新手,但基本的编程规则说payload应该在调用任何函数之前对其进行初始化。我没有看到payload被初始化为任何值。第 56 行有一个Payload,但它的第一个字母是大写字母,所以这是不同的(Ruby 区分大小写)。这意味着payload可能是从某个类继承的。但是,如果它继承自某个类,为什么要对其进行编码?为什么不在其中填充一个新值?特别是,我正在寻找payload编码所采用的值是什么。如果有人能帮助我理解这一点,那将是一个很大的帮助。万分感谢!

4

2 回答 2

3

所以,它是 Ruby,exploit 类派生自Msf::Exploit::Remote,而那个派生自msf/core. 浏览一下代码进入lib/msf/core.rb,看看它需要 from core/payload。打开那个文件:

https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/payload.rb

第 179 行,payload定义了一个函数,您可以看到它从return module_info['Payload'] ? module_info['Payload']['Payload'] : nil

回到最初的利用,我们看到它是用一个module_info函数和这个值初始化的:

      'Payload'        =>
        {
          'Space'    => 4096,
          # NOTE: \xff are avoided here so we can control the number of them being sent.
          'BadChars' => "\x09\x0a\x0b\x0c\x0d\x20\xff",
          'DisableNops' =>  'True',
        },

更多的探索给了我们这个lib/msf/base/simple/payload.rb

 payload._import_extra_options(opts)
 framework = payload.framework

 # Generate the payload
 e = EncodedPayload.create(payload,

我们在 中找到EncodedPayloadlib/msf/core/encoded_payload.rb并看到它调用了generate方法,这就是设置encoded方法的原因。在该文件中多浏览一下,我们就找到了encode生成该文件的方法。编码器是从“兼容编码器”列表中提取的,这些列表显然是从平台提取的(参见https://github.com/rapid7/metasploit-framework/blob/f0fd2f05983083d84d635d8689237151663902e5/lib/msf/core/payload.rb#L413

长话短说,有效载荷来自BadChars上面,并且使用依赖于平台的编码器进行编码。

于 2014-02-16T20:08:37.203 回答
0

我没有像 A. Wilson 那样详细地查看代码。但是当我在 MetaSploit 中运行漏洞利用而不使用选择任何有效负载(可用的有效负载可以通过show payloads命令查看)时,它会在利用之前显示被选择的有效负载是reverse handler(我猜是默认有效负载)。查看 metasploit 的文件夹告诉我这个处理程序的代码可以在/opt/metasplot/apps/pro/msf3/lib/msf/core/handler

于 2014-02-18T19:16:31.160 回答