getpid is working

git-svn-id: file:///home/svn/incoming/trunk@2355 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
Matt Miller 2005-04-10 09:20:47 +00:00
parent 6eee03f990
commit 56e6016db2
4 changed files with 93 additions and 11 deletions

View File

@ -33,10 +33,8 @@ class Client
monitor_socket
end
def brand(klass)
klass = klass.dup
klass.client = self
return klass
def Client.default_timeout
return 30
end
#
@ -50,9 +48,9 @@ class Client
# Extension registration
#
def add_extension(name)
Kernel.require("Rex/Post/Meterpreter/Extensions/#{name}")
Kernel.require("Rex/Post/Meterpreter/Extensions/#{name}/#{name}")
ext = eval("Rex::Post::Meterpreter::Extensions::" + name + ".new(client)")
ext = eval("Rex::Post::Meterpreter::Extensions::" + name + "::" + name + ".new(self)")
self.extensions[ext.name] = ext
end

View File

@ -2,6 +2,7 @@
require 'Rex/Post/Meterpreter/Packet'
require 'Rex/Post/Meterpreter/Extension'
require 'Rex/Post/Meterpreter/Client'
module Rex
module Post
@ -107,8 +108,8 @@ class ClientCore < Extension
request.add_tlv(TLV_TYPE_TARGET_PATH, target_path)
end
# Transmit the request and wait 30 seconds for a response
response = self.client.send_packet_wait_response(request, 30)
# Transmit the request and wait the default timeout seconds for a response
response = self.client.send_packet_wait_response(request, Client.default_timeout)
# No response?
if (response == nil)
@ -154,12 +155,13 @@ class ClientCore < Extension
# Enumerate all of the modules, loading each one
modules.each { |mod|
load_library(
if (load_library(
'LibraryFilePath' => 'data/meterpreter/ext_server_' + mod.downcase + '.dll',
'UploadLibrary' => true,
'Extension' => true,
'SaveToDisk' => opts['LoadFromDisk']
)
'SaveToDisk' => opts['LoadFromDisk']))
client.add_extension(mod)
end
}

View File

@ -0,0 +1,43 @@
#!/usr/bin/ruby
require 'Rex/Post/Process'
require 'Rex/Post/Meterpreter/Packet'
require 'Rex/Post/Meterpreter/Client'
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Stdapi'
module Rex
module Post
module Meterpreter
module Extensions
module Stdapi
class Process < Rex::Post::Process
class <<self
attr_accessor :client
end
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
tlv = response.get_tlv(TLV_TYPE_PID)
if (tlv != nil)
return tlv.value
else
return 0
end
end
end
end; end; end; end; end

View File

@ -0,0 +1,39 @@
#!/usr/bin/ruby
require 'Rex/Post/Meterpreter/Extension'
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Process'
module Rex
module Post
module Meterpreter
module Extensions
module Stdapi
# Constants
TLV_TYPE_PID = TLV_META_TYPE_UINT | 0
###
#
# Stdapi
# ------
#
# Standard ruby interface to remote entities
#
###
class Stdapi < Extension
def initialize(client)
super(client, 'stdapi')
end
def brand(klass)
klass = klass.dup
klass.client = self.client
return klass
end
def process
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Process)
end
end
end; end; end; end; end