lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb in librex-0.0.68 vs lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb in librex-0.0.70

- old
+ new

@@ -1,6 +1,5 @@ -#!/usr/bin/env ruby # -*- coding: binary -*- require 'rex/post/process' require 'rex/post/meterpreter/packet' require 'rex/post/meterpreter/client' @@ -19,79 +18,110 @@ # This class provides access to remote system configuration and information. # ### class Config - def initialize(client) - self.client = client - end + def initialize(client) + self.client = client + end - # - # Returns the username that the remote side is running as. - # - def getuid - request = Packet.create_request('stdapi_sys_config_getuid') - response = client.send_request(request) - return client.unicode_filter_encode( response.get_tlv_value(TLV_TYPE_USER_NAME) ) - end + # + # Returns the username that the remote side is running as. + # + def getuid + request = Packet.create_request('stdapi_sys_config_getuid') + response = client.send_request(request) + client.unicode_filter_encode( response.get_tlv_value(TLV_TYPE_USER_NAME) ) + end - # - # Returns a hash of information about the remote computer. - # - def sysinfo - request = Packet.create_request('stdapi_sys_config_sysinfo') - response = client.send_request(request) + # + # Returns a hash of requested environment variables, along with their values. + # If a requested value doesn't exist in the response, then the value wasn't found. + # + def getenvs(*var_names) + request = Packet.create_request('stdapi_sys_config_getenv') - { - 'Computer' => response.get_tlv_value(TLV_TYPE_COMPUTER_NAME), - 'OS' => response.get_tlv_value(TLV_TYPE_OS_NAME), - 'Architecture' => response.get_tlv_value(TLV_TYPE_ARCHITECTURE), - 'System Language' => response.get_tlv_value(TLV_TYPE_LANG_SYSTEM), - } - end + var_names.each do |v| + request.add_tlv(TLV_TYPE_ENV_VARIABLE, v) + end - # - # Calls RevertToSelf on the remote machine. - # - def revert_to_self - client.send_request(Packet.create_request('stdapi_sys_config_rev2self')) - end + response = client.send_request(request) + result = {} - # - # Steals the primary token from a target process - # - def steal_token(pid) - req = Packet.create_request('stdapi_sys_config_steal_token') - req.add_tlv(TLV_TYPE_PID, pid.to_i) - res = client.send_request(req) - return client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) ) - end + response.each(TLV_TYPE_ENV_GROUP) do |env| + var_name = env.get_tlv_value(TLV_TYPE_ENV_VARIABLE) + var_value = env.get_tlv_value(TLV_TYPE_ENV_VALUE) + result[var_name] = var_value + end - # - # Drops any assumed token - # - def drop_token - req = Packet.create_request('stdapi_sys_config_drop_token') - res = client.send_request(req) - return client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) ) - end + result + end - # - # Enables all possible privileges - # - def getprivs - req = Packet.create_request('stdapi_sys_config_getprivs') - ret = [] - res = client.send_request(req) - res.each(TLV_TYPE_PRIVILEGE) do |p| - ret << p.value - end - return ret - end + # + # Returns the value of a single requested environment variable name + # + def getenv(var_name) + _, value = getenvs(var_name).first + value + end + # + # Returns a hash of information about the remote computer. + # + def sysinfo + request = Packet.create_request('stdapi_sys_config_sysinfo') + response = client.send_request(request) + + { + 'Computer' => response.get_tlv_value(TLV_TYPE_COMPUTER_NAME), + 'OS' => response.get_tlv_value(TLV_TYPE_OS_NAME), + 'Architecture' => response.get_tlv_value(TLV_TYPE_ARCHITECTURE), + 'System Language' => response.get_tlv_value(TLV_TYPE_LANG_SYSTEM), + } + end + + # + # Calls RevertToSelf on the remote machine. + # + def revert_to_self + client.send_request(Packet.create_request('stdapi_sys_config_rev2self')) + end + + # + # Steals the primary token from a target process + # + def steal_token(pid) + req = Packet.create_request('stdapi_sys_config_steal_token') + req.add_tlv(TLV_TYPE_PID, pid.to_i) + res = client.send_request(req) + client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) ) + end + + # + # Drops any assumed token + # + def drop_token + req = Packet.create_request('stdapi_sys_config_drop_token') + res = client.send_request(req) + client.unicode_filter_encode( res.get_tlv_value(TLV_TYPE_USER_NAME) ) + end + + # + # Enables all possible privileges + # + def getprivs + req = Packet.create_request('stdapi_sys_config_getprivs') + ret = [] + res = client.send_request(req) + res.each(TLV_TYPE_PRIVILEGE) do |p| + ret << p.value + end + ret + end + protected - attr_accessor :client + attr_accessor :client end end; end; end; end; end; end