35

打造定制化的Metasploit-第一课

 4 years ago
source link: https://payloads.cn/2020/0220/creating-a-customized-metasploitlesson-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Ruby编程语言可以说是Metasploit框架的核心,想要学习好Metasploit模块编写必须要会Ruby。不过Ruby到底是什么呢?根据Ruby官方网站的说法:”Ruby一门开源的动态编程语言,注重简洁和效率。Ruby 的句法优雅,读起来自然,写起来舒适。”(引自 Ruby中文官网

简单来说,Ruby是一种简单快捷的面向对象(面向对象程序设计)脚本语言。ruby 另以”红宝石”命名。

本文只讲解涉及编写Metasploit模块所必需的Ruby知识,如需更多介绍可以查阅 Ruby教程 ,进行学习。

创建第一个ruby程序

如需了解Ruby的安装过程,可自行百度,本文不进行讲解。

下载Ruby

Ruby的交互式命令行

这里直接使用Kali系统自带的Ruby环境,跟Python等语言一样,ruby也有命令交互的,输入 irb 即可进入到命令行交互操作。

下面做个 计算 与 赋值 的简单操作:

JJFnquU.jpg!web

命令行中定义方法

方法或函数是一组语句,当强调它们时就会执行。在使用Metasploit模块时,Ruby的方法是一个很重要的部分。语法格式:

def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
   expr..
end

首先已 def 开始, end 声明放在最后来结束对方法的定义, arg 指的是方法所接收的参数, expr 指的是用来接受并计算的表达式。

下面定义一个函数方法:

mmemq2r.jpg!web

可以看到,函数通过运算打印出了正确的结果。Ruby语言提供了puts和print这两种输出打印函数。当涉及Metasploit时,将使用 print_line 函数。

下面分别使用 print_lineprint_goodprint_errorprint_warningprint_status 、与 print_blank_line 语句来表示行、成功执行、错误执行、警告、状态与换行:

def run
    print_line("---")
    print_good("successful")
    print_error("error")
    print_warning("warning")
    print_status("status")
    print_blank_line
  end

zmqM7fI.jpg!web

Ruby中的变量和数据类型

变量是指一个值可以随时改变的占位符。Ruby语言支持众多的数据类型,但只讲解与Metasploit相关的数据类型。

字符串处理

使用Ruby语言编写Metasploit模块时,尽量使用双引号标记,因为单引号可能会产生问题:

F3EbymM.jpg!web

字符串连接

将两个不同结果连接成一个字符串,使用 + 运算符实现字符串的连接;当需要一个变量后面追加数据的时候,可以使用 << 运算符:

UneyQna.jpg!web

子字符串substring函数

6RrERzY.jpg!web

split函数

naQZJrV.jpg!web

Ruby中的数字和转换

在处理用户输入是,可以用 to_i 函数将字符串类型的输入转换成数字;另外,可以用 to_s 函数将一个数字转换成字符串。

Qz2aaq3.jpg!web

数制转换

  • 16进制到10进制的转换

IbiYj27.jpg!web

  • 10进制到16进制的转换

j6Rj6rv.jpg!web

范围

范围(range)是一个很重要的内容,广泛应用在Metasploit的辅助模块中。例如 auxiliary

IZzAbim.jpg!web

一个范围的对象提供多种操作:搜索、查找最小值与最大值、显示范围中的所有数据。这里 include? 函数可以检查范围中是否包含某一个特定的值。此外, minmax 分别显示范围中的最小值和最大值。

Ruby中的循环

迭代语句被称为循环。Ruby的语法和其他编程语言的不同之处:

def for1(a)
	for i in 0..a
		print ("This number is #{i}\n")
	end
end
for1 (10)

v6JrY3A.jpg!web

这里使用 #{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=[5,10,15,20,25]
each_example(a)

AJZ3meb.jpg!web

定义一个方法,并接收数组a,再用 each 循环打印出来。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK