Class: Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RemoteRegistryKey

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb

Overview

Class wrapper around a remote registry key on the remote side

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, target_host, root_key, hkey) ⇒ RemoteRegistryKey

Initializes an instance of a registry key using the supplied properties and HKEY handle from the server.


26
27
28
29
30
31
32
33
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 26

def initialize(client, target_host, root_key, hkey)
  self.client   = client
  self.root_key = root_key
  self.target_host = target_host
  self.hkey     = hkey

  ObjectSpace.define_finalizer( self, self.class.finalize(self.client, self.hkey) )
end

Instance Attribute Details

#hkeyObject

The open handle to the key on the server.


171
172
173
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 171

def hkey
  @hkey
end

#root_keyObject

The root key name, such as HKEY_LOCAL_MACHINE.


175
176
177
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 175

def root_key
  @root_key
end

#target_hostObject

The remote machine name, such as PDC01


179
180
181
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 179

def target_host
  @target_host
end

Class Method Details

.close(client, hkey) ⇒ Object

Closes the open key. This must be called if the registry key was opened.


107
108
109
110
111
112
113
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 107

def self.close(client, hkey)
  if hkey != nil
    return client.sys.registry.close_key(hkey)
  end

  return false
end

.finalize(client, hkey) ⇒ Object


35
36
37
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 35

def self.finalize(client,hkey)
  proc { self.close(client,hkey) }
end

Instance Method Details

#closeObject

Instance method for the same


116
117
118
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 116

def close()
  self.class.close(self.client, self.hkey)
end

#create_key(base_key, perm = KEY_READ) ⇒ Object

Creates a registry key that is relative to this registry key.


92
93
94
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 92

def create_key(base_key, perm = KEY_READ)
  return self.client.sys.registry.create_key(self.hkey, base_key, perm)
end

#delete_key(base_key, recursive = true) ⇒ Object

Deletes a registry key that is relative to this registry key.


99
100
101
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 99

def delete_key(base_key, recursive = true)
  return self.client.sys.registry.delete_key(self.hkey, base_key, recursive)
end

#delete_value(name) ⇒ Object

Delete the supplied registry value.


151
152
153
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 151

def delete_value(name)
  return self.client.sys.registry.delete_value(self.hkey, name)
end

#each_key(&block) ⇒ Object

Enumerates all of the child keys within this registry key.


48
49
50
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 48

def each_key(&block)
  return enum_key.each(&block)
end

#each_value(&block) ⇒ Object

Enumerates all of the child values within this registry key.


55
56
57
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 55

def each_value(&block)
  return enum_value.each(&block)
end

#enum_keyObject

Retrieves all of the registry keys that are direct descendents of the class' registry key.


63
64
65
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 63

def enum_key()
  return self.client.sys.registry.enum_key(self.hkey)
end

#enum_valueObject

Retrieves all of the registry values that exist within the opened registry key.


71
72
73
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 71

def enum_value()
  return self.client.sys.registry.enum_value(self.hkey)
end

#open_key(base_key, perm = KEY_READ) ⇒ Object

Opens a registry key that is relative to this registry key.


85
86
87
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 85

def open_key(base_key, perm = KEY_READ)
  return self.client.sys.registry.open_key(self.hkey, base_key, perm)
end

#query_classObject

Queries the class of the specified key


144
145
146
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 144

def query_class
  return self.client.sys.registry.query_class(self.hkey)
end

#query_value(name) ⇒ Object

Queries the attributes of the supplied registry value relative to the opened registry key.


137
138
139
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 137

def query_value(name)
  return self.client.sys.registry.query_value(self.hkey, name)
end

#set_value(name, type, data) ⇒ Object

Sets a value relative to the opened registry key.


129
130
131
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 129

def set_value(name, type, data)
  return self.client.sys.registry.set_value(self.hkey, name, type, data)
end

#to_sObject

Returns the path to the key.


164
165
166
# File 'lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb', line 164

def to_s
  return "\\\\" + self.target_host + "\\" + self.root_key.to_s + "\\"
end