【问题标题】:Where does the "payload" in the "payload.encoded" come from in a metasploit's exploit?“payload.encoded”中的“payload”在 metasploit 的漏洞利用中来自哪里?
【发布时间】:2014-03-15 21:36:28
【问题描述】:

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

【问题讨论】:

  • 实际的有效载荷由较低级别生成和编码,即。例如,Msf::Exploit::RemoteMsf::EncodedPayload。使用payload.encoded,您只需获得该过程的结果。
  • 谢谢,但该代码中是否有任何值被 payload.encoded 用于编码?

标签: ruby exploit metasploit


【解决方案1】:

所以,它是 Ruby,漏洞利用类派生自 Msf::Exploit::Remote,而那又来自 msf/core。浏览一下代码进入lib/msf/core.rb,并看到它需要来自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拉取payload

回到最初的漏洞利用,我们看到它是用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,

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

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

【讨论】:

  • 我很抱歉“不接受”答案,但我遇到了一些网页(herehere),上面说 BadChars 是有效负载应该的字符列表 包含。所以,我仍然不确定payload 包含什么。
  • 嗬嗬,好收获。在encoded_pa​​yload.rb 中寻找更多内容,我显然没有仔细研究它。我的猜测是,有效载荷要么是动态生成的,要么是卡在某个地方的固定文件中
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 2013-06-28
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多