Ruby-Metasploit的核心

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

干货 | 算法和编程面试题精选TOP50!(附代码+解题思路+答案)

作者 | javinpaul编译 | 王天宇、Jane整理 | Jane【导读】之前我们给同学们推荐了很多关于 Python 的面试资源&#xff0c;大家都表示很有用。这次营长表示要翻 Java 的牌子啦~ 应大家的强烈反馈&#xff0c;我们找了一套 Java 语言的算法和编程的面试题。这份面试资源主要包含…

Xml转换成html表格代码,如何用C++代码将XML文件转换为HTML表格?

我有一个XML文件。我想把它转换成HTML文件&#xff0c;并用我的C应用程序像HTML表一样表示它。有没有任何C库可以用来解析XML文件并创建HTML文件&#xff1f;示例:Belgian Waffles$5.95Two of our famous Belgian Waffles with plenty of real maple syrup650Strawberry Belgia…

Python map 函数 -Python零基础入门教程

目录 一.前言二.Python map 函数语法简介三.Python map 函数实战 1.使用 map 函数2.map 函数配合 lambda 匿名函数一起使用 四.Python map 函数效率对比五.Python map 函数总结六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 截…

鸿蒙os2.0开发者beta版,鸿蒙 OS 2.0 开发者beta版针对Mate 40系列设备开放

华为开始针对包括P40&#xff0c;Mate 30和MatePad Pro设备在内的设备招募HarmonyOS 2.0 Mobile开发人员beta版。招募之后&#xff0c;华为还开始向选定的测试人员推出HarmonyOS 2.0移动开发人员更新。根据最新信息&#xff0c;华为现已决定扩展适用于华为Mate X2可折叠手机&am…

python2版本libnum

如果运行RsaCtfTool工具 需要用到libnum&#xff0c;而网上基本上都是python3的libnum讲解&#xff0c;下面我就来说说python2的libnum https://github.com/ryanInf/python2-libnum 这个链接讲述的是python2的libnum模块 安装 git clone https://github.com/ryanInf/python2-l…

1.7亿条数据,比胡同和撸串更真实的北京

作者王越来源DT财经原创作品&#xff0c;如有转载&#xff0c;请联系公众号授权。“宇宙中心”是哪里&#xff1f;哪里又是北京的城市活力中心&#xff1f;北京究竟是一座怎样的城市?是汇聚了政治中心、国际交往中心、科技创新中心等多项顶级职能的大国之都&#xff0c;是拥有…

Python 文件读写操作-Python零基础入门教程

目录 一.Python 文件的打开 open二.Python 文件的关闭 close三.Python 文件的读取 read 1.read 函数2.readline 函数3.readlines 函数 四.Python 文件的写入 write 1.write 函数语法2.write 函数使用案例 五.Python 文件偏移 seek 1.seek 函数2.tell 函数3.seek / tell 函数示…

html box 竖线,CSS3 小竖条脉冲型LOADING动效

CSS语言&#xff1a;CSSSCSS确定.loader-wrap {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background-color: #ff9328;}.loader {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;height: 40px;width: 80px;box-sizing: border-…

面趣 | 为什么要分稳定排序和非稳定排序?

作者channingbreeze如需转载&#xff0c;请联系原作者。小史是一个应届生&#xff0c;虽然学的是电子专业&#xff0c;但是自己业余时间看了很多互联网与编程方面的书&#xff0c;一心想进BAT互联网公司。今天他去了一家互联网小巨头公司面试了。没想到面试并不像想象中的顺利。…

个人求职简历计算机应用技术学院信息门户,计算机应用技术专业求职简历范文...

计算机应用技术专业求职简历范文应届毕业生求职网为毕业生推荐的是计算机方面的简历范文&#xff0c;欢迎阅读浏览&#xff1a;姓名&#xff1a;yjbys 性别&#xff1a;出生年月&#xff1a; 民族&#xff1a;户口所在地&#xff1a; 现居住地&#xff1a;婚姻状况&#xff1a;…

云漫圈 | AR VR傻傻分不清楚。。。

原文出自【烹茶十一】对此&#xff0c;你是不是也有好多吐槽的&#xff0c;来聊聊呀~~推荐阅读这届程序员&#xff0c;要做好苦日子的准备了&#xff1f;我跟OpenStack 1-8年&#xff0c;从ABC到HI、到KO完01微 信 群 添加小编微信&#xff1a;tangguoyemeng&#xff0c;备注“…

Python 异常处理-Python零基础入门教程

目录 一.Python 异常处理简介二.Python 异常捕获方式 1.捕获所有异常2.捕获指定异常3.捕获多个异常4.万能的异常捕获5.异常中的 else6.异常中的 finally7.raise 主动触发异常 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python 开…

CTF基本赛制与题型

CTF简介 CTF的全称为Capture The Flag,即夺旗赛。CTF竞赛活动蓬勃发展&#xff0c;已成为了锻炼信息安全技术&#xff0c;展现安全能力和水平的绝佳平台。 CTF号称计算机界的奥林匹克。 CTF目标&#xff1a; CTF参赛队伍的目标为获取尽可能多的flag。参赛队伍需要通过解决信息…

正确使用计算机网络,如何正确使用计算机网络

计算机网络的使用&#xff0c;说简单一点&#xff0c;进行网络世界&#xff0c;大家都会使的&#xff0c;那么可能性的存在哪些问题呢?下面是小编跟大家分享的是&#xff0c;欢迎大家来阅读学习~工具/原料计算机网络方法/步骤计算机网络有几大特点&#xff0c;第一自然也是内容…

解析微服务架构组件,看这一篇文章就够

1. 如何发布和引用服务服务描述&#xff1a;服务调用首先解决的问题就是服务如何对外描述。 常用的服务描述方式包括 RESTful API、XML 配置以及 IDL 文件三种。RESTful API主要被用作 HTTP 或者 HTTPS 协议的接口定义&#xff0c;即使在非微服务架构体系下&#xff0c;也被广泛…

Python __name__ == ‘__main__’详细解释-Python零基础入门教程

目录 一.简介 1.__name__2.’__main__’3.__name__ ‘__main__‘ 二.作用三.猜你喜欢 ​ 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 学习过 C 语言或者 Java 语言的盆友应该都知道程序运行必然有主程序入口 main 函数&#xff0c;而 Python 却…

CTF备战

CTF-WEB条件&#xff1a; 之间件的基础&#xff1a;Apache、IIS、Nginx、WebLogic、Tomcat等 数据库的基础&#xff1a;Oracle、MySql、SqlServer等 编程语言基础&#xff1a;PHP、Python、PythonWeb、Java、JavaWeb等 安全漏洞基础&#xff1a;XSS、CSRF、SSRF、SQL注入、文件…

学计算机高中选那三科,女生高中选哪三科最吃香

女生高中选哪三科最吃香2020-12-30 14:42:19文/丁雪竹女生高中选哪三科最吃香&#xff0c;怎么选择好&#xff0c;小编整理了相关信息&#xff0c;来看一下&#xff01;女生高中选哪三科最吃香兴趣能够决定学习的深度&#xff0c;女生只要根据自己的兴趣&#xff0c;在最佳组合…

CTF-杂项题-伪加密

手动分离压缩包注意&#xff1a; zip压缩包文件头格式为504B0304&#xff0c;之间包含504B0102&#xff0c;文件以504B0506****结尾&#xff0c;注意这类格式。 zip伪加密 zip伪加密是在文件头的加密标志位做修改&#xff0c;进而再打开文件时识被别为加密压缩包。但实际是没有…

Anaconda是什么?Anconda下载安装教程 - Python零基础入门教程

目录 一.前言二.Anaconda 是什么&#xff1f;三.Anaconda 下载地址四.Anaconda 安装五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 Anaconda 工具集合 – 第三方库集合Pycharm 开发工具&#xff0c;俗称 IDE – 写代码工具 二…