我正在分析一个metasploit漏洞here,我试图找出payload
中payload.encoded
来自第358行的位置。我是开发但基本编程的新手规则说在调用任何函数之前应该初始化payload
。我没有看到payload
被初始化为任何值。第56行有一个Payload
,但它的第一个字母表是大写字母,因此它有所不同(Ruby区分大小写)。这意味着payload
可能是从某个类继承而来的。但如果它继承自某些类为什么编码呢?为什么不填写新的价值呢?特别是,我正在寻找payload
进行编码的价值。如果有人能帮助我理解这一点,那将是一个很大的帮助。万分感谢!
答案 0 :(得分:2)
所以,它是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
拉出有效负载
回到最初的漏洞,我们看到用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,
我们在EncodedPayload
中找到了lib/msf/core/encoded_payload.rb
,并看到它调用了generate
方法,这就是设置encoded
方法的方法。在该文件中稍微查看一下,我们找到了用于生成该文件的encode
方法。编码器是从“兼容编码器”列表中提取的,这些编码器显然是从平台上拉出来的(见https://github.com/rapid7/metasploit-framework/blob/f0fd2f05983083d84d635d8689237151663902e5/lib/msf/core/payload.rb#L413)
长话短说,有效载荷来自上面的BadChars
,并且它使用与平台相关的编码器进行编码。
答案 1 :(得分:0)
我没有像A. Wilson那样详细地查看代码。但是当我在MetaSploit中运行exploit而不使用选择任何有效负载(可以使用show payloads
命令看到可用的有效负载)时,它会在利用之前显示正在选择的有效负载是reverse handler
(我猜这是默认值)有效载荷)。查看metasploit的文件夹向我展示了此处理程序的代码可以在/opt/metasplot/apps/pro/msf3/lib/msf/core/handler