247 lines
3.5 KiB
Ruby
247 lines
3.5 KiB
Ruby
# -*- coding: binary -*-
|
|
module Msf
|
|
###
|
|
#
|
|
# This module provides methods for WMAP-enabled modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapModule
|
|
|
|
attr_accessor :orderid
|
|
attr_accessor :requiredids
|
|
|
|
#
|
|
# Initializes an instance of a WMAP module
|
|
#
|
|
def initialize(info = {})
|
|
super
|
|
self.orderid = 0xFFFFFF
|
|
self.requiredids = {}
|
|
end
|
|
|
|
def register_wmap_options(options)
|
|
if options.has_key?('OrderID')
|
|
self.orderid = options['OrderID']
|
|
end
|
|
|
|
if options.has_key?('Require')
|
|
self.requiredids = options['Require']
|
|
end
|
|
end
|
|
|
|
def wmap_enabled
|
|
#enabled by default
|
|
true
|
|
end
|
|
|
|
def wmap_getoid
|
|
self.orderid
|
|
end
|
|
|
|
def wmap_setoid(oid)
|
|
self.orderid = oid
|
|
end
|
|
|
|
def wmap_type
|
|
#default type
|
|
nil
|
|
end
|
|
|
|
def wmap_target_host
|
|
datastore['RHOST']
|
|
end
|
|
|
|
def wmap_target_port
|
|
datastore['RPORT']
|
|
end
|
|
|
|
def wmap_target_ssl
|
|
datastore['SSL']
|
|
end
|
|
|
|
def wmap_target_vhost
|
|
datastore['VHOST']
|
|
end
|
|
|
|
def wmap_base_url
|
|
res = (ssl ? "https://" : "http://")
|
|
if datastore['VHOST'].nil?
|
|
res << wmap_target_host
|
|
else
|
|
res << datastore['VHOST']
|
|
end
|
|
res << ":" + wmap_target_port.to_s
|
|
res
|
|
end
|
|
|
|
|
|
#
|
|
# Modified from CGI.rb as we dont use arrays
|
|
#
|
|
def headersparse(qheaders)
|
|
params = Hash.new()
|
|
|
|
qheaders.split(/[&;]/n).each do |pairs|
|
|
key, value = pairs.split(':',2)
|
|
if params.has_key?(key)
|
|
#Error
|
|
else
|
|
params[key] = value
|
|
end
|
|
end
|
|
params
|
|
end
|
|
|
|
#modified from CGI.rb as we dont use arrays
|
|
def queryparse(query)
|
|
params = Hash.new()
|
|
|
|
query.split(/[&;]/n).each do |pairs|
|
|
key, value = pairs.split('=',2)
|
|
if params.has_key?(key)
|
|
#Error
|
|
else
|
|
params[key] = value
|
|
end
|
|
end
|
|
params
|
|
end
|
|
|
|
# Levenshtein distance algorithm (slow, huge mem consuption)
|
|
def distance(a, b)
|
|
case
|
|
when a.empty?
|
|
b.length
|
|
when b.empty?
|
|
a.length
|
|
else
|
|
[(a[0] == b[0] ? 0 : 1) + distance(a[1..-1], b[1..-1]),
|
|
1 + distance(a[1..-1], b),
|
|
2 + distance(a, b[1..-1])].min
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP SSL Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanSSL
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_ssl
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP File Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanFile
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_file
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP Directory Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanDir
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_dir
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP Web Server Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanServer
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_server
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP Query Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanQuery
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_query
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP Unique Query Scanner modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapScanUniqueQuery
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_unique_query
|
|
end
|
|
|
|
def signature(fpath,fquery)
|
|
hsig = Hash.new()
|
|
|
|
hsig = queryparse(fquery)
|
|
|
|
#
|
|
# Signature of the form ',p1,p2,pn' then to be appended to path: path,p1,p2,pn
|
|
#
|
|
|
|
sigstr = fpath + "," + hsig.map{|p| p[0].to_s}.join(",")
|
|
end
|
|
end
|
|
|
|
|
|
module Auxiliary::WmapScanGeneric
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_generic
|
|
end
|
|
end
|
|
|
|
###
|
|
#
|
|
# This module provides methods for WMAP Crawler modules
|
|
#
|
|
###
|
|
|
|
module Auxiliary::WmapCrawler
|
|
include Auxiliary::WmapModule
|
|
|
|
def wmap_type
|
|
:wmap_crawler
|
|
end
|
|
end
|
|
|
|
end
|