144 lines
2.8 KiB
Ruby
144 lines
2.8 KiB
Ruby
# -*- coding: binary -*-
|
|
# This file is part of the Metasploit Framework and may be subject to
|
|
# redistribution and commercial restrictions. Please see the Metasploit
|
|
# Framework web site for more information on licensing and terms of use.
|
|
# https://metasploit.com/framework/
|
|
|
|
require 'net/https'
|
|
require 'net/http'
|
|
require 'uri'
|
|
|
|
module Msf
|
|
|
|
#
|
|
# Represents a targeted web application and holds service, host, post etc. info.
|
|
#
|
|
class Auxiliary::Web::Target
|
|
|
|
# Original URL as a String.
|
|
attr_accessor :original
|
|
|
|
# Service information as an Mdm::Service object.
|
|
attr_accessor :service
|
|
|
|
# Mdm::WebSite object.
|
|
attr_accessor :site
|
|
|
|
# True if HTTPS, False otherwise.
|
|
attr_accessor :ssl
|
|
|
|
# IP address as a String.
|
|
attr_accessor :host
|
|
|
|
# Virtual host as a String.
|
|
attr_accessor :vhost
|
|
|
|
# String URI path.
|
|
attr_accessor :path
|
|
|
|
# String URI query.
|
|
attr_accessor :query
|
|
|
|
# Port Number.
|
|
attr_accessor :port
|
|
|
|
# Port Number.
|
|
attr_accessor :username
|
|
|
|
# Port Number.
|
|
attr_accessor :password
|
|
|
|
# Array of Web::Form objects.
|
|
attr_accessor :forms
|
|
|
|
# Array of Web::Path objects.
|
|
attr_accessor :paths
|
|
|
|
#
|
|
# options - Hash with which to populate self (keys must correspond to attributes):
|
|
# :service
|
|
# :ssl
|
|
# :host
|
|
# :vhost
|
|
# :path
|
|
# :port
|
|
# :forms
|
|
# :auditable
|
|
#
|
|
def initialize( options = {} )
|
|
update( options )
|
|
end
|
|
|
|
#
|
|
# options - Hash with which to update self (keys must correspond to attributes):
|
|
# :service
|
|
# :ssl
|
|
# :host
|
|
# :vhost
|
|
# :path
|
|
# :port
|
|
# :forms
|
|
# :auditable
|
|
#
|
|
def update( options = {} )
|
|
options.each { |k, v| send( "#{k}=", v ) }
|
|
|
|
@forms ||= []
|
|
@paths ||= []
|
|
|
|
self
|
|
end
|
|
|
|
#
|
|
# Pushes an auditable element.
|
|
#
|
|
# element - Web::Form or Web::Path or Mdm::WebForm
|
|
#
|
|
def <<( element )
|
|
|
|
case element
|
|
when Auxiliary::Web::Path
|
|
@paths << element
|
|
when Auxiliary::Web::Form
|
|
@forms << element
|
|
when Mdm::WebForm
|
|
self.<< element.method.to_s.downcase == 'path' ?
|
|
Auxiliary::Web::Path.from_model( element ) :
|
|
Auxiliary::Web::Form.from_model( element )
|
|
end
|
|
end
|
|
|
|
#
|
|
# Array of accumulated auditable elements.
|
|
#
|
|
def auditable
|
|
self.forms | self.paths
|
|
end
|
|
|
|
def host
|
|
return if !@host
|
|
Rex::Socket.is_ipv6?( @host ) ? "[#{@host}]" : @host
|
|
end
|
|
|
|
# String protocol representation (http or https).
|
|
def proto
|
|
ssl? ? 'https' : 'http'
|
|
end
|
|
|
|
# True if HTTPS, False otherwise.
|
|
def ssl?
|
|
!!@ssl
|
|
end
|
|
|
|
# String URL to the webapp.
|
|
def to_url
|
|
"#{proto}://#{vhost || host}:#{port}#{path}"
|
|
end
|
|
|
|
def dup
|
|
Marshal.load( Marshal.dump( self ) )
|
|
end
|
|
|
|
end
|
|
end
|