使用RubyMine搭建metasploit-framework远程开发调试环境
考虑到很多人都是在远程主机或者虚拟机Linux环境下使用msf进行安全测试或者模块开发,因此搭建一套msf远程开发调试环境就变得十分有必要。
环境准备
- 运行Linux+msf的远程主机
- 装有RubyMine的MacOS或者Windows机器
准备IDE
在远程主机上clone一份metasploit-framework代码,用来在本地做开发,不建议直接使用/opt/metasploit-framework目录下的模块代码。
具体可参考 https://github.com/rapid7/metasploit-framework/wiki/Setting-Up-a-Metasploit-Development-Environment
RubyMine配置远程SDK
在RubyMine的Preferences => Ruby SDK and Gems下添加远程SDK。注意Ruby路径要设置为metasploit-framework安装目录下的ruby,例如:
/opt/metasploit-framework/embedded/bin/ruby
同步代码
RubyMine提供很方便的文件同步功能,可以快速的将修改完的文件同步的远程主机。
- 在Tools => Deployment => Configuration里添加远程主机为SFTP主机。在Mappings选项卡里配置目录映射关系。
-
选择Tools => Deployment => Browse Remote Host,IDE会打开远程主机文件浏览功能,选择之前git下来的metasploit-framework目录,将/lib、和/modules目录下载到本地,如下图:
设置依赖搜索路径
为了能使RubyMine正确解析依赖文件,如msf/core等,需要将lib目录设置为Load Path Root。
通过右击lib目录,选择Mark Directory as => Load Path Root,这样RubyMine可以正确解析依赖文件。
安装调整工具pry-byebug
使用metasploit-framework目录下的gem下载pry-byebug
/opt/metasploit-framework/embedded/bin/gem install pry-byebug
开始调试
测试msf/core提供的函数
在RubyMine的Project下创建Test文件夹,并通过Mark Directory as标记为Test Sources Root,如下图:
在开始测试msf框架提供的函数之前,需要将lib目录添加到环境变量LOAD_PATH中。如下示例代码。将代码拷贝到test.rb中运行。
lib = File.expand_path("../../lib", __FILE__) # 向LOAD_PATH中添加lib目录
$:.unshift(lib)
require 'msf/core'
class Test < Msf::Exploit::Remote
def initialize
super(
'Name' => 'My custom TCP scan',
'Version' => '$Revision: 1 $',
'Description' => 'My quick scanner',
'Author' => 'Your name here',
'License' => MSF_LICENSE
)
end
def hello
shellcode = rand_text_alpha_upper(10) //msf框架提供的函数
puts shellcode
end
end
t = Test.new
t.hello
使用pry-byebug调试module
参考如下代码: simple_tcp.rb。
require 'msf/core'
require 'byebug' # 加载调试工具
class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
def initialize
super(
'Name' => 'My custom TCP scan',
'Version' => '$Revision: 1 $',
'Description' => 'My quick scanner',
'Author' => 'Your name here',
'License' => MSF_LICENSE
)
register_options(
[
Opt::RPORT(12345)
], self.class)
end
def run_host(ip)
connect()
greeting = "HELLO SERVER"
sock.puts(greeting)
data = sock.recv(1024)
byebug # 在此处开始调试
print_status("Received: #{data} from #{ip}")
disconnect()
end
end
将该代码同步到远程主机后,在将该module拷贝到metasploit-framework modules目录下。运行msfconsole并use该module。
cp simple_tcp.rb /opt/metasploit-framework/embedded/framework/modules/auxiliary/scanner/
在另一个终端里运行nc监听端口
nc -l 12345
运行该module,效果如下图,程序会自动在byebug后自动停止,可使用调试命令查看各类变量信息。