打造定制化的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


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

查看所有标签

猜你喜欢:

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

用户体验要素

用户体验要素

Jesse James Garrett / 范晓燕 / 机械工业出版社 / 2011-7-1 / 39.00元

《用户体验要素:以用户为中心的产品设计(原书第2版)》是AJAX之父Jesse James Garrett的经典之作。本书用简洁的语言系统化地诠释了设计、技术和商业融合是最重要的发展趋势。全书共8章,包括关于用户体验以及为什么它如此重要、认识这些要素、战略层、范围层、结构层、框架层、表现层以及要素的应用。 《用户体验要素:以用户为中心的产品设计(原书第2版)》用清晰的说明和生动的图形分析了以......一起来看看 《用户体验要素》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具