Ruby-Metasploit的核心

Ruby编程语言可以说是Metasploit框架的核心。

根据Ruby官方网站介绍,Ruby编程语言简单而又强大,面向对象,为解释性语言,执行速度快,项目开发周期短,可以构建自动化类来重用代码是Ruby语言的一个特点,而这个特点正好满足了Metasploit的需求。

日本的松本行弘在1995年设计并实现了Ruby语言。后来它被进一步定义为功能类似与Perl语言的、具有动态特性和反射机制的、通用的面向对象(OOP)的程序设计语言。

可以从http://Rubyinstaller.org/downloads/网站下载Windows/Linux版本的Ruby。
也可通过http://tryruby.org/levels/1/challenges网站获得优秀的Ruby资源。

Ruby语言的基础知识

Ruby的交互式命令行

Ruby语言提供了一个可以进行交互的命令行。在交互式命令行上进行工作可以让我们更清楚理解Ruby的基础知识。

在CMD命令行或者终端窗口输入命令irb来启动Ruby的交互式命令行。

输入数字2:
irb(main):001:0> 2
=> 2

进行加法运算:
irb(main):002:0> 2 + 3
=> 5

对字符串操作:
irb(main):008:0> a = “Ruby”
=> “Ruby”
irb(main):009:0> b =“Metasploit”
=> “Metasploit”
irb(main):010:0> a + b
=> “Ruby Metasploit”

在命令行定义方法:

方法或者函数是一组语句,当我们调用它们时会开始执行。可以简单地在Ruby交互命令行声明一个方法,也可以在脚本里对它们进行声明。在使用Metasploit模块时,Ruby的方法是一个很重要的部分。

它的语法格式:
def method_name [([arg [= default]] … [, * arg [, &expr]])]
expr
end

要定义一个方法,首先以def开始,之后随其后的是方法的名称,然后是包含在括号内的参数和表达式。我们还将一个end声明放在表达式的最后来结束对方法的定义。这里,arg指的是方法所接收的参数,expr指的是方法接收并计算的表达式。

例如:
irb(main):002:0> def xorops(a,b)
irb(main):003:0> res = a ^ b
irb(main):004:0> return res
irb(main):005:0> end
=> :xorops

定义一个名为xoropos的方法,它接收a和b两个参数。接着对接收到的参数进行异或运算,并将结果保存到一个名为res的新变量里。最后用return语句返回结果。

Ruby的输出

Ruby语言提供了puts和print两类输出形式,可以用print_good、print_status、print_error语句来表示成功执行、状态和错误。
例如:
print_good(“Example of Print Good”)
print_error(“Example of Print Error”)
print_status(“Example of Print Status”)

当在Metasploit模块下运行这些命令时会产生如下输出,+符号并绿色显示表示正常,*符号并蓝色显示表示状态信息,-符号并红色显示表示错误信息。
[ + ]Example of Print Good
[ - ]Example of Print Error
[ * ]Example of Print Status

字符串追加

当需要在一个变量后面追加数据的时候,可以用<<运算符。

例如
irb(main):001:0> a = “Ruby”
=> “Ruby”
irb(main):002:0> a << “Metasploit”
=> “Ruby Metasploit”

子字符串函数

在Ruby里可以轻松输入substring函数来获取子字符串——只需要指明子字符串在字符串内的起始位置和长度,就可以获得它。

例如:
irb(main):001:0> a = “123678”
=> “123678”
irb(main):002:0> a[0,2]
=> “12”
irb(main):001:0> a[2,2]
=> “36”

split函数

可以输入split函数将一个字符串类型的值分割为一个变量数组。

例如:
irb(main):001:0> a = “mastering,metasploit”
=> “mastering,metasploit”
irb(main):002:0> b = a.split(",")
=> [“mastering”,“metasploit”]
irb(main):008:0> b[0]
=> “mastering”
irb(main):009:0> b[1]
=> “metasploit”

可以看到,现在已经将字符串转换成了一个新的数组b,这个数组b包括b[0]和b[1]两个元素,分别为“mastering”和“metasploit”。

Ruby的数字和转换

可以直接在算术运算里采用数字。在处理用户的输入时,可以用to_i函数将字符串类型的输入转换成整数。另一方面,也可以采用to_s将一个整数转换成字符串。

例如:
irb(main):001:0> a = “23”
=> “23”
irb(main):002:0>a.to_i + 10
=> 33

irb(main):006:0> am = 29
=> 29
irb(main):007:0> aa = “hello”
=> “hello”
irb(main):008:0> am.to_s + aa
=> “29hello”

Ruby的数值转换

在采用渗透模块和其他模块时,都将利用到各个转换机制。

16进制到10进制的转换:
例如:
irb(main):001:0> a = “10”
=> “10”
irb(main):002:0> a.hex
=> 16

10进制到16进制的转换:
例如:
和上例相反的操作可以采用to_s来实现:
irb(main):003:0> 16.to_s(16)
=> “10”

Ruby的范围

范围(range)是一个很重要的内容,广泛应用在Metasploit的辅助模块里,例如扫描模块和测试模块。

定义一个范围,并且查看一下可以对此数据类型进行哪些操作:
irb(main):002:0> zero_to_nine= 0…9
=> 0…9
irb(main):003:0> zero_to_nine.include?(4)
=>true
irb(main):004:0> zero_to_nine.include?(11)
=> false
irb(main):005:0> zero_to_nine.each{|zero_to_nine| print(zero_to_nine)}
0123456789=> 0…9
irb(main):006:0> zero_to_nine.min
=> 0
irb(main):007:0> zero_to_nine.max
=> 9

可以看到一个范围对象提供的操作,例如搜索、查找最小值和最大值,以及显示范围内的所有数据。这里的include?函数可以检查范围内是否包括某个特定的值。此外,min和max函数可以显示出范围内的最小值和最大值。

Ruby的数组

可以简单地将数组定义为一系列元素的集合。

例如:
irb(main):001:0> name = [“Ruby”,“metasploit”]
=> [“Ruby”,“metasploit”]
irb(main):002:0> name[0]
=> “Ruby”
irb(main):003:0> name[1]
=>“metasploijt”

学到这里,已经介绍了所有编写的Metasploit模块必需的变量和数据类型的相关知识。

有关变量的数据类型的更多信息,请访问:http://www.tutorialspoint.com/ruby/
有关利用Ruby编程的速查表,请参考https://github.com/savini/cheatsheets/raw/master/ruby/,再点击RubyCheat.pdf
若你现在正从别的语言向Ruby语言过渡,这有一份推荐材料:http://hyperpolyglot.org/scripting

Ruby的方法

方法为函数的另一个说法。除了Ruby程序员以外,其他背景的程序员可能经常使用这两类叫法。方法就是指能执行特定操作的子程序。方法的使用实现了代码的重用,大大缩短了程序的长度。定义一个方法很容易,在定义开始的地方使用def关键字,在结束的地方使用end关键字。

例如:
打印出50个空格:
def print_data(part1)
square = par1 * par1
return square
end
answer = print_data(50)
print(answer)

这里的print_data方法接收主函数发送过来的参数,然后让其乘以自身,再使用return将结果返回。这个程序将返回的值放到了一个名为answer的变量内,随后输出流这个值。

决策运算符

与其他任何编程语言一样,决策在Ruby里也是一个简单的概念:

例如:
irb(main):001:0> 1 > 2
=> false
同样,再来查看一个字符串数据的例子:
irb(main):005:0> “Ruby” == “ruby”
=> false
irb(main):006:0> “Ruby” == “Ruby”
=>true

来看一个利用决策运算符的简单程序:
def find_match(a)
if a =~ /Metasploit/
return true
else
return false
end
end
#主函数从这里开始
a = “128924983Metasploitduidsamerican”
bool_b=find_matcch(a)
print bool_b.to_s

在上面的这个程序里,利用了一个包含有“Metasploit” 的字符串,这个字符串里的“Metasploit”前后都添加了一些无用字符。然后将这个字符串赋值给变量a。接下来,将该变量传递给函数find_match(),这个函数的作用是检查该变量是否可以匹配正则表达式/Metasploit/。若这个变量里包含了“Metasploit”,函数的返回值就是true,否则就将false赋值给bool_b变量。

运行上面这个方法将会产生一个true,这是因为按照决策运算符=~的计算,这两个值是匹配的。
前面的程序在Windows系统环境下执行完成后,输出的结果如下:
C:\Ruby23-x64\bin>ruby.exe a.rb
true

Ruby的循环

迭代语句被称为循环。

例如:
def forl(a)
for i in 0…a
print(“Number #{i}n”)
end
end
forl(10)
上面的代码按照定义的范围从0遍历到10,实现了循环打印输出当前的值。在这里我们利用#{i}去打印输出变量i的值。关键字n指定开始了新的一行。因此,每一次打印输出变量时,都会自动占用新的一行。

迭代循环是通过each事先的。这是十分常见的做法,在Metasploit模块里被广泛采用。

例如:
def each_example(a)
a.each do |i|
print i.to_s + “t”
end
end
#主函数从这里开始
a = Array.new(5)
a = [10,20,50,90,111]
each_example(a)
在上面的代码里,定义了一个方法,这个方法接收一个数组a,然后将数组a的所有元素用each循环打印出来。利用each方法完成会将数组a里的元素临时保存到i里,一直到下一个循环时再重写这个变量的值。输出语句里的.t表示一个制表位(tab)。

有关循环的更多信息,请访问:http://www.tutorialspoint.com/Ruby/Ruby_loops.htm

正则表达式

正则表达式用来匹配一个字符串或者获取字符串在一组给定的字符串或一个句子里出现的次数。在Metasploit里,正则表达式十分关键。在编写漏洞检查工具和扫描工具以及分析某个给定端口的响应时,总会需要利用正则表达式。

看一个例子,这里的程序演示了正则表达式的使用。
有一个变量,它的值为Hello world,需要为它设计一个正则表达式。代码如下:
irb(main):001:0> n = “Hello world”
=> “Hello world”
irb(main):002:0> r = /world/
=> /world/
irb(main):003:0> r.match n
=> #<MatchData “world”>
irb(main):004:0> n =~ r
=> 6

创建另一个名为r的变量,并把正则表达式内容——/world/保存在其内。在下一行,我们用MatchData类的match对象将这个字符和正则表达式进行匹配。命令行返回了一个匹配成功的信息MatchData “world”。接下来利用另一个运算符=~来完成字符串的匹配操作,返回匹配的具体位置。例如:

irb(main):001:0> r = /^world/
=> /^world/
irb(main):002:0> n =~ r
=> nil
irb(main):003:0> r = /^Hello/
=> /^Hello/
irb(main):004:0> n =~ r
=> 0
irb(main):005:0> r = / world $/
=> / world $/
irb(main):006:0> n =~ r
=> 6

分配一个新的值/^world/给r,这里 ^运算符表示要匹配字符串的开始位置。我们得到了输出nil,这说明并没有匹配成功。我们修改这个表达式以匹配单词hello开始的字符串。这一次,系统的输出为数字0,这意味着在最开始的位置匹配成功。下一步,将正则表达式修改为/world $/,这意味着只有一个以单词world结尾的字符串才会匹配。

有关Ruby正则表达式的更多信息,请访问:http://www.tutorialspoint.com/Ruby/Ruby_regular_expressions.htm
下方的链接提供了Ruby编程语言速查卡,可以让你的编程更高效:
https://github.com/savini/cheatsheets/raw/master/Ruby/RubyCheat.pdf
http://hyperpolyglot.org/scripting

有关如何构建正确的正则表达式的更多信息:请访问:http://rubular.com

Ruby基础知识小结

可以从下面的网址获得极为优秀的Ruby编程资源:

一个丰富的Ruby语言教程资源库:
http://tutorialspoint.com/Ruby/

可以帮助你提高Ruby语言编程效率的速查表的链接:
https://github.com/savini/cheatsheets/raw/master/Ruby/RubyCheat.pdf
http://hyperpolyglot.org/scripting

有关Ruby的更多信息,请访问:http://en.wikibooks.org/wiki/Ruby_Programming

Ruby-Metasploit的核心相关推荐

  1. python perl lisp_巴别塔-编程语言之旅【转】——C、C++、Lisp、Java、Perl、Ruby、Python核心比较...

    译者:qinjian623原文作者:Steve Yegge 说明 但是由于文章内容比较和我胃口,还是决定再翻译一个版本. 巴别塔 这是我自己混乱的编程语言之旅,原本准备这个月写给ADJ(Amazon ...

  2. 1.Metasploit介绍和模块

    苑房弘课程 学习msf的笔记 Metasploit是一个非常强大的渗透测试框架 2003年有HD Moore编写的,2007 年用 ruby 语言编写 框架继承了渗透测试标准(PETS)标准 一定程度 ...

  3. Ruby/Rails 生态环境、社区、资料 Ecosystem

    Ruby/Rails 生態圈 Ecosystem 一個成功的開放原始碼程式語言和框架,背後一定有一個強大的社群在支持.團隊和個人的時間成本有限,你不可能每個用到的工具和函式庫工具都自己從頭開發.因此, ...

  4. 《Ruby程序员修炼之道》(第2版)目录—导读

    版权 Ruby程序员修炼之道(第2版) • 著 [美] David A. Black 译 钟凤鸣 陈雪静 责任编辑 杨海玲 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 ...

  5. 《Ruby程序员修炼之道》(第2版)—第1章1.4节易用的Ruby工具和应用程序

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.4节易用的Ruby工具和应用程序,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖 ...

  6. Kali Linux渗透测试 142 Mestasploit 基本使用

    本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的<Kali Linux 渗透测试>课程 Kali Linux渗透测试(苑房弘)博客记录 1. ...

  7. 《Effective-Ruby》读书笔记

    本篇是在我接触了 Ruby 很短一段时间后有幸捧起的一本书,下面结合自己的一些思考,来输出一下自己的读书笔记 前言 学习一门新的编程语言通常需要经过两个阶段: 第一个阶段是学习这门编程语言的语法和结构 ...

  8. Pocket Hacking: NetHunter实战指南

    0x00 前言 许多朋友都希望Hacking套件可以很方便的从PC移植到更便携的手机或平板电脑上,而Offensive Security团队发布的Kali NetHunter则将这一期待变为现实,通过 ...

  9. PHP 开发与代码审计(总结)

    笔者将学习PHP时的学习笔记分享出来,基本上是前面的那些博文的汇总,看起来更方便一些,笔者最近放弃了PHP代码审计部分,所以不再继续学下去了,由于精力实在达不到,只能选择一样进行发展,不想成为半瓶子醋 ...

最新文章

  1. 用标号跳出当前多重嵌套循环是否继续执行循环_4、在JAVA中如何跳出当前的多重嵌套循环?-Java面试题答案...
  2. sqoop2操作流程
  3. 用if写一个备份mysql的脚本
  4. XML Schema语法规则
  5. View 绘制体系知识梳理(7) getMeasuredWidth 和 getWidth 的区别
  6. python 生成二维码
  7. jasperReport - 多Table的PDF中文导出
  8. 使用OPENCV对图片进行角度旋转
  9. 使用XenApp/XenDesktop发布App-V应用——安装App-V服务器
  10. Java家庭收支记账系统
  11. Webshell 管理工具
  12. setValuesForKeysWithDictionary崩溃
  13. Android集成招行一网通
  14. 【两天搞定小米商城】【第三步】小米商城之导航部分
  15. [转] 用小铲子挖大坑
  16. 网易云音乐面向用户增长的数据治理实践
  17. 计算机系统结构复习(五):ILP指令集并行
  18. Linux安装使用及命令大全
  19. 保险Insurance
  20. 【归档】证明V的两个子空间的并是V的子空间当且仅当其中一个子空间包含另一个子空间

热门文章

  1. 一场关于动态化开发实践的技术探讨
  2. AI赋能DevOps:数据驱动的全栈工程师实践
  3. MySQL运维实战 之 PHP访问MySQL你使用对了吗
  4. 可应用于实际的14个NLP突破性研究成果(二)
  5. 如何使用阿里云ARMS轻松重现用户浏览器问题
  6. 备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?
  7. 5亿整数的大文件,怎么排序 ?面试被问傻!
  8. 【当头棒喝】你是真的了解云计算吗?
  9. 微服务应用容器化场景中常见问题总结
  10. 收件服务器信息,收件服务器配置信息