打造定制化的Metasploit-第三课

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

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

分析的模块位于 /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


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

查看所有标签

猜你喜欢:

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

Discrete Mathematics and Its Applications

Discrete Mathematics and Its Applications

Kenneth H Rosen / McGraw-Hill Science/Engineering/Math / 2003-04-22 / USD 132.81

Discrete Mathematics and its Applications is a focused introduction to the primary themes in a discrete mathematics course, as introduced through extensive applications, expansive discussion, and deta......一起来看看 《Discrete Mathematics and Its Applications》 这本书的介绍吧!

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

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具