metasploit调试以及ruby入门踩坑

记录下踩的坑吧

前言

Ruby是什么,gem又是什么,Ruby on Rails又是什么,之前只是知道Ruby是一门面向对象的脚本语言,gem是有一个ruby的包管理器,好比是python的pip以及nodejs的NPM,而Ruby on Rails是一个使用Ruby语言写的开源Web应用框架,它是严格按照MVC结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少的配置。(据说Twitter就是用的这个框架)

Gem使用

Gem 是一个管理 Ruby 库和程序的标准包。Ruby gem 包的安装方式:
所有的 gem 包,会被安装到 /[Ruby root]/lib/ruby/gems/[ver]/ 目录下,这其中包括了 Cache、doc、gems、specifications 等目录,cache 下放置下载的原生 gem 包,gems 下则放置的是解压过的 gem 包。

1
2
 M0rk@hhh  ~/.rvm/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0  ls
bin build_info cache doc environment extensions gems specifications wrappers

当安装过程中遇到问题时,可以进入这些目录,手动删除有问题的 gem 包,然后重新运行 gem install [gemname] 命令即可。
Ruby Gem 命令详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 更新Gem自身
# 注意:在某些linux发行版中为了系统稳定性此命令禁止执行
$ gem update --system

# 从Gem源安装gem包
$ gem install [gemname]

# 从本机安装gem包
$ gem install -l [gemname].gem

# 安装指定版本的gem包
$ gem install [gemname] --version=[ver]

# 更新所有已安装的gem包
$ gem update

# 更新指定的gem包
# 注意:gem update [gemname]不会升级旧版本的包,此时你可以使用 gem install [gemname] --version=[ver]代替
$ gem update [gemname]

# 删除指定的gem包,注意此命令将删除所有已安装的版本
$ gem uninstall [gemname]

# 删除某指定版本gem
$ gem uninstall [gemname] --version=[ver]

# 查看本机已安装的所有gem包
$ gem list [--local]

踩坑开始

开始的时候看的是这篇文章
https://community.rapid7.com/community/metasploit/blog/2014/03/14/debugging-metasploit-modules-with-pry-debugger
但是在安装的时候报错,没有好的解决方法
这个时候我发现了这个
https://github.com/deivid-rodriguez/byebug
感觉应该是相同用途,安装没报错,然后修改rb的时候一直加载不了,这个时候想到自己有安装RubyMine,那就测试个helloworld试试看。测试的没问题,如下图:

后来发现,当添加或者修改metasploit的modules的时候,需要使用 reload_all 命令来重新加载所有的模块,但是添加了 require ‘byebug’ 时候还是报错,好像是需要rerun bundle的,rerun的时候又是各种问题,首先ruby版本太低,升级完ruby版本,bundle install的时候没错了,但是运行msfconsole还是失败…完,meatsloit弄坏了,晚上回来, /opt/metasploit-framework/embedded/framework sudo ./msfupdate 升级了一下又能用了,太晚了,明天再看看吧

0727更新:
今天又看了下资料,发现byebug还是不能用,搜索metasploit debug的资料也是很老的,但是在Stack Overflow发现了这个https://stackoverflow.com/questions/43882397/debugging-about-the-metasploit-exploit-module
就试了一下pry,果然可以和metasploit无缝使用。但是蛋疼的是pry没有step和next这种最基本的单步调试功能。

1
2
3
4
require ‘pry’ #需要pry库,否则binding.pry就不认识了
g_a = 1
g_b = 2
binding.pry #运行到这句程序就停下来并打开pry让你调试

随便找个msf的rb脚本,插上上面的代码

pry常用命令:

1
2
3
4
5
6
7
cd: 这可不是切换目录的,而是切换类。如”cd Article”会进入Article类中,”Article.all”可直接缩写为”all”
nesting: cd切来切去如果迷了路,用它可以看当前在哪个类下面。我倒觉得如果名字改为”pwd”会更好。
ls: 查看一些信息,ls -h查看帮助,ls -m查看实例方法,ls -M查看类方法,ls -p查看private方法。
show-doc Array#in_groups_of:查看文档。
show-method -l Array#in_groups_of:查看方法的源代码,-l显示行号。
edit-method Array#in_groups_of:调出nano来编辑代码,如果是能调出vim就好啦。(后来发现其实很简单,见后面。)
help:显示帮助

rvm 常用命令:

1
2
3
4
RVM是Ruby Version Manager的缩写,是一个命令行工具,它可以让你轻松地安装,管理和使用多个版本的Ruby.不同的rails项目使用等ruby和rails版本不一样的时候,可以使用RVM自由切换。
1.rvm list 查看所有的ruby版本
2.rvm current 查看当前的ruby版本
3.rvm --default use 2.x.x 切换到到版本2.x.xs

小结

1.pry-debugger在ruby2.0+已不再能使用,所以基本上可以放弃
2.pry-byebug 应该是现在在用的,但是我这里bundle install完之后,msfconsole就报错了,暂时问题还没解决,感觉应该是metasploit使用了自带的ruby以及gem的问题
3.最终还是选择了没有单步步过功能的pry
4.其实python也有这种调试工具,是pdb的模块,感兴趣的可以学习下
5.msfconsole居然是一个脚本文件,一开始以为是个二进制程序。。。(当你通过whereis找不到这个文件的时候,就很有可能是个文本文件,find找到,然后file命令看一下)
6.metasploit的ruby是自带的,可执行文件在这个目录下 /opt/metasploit-framework/embedded/bin

Reference

  1. metasploit - debug
  2. 使用pry调试程序介绍
  3. pry
  4. 如何单步调试ruby代码
  5. 乌云文章:Metasploit module开发入门篇