implemented Dir
git-svn-id: file:///home/svn/incoming/trunk@2362 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
parent
8f0a94cb11
commit
1a9852d50e
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/ruby
|
||||
|
||||
require 'Rex/Post/Dir'
|
||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Stdapi'
|
||||
|
||||
module Rex
|
||||
module Post
|
||||
module Meterpreter
|
||||
module Extensions
|
||||
module Stdapi
|
||||
|
||||
TLV_TYPE_DIRECTORY_PATH = TLV_META_TYPE_STRING | 1200
|
||||
TLV_TYPE_FILE_NAME = TLV_META_TYPE_STRING | 1201
|
||||
TLV_TYPE_FILE_PATH = TLV_META_TYPE_STRING | 1202
|
||||
|
||||
class Dir < Rex::Post::Dir
|
||||
|
||||
class <<self
|
||||
attr_accessor :client
|
||||
end
|
||||
|
||||
=begin
|
||||
entries(name)
|
||||
|
||||
Enumerates all of the files/folders in a given directory.
|
||||
=end
|
||||
def Dir.entries(name)
|
||||
request = Packet.create_request('stdapi_fs_ls')
|
||||
files = []
|
||||
|
||||
request.add_tlv(TLV_TYPE_DIRECTORY_PATH, name)
|
||||
|
||||
response = client.send_request(request)
|
||||
|
||||
response.each(TLV_TYPE_FILE_NAME) { |file_name|
|
||||
files << file_name.value
|
||||
}
|
||||
|
||||
return files
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end; end; end; end; end
|
|
@ -22,14 +22,7 @@ class Process < Rex::Post::Process
|
|||
def Process.getpid
|
||||
request = Packet.create_request('stdapi_process_getpid')
|
||||
|
||||
response = self.client.send_packet_wait_response(request, Client.default_timeout)
|
||||
tlv = nil
|
||||
|
||||
if (response == nil)
|
||||
raise RuntimeError, "getpid: No response was received", caller
|
||||
elsif (response.result != 0)
|
||||
raise RuntimeError, "getpid: Failed to get process id: #{response.result}", caller
|
||||
end
|
||||
response = client.send_request(request)
|
||||
|
||||
tlv = response.get_tlv(TLV_TYPE_PID)
|
||||
|
||||
|
|
|
@ -61,9 +61,9 @@ class Registry
|
|||
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
||||
request.add_tlv(TLV_TYPE_PERMISSION, perm)
|
||||
|
||||
response = self.client.send_request(request)
|
||||
response = client.send_request(request)
|
||||
|
||||
return RegistryKey.new(self.client, root_key, base_key, perm,
|
||||
return RegistryKey.new(client, root_key, base_key, perm,
|
||||
response.get_tlv(TLV_TYPE_HKEY).value)
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ class Registry
|
|||
request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
|
||||
request.add_tlv(TLV_TYPE_FLAGS, flags)
|
||||
|
||||
if (self.client.send_request(request) != nil)
|
||||
if (client.send_request(request) != nil)
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -101,7 +101,7 @@ class Registry
|
|||
|
||||
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
||||
|
||||
self.client.send_packet(request)
|
||||
client.send_packet(request)
|
||||
|
||||
return true
|
||||
end
|
||||
|
@ -117,7 +117,7 @@ class Registry
|
|||
|
||||
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
||||
|
||||
response = self.client.send_request(request)
|
||||
response = client.send_request(request)
|
||||
|
||||
# Enumerate through all of the registry keys
|
||||
response.each(TLV_TYPE_KEY_NAME) { |key_name|
|
||||
|
@ -151,7 +151,7 @@ class Registry
|
|||
|
||||
request.add_tlv(TLV_TYPE_VALUE_DATA, data)
|
||||
|
||||
response = self.client.send_request(request)
|
||||
response = client.send_request(request)
|
||||
|
||||
return true
|
||||
end
|
||||
|
@ -168,7 +168,7 @@ class Registry
|
|||
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
||||
request.add_tlv(TLV_TYPE_VALUE_NAME, name)
|
||||
|
||||
response = self.client.send_request(request)
|
||||
response = client.send_request(request)
|
||||
|
||||
data = response.get_tlv(TLV_TYPE_VALUE_DATA).value;
|
||||
type = response.get_tlv(TLV_TYPE_VALUE_TYPE).value;
|
||||
|
@ -179,7 +179,7 @@ class Registry
|
|||
data = data.unpack("N")[0]
|
||||
end
|
||||
|
||||
return RegistryValue.new(self.client, hkey, name, type, data)
|
||||
return RegistryValue.new(client, hkey, name, type, data)
|
||||
end
|
||||
|
||||
=begin
|
||||
|
@ -194,7 +194,7 @@ class Registry
|
|||
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
||||
request.add_tlv(TLV_TYPE_VALUE_NAME, name)
|
||||
|
||||
if (self.client.send_request(request) != nil)
|
||||
if (client.send_request(request) != nil)
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -213,10 +213,10 @@ class Registry
|
|||
|
||||
request.add_tlv(TLV_TYPE_HKEY, hkey)
|
||||
|
||||
response = self.client.send_request(request)
|
||||
response = client.send_request(request)
|
||||
|
||||
response.each(TLV_TYPE_VALUE_NAME) { |value_name|
|
||||
values << RegistryValue.new(self.client, hkey, value_name.value)
|
||||
values << RegistryValue.new(client, hkey, value_name.value)
|
||||
}
|
||||
|
||||
return values
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/ruby
|
||||
|
||||
require 'Rex/Post/Meterpreter/Extension'
|
||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Dir'
|
||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Process'
|
||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Registry'
|
||||
|
||||
|
@ -24,6 +25,7 @@ class Stdapi < Extension
|
|||
|
||||
# Alias the following things on the client object so that they
|
||||
# can be directly referenced
|
||||
client.register_extension_alias('dir', self.dir)
|
||||
client.register_extension_alias('process', self.process)
|
||||
client.register_extension_alias('registry', self.registry)
|
||||
end
|
||||
|
@ -34,6 +36,10 @@ class Stdapi < Extension
|
|||
return klass
|
||||
end
|
||||
|
||||
def dir
|
||||
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Dir)
|
||||
end
|
||||
|
||||
def process
|
||||
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Process)
|
||||
end
|
||||
|
|
|
@ -126,6 +126,8 @@ class Tlv
|
|||
self.value = raw.unpack("NNN")[2]
|
||||
elsif (self.type & TLV_META_TYPE_BOOL == TLV_META_TYPE_BOOL)
|
||||
self.value = raw.unpack("NNc")[2]
|
||||
else
|
||||
self.value = raw[8..raw.length]
|
||||
end
|
||||
|
||||
return length;
|
||||
|
|
Loading…
Reference in New Issue