more channel foo
git-svn-id: file:///home/svn/incoming/trunk@2376 4d416f70-5f16-0410-b530-b9f4589650daunstable
parent
ca42291606
commit
3338ebb82c
|
@ -233,7 +233,36 @@ class Channel
|
||||||
# Handles dispatching I/O requests based on the request packet.
|
# Handles dispatching I/O requests based on the request packet.
|
||||||
# The default implementation does nothing with direct I/O requests.
|
# The default implementation does nothing with direct I/O requests.
|
||||||
def dio_handler(dio, packet)
|
def dio_handler(dio, packet)
|
||||||
return nil
|
if (dio == CHANNEL_DIO_READ)
|
||||||
|
length = packet.get_tlv_value(TLV_TYPE_LENGTH)
|
||||||
|
|
||||||
|
return dio_read_handler(packet, length)
|
||||||
|
elsif (dio == CHANNEL_DIO_WRITE)
|
||||||
|
data = packet.get_tlv_value(TLV_TYPE_CHANNEL_DATA)
|
||||||
|
|
||||||
|
return dio_write_handler(packet, data)
|
||||||
|
elsif (dio == CHANNEL_DIO_CLOSE)
|
||||||
|
return dio_close_handler(packet)
|
||||||
|
end
|
||||||
|
|
||||||
|
return false;
|
||||||
|
end
|
||||||
|
|
||||||
|
# Stub read handler
|
||||||
|
def dio_read_handler(packet, length)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
# Stub write handler
|
||||||
|
def dio_write_handler(packet, data)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
# Stub close handler
|
||||||
|
def dio_close_handler(packet)
|
||||||
|
client.remove_channel(self)
|
||||||
|
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
require 'Rex/Post/Meterpreter/Channels/Pool'
|
require 'Rex/Post/Meterpreter/Channels/Pool'
|
||||||
|
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Tlv'
|
||||||
|
|
||||||
module Rex
|
module Rex
|
||||||
module Post
|
module Post
|
||||||
|
@ -19,6 +20,27 @@ module Pools
|
||||||
###
|
###
|
||||||
class File < Rex::Post::Meterpreter::Channels::Pool
|
class File < Rex::Post::Meterpreter::Channels::Pool
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Factory
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
def File.open(client, name, mode = "r", perm = 0)
|
||||||
|
return Channel.create(client, 'stdapi_fs_file',
|
||||||
|
self, CHANNEL_FLAG_SYNCHRONOUS,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
'type' => Rex::Post::Meterpreter::Extensions::Stdapi::TLV_TYPE_FILE_PATH,
|
||||||
|
'value' => name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'type' => Rex::Post::Meterpreter::Extensions::Stdapi::TLV_TYPE_FILE_MODE,
|
||||||
|
'value' => mode + "b"
|
||||||
|
},
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
# Constructor
|
# Constructor
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
require 'Rex/Socket/StreamAbstraction'
|
||||||
|
|
||||||
|
module Rex
|
||||||
|
module Post
|
||||||
|
module Meterpreter
|
||||||
|
|
||||||
|
###
|
||||||
|
#
|
||||||
|
# Stream
|
||||||
|
# ------
|
||||||
|
#
|
||||||
|
# This class represents a channel that is streaming. This means
|
||||||
|
# that sequential data is flowing in either one or both directions.
|
||||||
|
#
|
||||||
|
###
|
||||||
|
class Stream
|
||||||
|
|
||||||
|
include Rex::Socket::StreamAbstraction
|
||||||
|
|
||||||
|
class <<self
|
||||||
|
def cls
|
||||||
|
return CHANNEL_CLASS_STREAM
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Constructor
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
# Passes the initialization information up to the base class
|
||||||
|
def initialize(client, cid, type, flags)
|
||||||
|
super(client, cid, type, flags)
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# I/O handlers
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
def dio_write_handler(packet, data)
|
||||||
|
rsock.write(data)
|
||||||
|
|
||||||
|
return true;
|
||||||
|
end
|
||||||
|
|
||||||
|
def dio_close_handler(packet)
|
||||||
|
rsock.close
|
||||||
|
|
||||||
|
return super(packet)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end; end; end
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
require 'Rex/Post/Meterpreter/Channels/Stream'
|
||||||
|
|
||||||
|
module Rex
|
||||||
|
module Post
|
||||||
|
module Meterpreter
|
||||||
|
module Channels
|
||||||
|
|
||||||
|
###
|
||||||
|
#
|
||||||
|
# Tcp
|
||||||
|
# ---
|
||||||
|
#
|
||||||
|
# The TCP class wrappers a stream-based meterpreter channel.
|
||||||
|
#
|
||||||
|
###
|
||||||
|
class Tcp < Rex::Post::Meterpreter::Channels::Stream
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Factory
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
def Tcp.open(client, host, port)
|
||||||
|
return Channel.create(client, 'net_stream_tcp',
|
||||||
|
self, CHANNEL_FLAG_SYNCHRONOUS,
|
||||||
|
[
|
||||||
|
{ 'type' =>
|
||||||
|
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
#
|
||||||
|
# Constructor
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
# Passes the initialization information up to the base class
|
||||||
|
def initialize(client, cid, type, flags)
|
||||||
|
super(client, cid, type, flags)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end; end; end; end
|
|
@ -73,13 +73,8 @@ protected
|
||||||
|
|
||||||
# Creates a File channel using the supplied information
|
# Creates a File channel using the supplied information
|
||||||
def _open(name, mode = "r", perms = 0)
|
def _open(name, mode = "r", perms = 0)
|
||||||
return Channel.create(self.client, 'stdapi_fs_file',
|
return Rex::Post::Meterpreter::Channels::Pools::File.open(
|
||||||
Rex::Post::Meterpreter::Channels::Pools::File,
|
self.client, name, mode, perms)
|
||||||
CHANNEL_FLAG_SYNCHRONOUS,
|
|
||||||
[
|
|
||||||
{ 'type' => TLV_TYPE_FILE_PATH, 'value' => name },
|
|
||||||
{ 'type' => TLV_TYPE_FILE_MODE, 'value' => mode + "b" },
|
|
||||||
])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessor :client
|
attr_accessor :client
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
require 'Rex/Post/Meterpreter/Extension'
|
require 'Rex/Post/Meterpreter/Extension'
|
||||||
|
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Tlv'
|
||||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Dir'
|
require 'Rex/Post/Meterpreter/Extensions/Stdapi/Dir'
|
||||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/File'
|
require 'Rex/Post/Meterpreter/Extensions/Stdapi/File'
|
||||||
require 'Rex/Post/Meterpreter/Extensions/Stdapi/FileStat'
|
require 'Rex/Post/Meterpreter/Extensions/Stdapi/FileStat'
|
||||||
|
@ -13,28 +14,6 @@ module Meterpreter
|
||||||
module Extensions
|
module Extensions
|
||||||
module Stdapi
|
module Stdapi
|
||||||
|
|
||||||
# Process
|
|
||||||
TLV_TYPE_PID = TLV_META_TYPE_UINT | 0
|
|
||||||
|
|
||||||
# Registry
|
|
||||||
TLV_TYPE_HKEY = TLV_META_TYPE_UINT | 1000
|
|
||||||
TLV_TYPE_ROOT_KEY = TLV_TYPE_HKEY
|
|
||||||
TLV_TYPE_BASE_KEY = TLV_META_TYPE_STRING | 1001
|
|
||||||
TLV_TYPE_PERMISSION = TLV_META_TYPE_UINT | 1002
|
|
||||||
TLV_TYPE_KEY_NAME = TLV_META_TYPE_STRING | 1003
|
|
||||||
TLV_TYPE_VALUE_NAME = TLV_META_TYPE_STRING | 1010
|
|
||||||
TLV_TYPE_VALUE_TYPE = TLV_META_TYPE_UINT | 1011
|
|
||||||
TLV_TYPE_VALUE_DATA = TLV_META_TYPE_RAW | 1012
|
|
||||||
|
|
||||||
# Fs
|
|
||||||
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
|
|
||||||
TLV_TYPE_FILE_MODE = TLV_META_TYPE_STRING | 1203
|
|
||||||
TLV_TYPE_STAT_BUF = TLV_META_TYPE_COMPLEX | 1220
|
|
||||||
|
|
||||||
DELETE_KEY_FLAG_RECURSIVE = (1 << 0)
|
|
||||||
|
|
||||||
###
|
###
|
||||||
#
|
#
|
||||||
# Stdapi
|
# Stdapi
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
module Rex
|
||||||
|
module Post
|
||||||
|
module Meterpreter
|
||||||
|
module Extensions
|
||||||
|
module Stdapi
|
||||||
|
|
||||||
|
# Process
|
||||||
|
TLV_TYPE_PID = TLV_META_TYPE_UINT | 0
|
||||||
|
|
||||||
|
# Registry
|
||||||
|
TLV_TYPE_HKEY = TLV_META_TYPE_UINT | 1000
|
||||||
|
TLV_TYPE_ROOT_KEY = TLV_TYPE_HKEY
|
||||||
|
TLV_TYPE_BASE_KEY = TLV_META_TYPE_STRING | 1001
|
||||||
|
TLV_TYPE_PERMISSION = TLV_META_TYPE_UINT | 1002
|
||||||
|
TLV_TYPE_KEY_NAME = TLV_META_TYPE_STRING | 1003
|
||||||
|
TLV_TYPE_VALUE_NAME = TLV_META_TYPE_STRING | 1010
|
||||||
|
TLV_TYPE_VALUE_TYPE = TLV_META_TYPE_UINT | 1011
|
||||||
|
TLV_TYPE_VALUE_DATA = TLV_META_TYPE_RAW | 1012
|
||||||
|
|
||||||
|
# Fs
|
||||||
|
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
|
||||||
|
TLV_TYPE_FILE_MODE = TLV_META_TYPE_STRING | 1203
|
||||||
|
TLV_TYPE_STAT_BUF = TLV_META_TYPE_COMPLEX | 1220
|
||||||
|
|
||||||
|
DELETE_KEY_FLAG_RECURSIVE = (1 << 0)
|
||||||
|
|
||||||
|
end; end; end; end; end
|
Loading…
Reference in New Issue