Skip to content

怎么使用 FILEFORMAT mixin 来创建文件格式 Exploit

L edited this page May 17, 2022 · 1 revision

Msf::Exploit::FILEFORMAT 是用于创建文件格式漏洞的 mixin. mixin 中实际上并没有太多, 但最重要的方法是 file_create:

使用 file_create

顾名思义, file_create 方法允许你创建文件. 你应该使用这种方法, 因为它不仅仅是将数据写入磁盘. 它所做的一件重要的事情就是它将文件创建以 #{ltype}.localpath 的格式报告给数据库, 并且文件将始终写入 Msf::Config.local_directory 中定义的 Metasploit 本地目录 (默认情况下这个路径是 ~/.msf4/local), 它使文件保持良好和有条理.

要使用 mixin, 首先在 Metasploit3 类的范围内包含 Msf::Exploit::FILEFORMAT:

include Msf::Exploit::FILEFORMAT

下面是一个使用 file_create 虚构的漏洞利用示例:

# 这是虚构的 exploit
buf = ""
buf << "A" * 1024
buf << [0x40201f01].pack("V")
buf << "\x90" * 10
buf << payload.encoded

file_create(buf)

自定义文件名

Msf::Exploit::FILEFORMAT 默认情况下, mixin 具有已注册的 FILENAME 数据存储选项, 它实际上是可选的. 如果没有提供文件名, mixin 将按以下格式设置名称: "exploit.fileformat.#{self.shortname}", 其中 self.shortname 表示模块名称的较短版本.

如果你希望设置一个默认值 (但仍可由用户更改) , 那么你只需在模块中再次注册它, 如下所示:

register_options(
  [
    OptString.new('FILENAME', [true, 'The malicious file name',  'msf.jpg'])
  ], self.class)

固定文件名

有时, 你可能根本不希望你的用户更改文件名. 一个懒惰的技巧是在运行时修改 FILENAME 数据存储选项, 但非常不推荐这样做. 事实上, 如果你这样做, 你就不会通过 msftidy. 相反, 这是正确完成的方式:

1 - 取消注册 FILENAME 选项

deregister_options('FILENAME')

2 - 接下来, 覆盖 file_format_filename 方法, 并使其返回你想要的文件名:

def file_format_filename
  'something.jpg'
end

3 - 最后, 请在模块说明中对此进行说明.

参考

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

https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/windows/local

Clone this wiki locally