150 lines
3.6 KiB
Ruby
150 lines
3.6 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
require 'rex/post/meterpreter/object_aliases'
|
|
require 'rex/post/meterpreter/extension'
|
|
require 'rex/post/meterpreter/extensions/stdapi/constants'
|
|
require 'rex/post/meterpreter/extensions/stdapi/tlv'
|
|
require 'rex/post/meterpreter/extensions/stdapi/fs/dir'
|
|
require 'rex/post/meterpreter/extensions/stdapi/fs/file'
|
|
require 'rex/post/meterpreter/extensions/stdapi/fs/file_stat'
|
|
require 'rex/post/meterpreter/extensions/stdapi/net/config'
|
|
require 'rex/post/meterpreter/extensions/stdapi/net/socket'
|
|
require 'rex/post/meterpreter/extensions/stdapi/sys/config'
|
|
require 'rex/post/meterpreter/extensions/stdapi/sys/process'
|
|
require 'rex/post/meterpreter/extensions/stdapi/sys/registry'
|
|
require 'rex/post/meterpreter/extensions/stdapi/sys/event_log'
|
|
require 'rex/post/meterpreter/extensions/stdapi/sys/power'
|
|
require 'rex/post/meterpreter/extensions/stdapi/railgun/railgun'
|
|
require 'rex/post/meterpreter/extensions/stdapi/ui'
|
|
require 'rex/post/meterpreter/extensions/stdapi/webcam/webcam'
|
|
|
|
module Rex
|
|
module Post
|
|
module Meterpreter
|
|
module Extensions
|
|
module Stdapi
|
|
|
|
###
|
|
#
|
|
# Standard ruby interface to remote entities for meterpreter. It provides
|
|
# basic access to files, network, system, and other properties of the remote
|
|
# machine that are fairly universal.
|
|
#
|
|
###
|
|
class Stdapi < Extension
|
|
|
|
#
|
|
# Initializes an instance of the standard API extension.
|
|
#
|
|
def initialize(client)
|
|
super(client, 'stdapi')
|
|
|
|
# Alias the following things on the client object so that they
|
|
# can be directly referenced
|
|
client.register_extension_aliases(
|
|
[
|
|
{
|
|
'name' => 'fs',
|
|
'ext' => ObjectAliases.new(
|
|
{
|
|
'dir' => self.dir,
|
|
'file' => self.file,
|
|
'filestat' => self.filestat
|
|
})
|
|
},
|
|
{
|
|
'name' => 'sys',
|
|
'ext' => ObjectAliases.new(
|
|
{
|
|
'config' => Sys::Config.new(client),
|
|
'process' => self.process,
|
|
'registry' => self.registry,
|
|
'eventlog' => self.eventlog,
|
|
'power' => self.power
|
|
})
|
|
},
|
|
{
|
|
'name' => 'net',
|
|
'ext' => ObjectAliases.new(
|
|
{
|
|
'config' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Config.new(client),
|
|
'socket' => Rex::Post::Meterpreter::Extensions::Stdapi::Net::Socket.new(client)
|
|
})
|
|
},
|
|
{
|
|
'name' => 'railgun',
|
|
'ext' => Rex::Post::Meterpreter::Extensions::Stdapi::Railgun::Railgun.new(client)
|
|
},
|
|
{
|
|
'name' => 'webcam',
|
|
'ext' => Rex::Post::Meterpreter::Extensions::Stdapi::Webcam::Webcam.new(client)
|
|
},
|
|
{
|
|
'name' => 'ui',
|
|
'ext' => UI.new(client)
|
|
}
|
|
|
|
])
|
|
end
|
|
|
|
#
|
|
# Sets the client instance on a duplicated copy of the supplied class.
|
|
#
|
|
def brand(klass)
|
|
klass = klass.dup
|
|
klass.client = self.client
|
|
return klass
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the Dir class.
|
|
#
|
|
def dir
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::Dir)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the File class.
|
|
#
|
|
def file
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::File)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the FileStat class.
|
|
#
|
|
def filestat
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Fs::FileStat)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the Process class.
|
|
#
|
|
def process
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Process)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the Registry class.
|
|
#
|
|
def registry
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Registry)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the EventLog class.
|
|
#
|
|
def eventlog
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::EventLog)
|
|
end
|
|
|
|
#
|
|
# Returns a copy of the Power class.
|
|
#
|
|
def power
|
|
brand(Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Power)
|
|
end
|
|
end
|
|
|
|
end; end; end; end; end
|