打造定制化的Metasploit-第三课

栏目: IT技术 · 发布时间: 5年前

内容简介:分析的模块位于首先来看模块头的引入与类的定义:如下为

分析的模块位于 /modules/auxiliary/scanner/http/http_version.rb

首先来看模块头的引入与类的定义:

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'rex/proto/http' 
class MetasploitModule < Msf::Auxiliary
  • require 'rex/proto/http' 表示该模块将要引入这个 rex 库文件目录下的所有 http 协议方法,所有的模块都可以被调取使用。包括用于设置连接的函数,get和post的请求和响应处理等。

  • Msf::Auxiliary 定义了该代码的类为辅助模块。

如下为 /lib/rex/proto/http 目录下的内容:

打造定制化的Metasploit-第三课

[注:继承有助于重用代码和快速执行,不幸的是,Ruby不支持多继承,但是 Ruby 支持mixins。mixin就像是多继承的一个特定实现,在多继承中,只有接口部分是可继承的。]

# Exploit mixins should be called first(首先调用渗透模块mixins类)
include Msf::Exploit::Remote::HttpClient
include Msf::Auxiliary::WmapScanServer
# Scanner mixin should be near last(接着是扫描模块mixins类)
include Msf::Auxiliary::Scanner

上面代码所必需库文件中涵盖了编写模块所需要的所有方法,这些库文件的详细信息如下:

语句 引入路径 用途
Msf::Exploit::Remote::HttpClient /lib/msf/core/exploit/http/client.rb 这个库文件提供了大量方法,例如连接到目标计算机、发送请求、切断与客户端的连接等。
Msf::Auxiliary::WmapScanServer /lib/msf/core/auxiliary/wmapmodule.rb wmap是一款基于Metasploit的通用Web应用程序扫描框架,有助于完成Metasploit的Web渗透测试。
Msf::Auxiliary::Scanner /lib/msf/core/auxiliary/scanner.rb 这个文件包含了基于扫描模块的所有函数,提供了模块运行、模块初始化、扫描进度等各种方法。
  • 这个 initialize 方法是Ruby编程语言中的默认构造方法。它定义了名称 Name 、描述 Description 、作者 Author 、许可 License 等。许可就是 'License' => MSF_LICENSE ,最后用一个end结束。
def initialize
    super(
      'Name'        => 'HTTP Version Detection',
      'Description' => 'Display version information about each system.',
      'Author'      => 'hdm',
      'License'     => MSF_LICENSE
    register_wmap_options({
        'OrderID' => 0,
        'Require' => {},
      })
  end

最后这段代码才是真正干活做事的:

def run_host(ip)
    begin
      connect
      res = send_request_raw({ 'uri' => '/', 'method' => 'GET' })
      fp = http_fingerprint(:response => res)
      print_good("#{ip}:#{rport} #{fp}") if fp
      report_service(:host => rhost, :port => rport, :sname => (ssl ? 'https' : 'http'), :info => fp)
    rescue ::Timeout::Error, ::Errno::EPIPE
    ensure
      disconnect
    end
  end

先来解释下在本段代码中所使用的重要函数:

函数 引入库文件 用途
run_host /lib/msf/core/auxiliary/scanner.rb 使用IP与所需主机建立连接
connect /lib/msf/core/exploit/http/client.rb 与目标服务器建立一个HTTP类型的连接
send_request_raw /lib/msf/core/exploit/http/client.rb 用来向目标发送原始的HTTP请求
http_fingerprint /lib/msf/core/exploit/http/client.rb 将HTTP响应解析为可以使用的变量

在这里会产生疑问,就是从代码上下文中根本不清楚函数的具体定义,该如何解决?这时就需要查询 Metasploit API 官方文档。

下面来具体查询分析下:

  • run_hostrun 方法中,作用是与所需主机建立连接。

打造定制化的Metasploit-第三课

  • begin 意味着代码块的开始。

  • 如果连接成功,就进行到 connect 方法,用于与目标服务器建立一个HTTP类型的连接。

打造定制化的Metasploit-第三课

  • 之后使用 send_request_raw 方法,连接到服务器,创建请求,发送请求,读取响应。并将这个方法的参数 URI 的值设置为 / ,参数 method 的值设置为 GET ,将这个响应保存在 res 变量。

res = send_request_raw({ 'uri' => '/', 'method' => 'GET' })

打造定制化的Metasploit-第三课

  • 如果连接成功,使用 http_fingerprint 方法,记录和过滤信息。如:Set-cookie、Powered-by等。

打造定制化的Metasploit-第三课

打造定制化的Metasploit-第三课

  • 接着再把收到的响应信息赋值给 res ,意味着将根据之前发送请求的响应数据进行特征匹配。

fp = http_fingerprint(:response => res)

  • 之后对这些响应数据进行输出打印。

  • 最后, rescue ::Timeout::Error, ::Errno::EPIPE 将会在模块超时的情况下处理程序的异常。

打造定制化的Metasploit-第三课

可见,输出的格式对应 print_good("#{ip}:#{rport} #{fp}") if fp


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python机器学习基础教程

Python机器学习基础教程

[德]安德里亚斯·穆勒、[美]莎拉·吉多 / 张亮 / 人民邮电出版社 / 2018-1 / 79.00元

本书是机器学习入门书,以Python语言介绍。主要内容包括:机器学习的基本概念及其应用;实践中最常用的机器学习算法以及这些算法的优缺点;在机器学习中待处理数据的呈现方式的重要性,以及应重点关注数据的哪些方面;模型评估和调参的高级方法,重点讲解交叉验证和网格搜索;管道的概念;如何将前面各章的方法应用到文本数据上,还介绍了一些文本特有的处理方法。一起来看看 《Python机器学习基础教程》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具