implemented Dir

git-svn-id: file:///home/svn/incoming/trunk@2362 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
Matt Miller 2005-04-11 01:59:45 +00:00
parent 8f0a94cb11
commit 1a9852d50e
5 changed files with 64 additions and 19 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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;