JMX code refactoring

This commit is contained in:
jvazquez-r7
2015-03-23 17:06:51 -05:00
parent 6934fde5a1
commit d8d4c23d60
7 changed files with 170 additions and 199 deletions
+56 -28
View File
@@ -4,12 +4,10 @@ module Msf
module Java
module Rmi
module Client
module Registry
module Connection
require 'msf/java/rmi/client/jmx/connection/builder'
require 'msf/java/rmi/client/jmx/connection/parser'
include Msf::Java::Rmi::Client::Jmx::Connection::Builder
include Msf::Java::Rmi::Client::Jmx::Connection::Parser
def send_jmx_get_object_instance(opts = {})
send_call(
@@ -21,40 +19,70 @@ module Msf
sock: opts[:sock] || sock
)
return_value
#remote_object = parse_jmx_get_object_instance(return_value)
if return_value.nil?
return nil
end
#remote_object
if return_value.is_exception?
raise ::Rex::Proto::Rmi::Exception, return_value.get_class_name
end
unless return_value.get_class_name == 'javax.management.ObjectInstance'
return nil
end
true
end
end
def send_jmx_create_mbean(opts = {})
send_call(
sock: opts[:sock] || sock,
call: build_jmx_create_mbean(opts)
)
def send_jmx_create_mbean(opts = {})
send_call(
sock: opts[:sock] || sock,
call: build_jmx_create_mbean(opts)
)
return_value = recv_return(
sock: opts[:sock] || sock
)
return_value = recv_return(
sock: opts[:sock] || sock
)
return_value
#remote_object = parse_jmx_get_object_instance(return_value)
if return_value.nil?
return nil
end
#remote_object
end
if return_value.is_exception?
raise ::Rex::Proto::Rmi::Exception, return_value.get_class_name
end
def send_jmx_invoke(opts = {})
send_call(
sock: opts[:sock] || sock,
call: build_jmx_invoke(opts)
)
unless return_value.get_class_name == 'javax.management.ObjectInstance'
return nil
end
return_value = recv_return(
sock: opts[:sock] || sock
)
true
end
return_value
def send_jmx_invoke(opts = {})
send_call(
sock: opts[:sock] || sock,
call: build_jmx_invoke(opts)
)
return_value = recv_return(
sock: opts[:sock] || sock
)
if return_value.nil?
return nil
end
if return_value.is_exception?
raise ::Rex::Proto::Rmi::Exception, return_value.get_class_name
end
unless return_value.get_class_name == 'java.util.HashSet'
return nil
end
true
end
end
end
end
@@ -1,39 +0,0 @@
# -*- coding: binary -*-
module Msf
module Java
module Rmi
module Client
module Jmx
module Connection
module Parser
def parse_jmx_get_object_instance(return_value)
if return_value.nil? || return_value.is_exception?
puts "is exception :?"
puts "#{return_value.value[0].class}"
puts "#{return_value.value[0].class_desc.description.class_name.contents}"
return nil
end
puts "#{return_value.value[0].class}"
unless return_value.value[0].is_a?(Rex::Java::Serialization::Model::NewObject)
return nil
end
case return_value.value[0].class_desc.description
when Rex::Java::Serialization::Model::NewClassDesc
return return_value.value[0].class_desc.description.class_name.contents
when Rex::Java::Serialization::Model::ProxyClassDesc
return return_value.value[0].class_desc.description.interfaces[0].contents
else
return nil
end
end
end
end
end
end
end
end
end
+6 -8
View File
@@ -27,19 +27,17 @@ module Msf
sock: opts[:sock] || sock
)
remote_object = parse_jmx_new_client(return_value)
if remote_object.nil?
if return_value.nil?
return nil
end
remote_location = parse_jmx_new_client_endpoint(return_value)
if remote_location.nil?
return nil
if return_value.is_exception?
raise ::Rex::Proto::Rmi::Exception, return_value.get_class_name
end
{object: remote_object}.merge(remote_location)
ref = parse_jmx_new_client(return_value)
ref
end
end
end
+11 -13
View File
@@ -14,22 +14,24 @@ module Msf
# @param return_value [Rex::Proto::Rmi::Model::ReturnValue]
# @return [String, NilClass] The remote object name if success, nil otherwise
def parse_jmx_new_client(return_value)
if return_value.nil? || return_value.is_exception?
return nil
end
unless return_value.value[0].is_a?(Rex::Java::Serialization::Model::NewObject)
return nil
end
return_object = ''
case return_value.value[0].class_desc.description
when Rex::Java::Serialization::Model::NewClassDesc
return return_value.value[0].class_desc.description.class_name.contents
return_object = return_value.value[0].class_desc.description.class_name.contents
when Rex::Java::Serialization::Model::ProxyClassDesc
return return_value.value[0].class_desc.description.interfaces[0].contents
return_object = return_value.value[0].class_desc.description.interfaces[0].contents
else
return nil
end
unless return_object == 'javax.management.remote.rmi.RMIConnectionImpl_Stub'
return nil
end
ref = parse_jmx_new_client_endpoint(return_value)
ref
end
# Parses a java.rmi.registry.Registry.lookup() return value to find out
@@ -38,10 +40,6 @@ module Msf
# @param return_value [Rex::Java::Serialization::Model::ReturnValue]
# @return [Hash, NilClass] The remote interface information if success, nil otherwise
def parse_jmx_new_client_endpoint(return_value)
if return_value.nil? || return_value.is_exception?
return nil
end
values_size = return_value.value.length
end_point_block_data = return_value.value[values_size - 2]
unless end_point_block_data.is_a?(Rex::Java::Serialization::Model::BlockData)