diff --git a/lib/msf/ui/gtk2/about.rb b/lib/msf/ui/gtk2/about.rb index 04d4274506..2eacf6748f 100644 --- a/lib/msf/ui/gtk2/about.rb +++ b/lib/msf/ui/gtk2/about.rb @@ -2,16 +2,24 @@ module Msf module Ui module Gtk2 + ### + # + # This class provides the about button + # + ### class MyAbout < Gtk::AboutDialog include Msf::Ui::Gtk2::MyControls - Gtk::AboutDialog.set_email_hook {|about, link| + # TODO + Gtk::AboutDialog.set_email_hook do |about, link| puts "Mail to #{link}" - } - Gtk::AboutDialog.set_url_hook {|about, link| + end + + # TODO + Gtk::AboutDialog.set_url_hook do |about, link| puts "Launch a browser to url #{link}" - } + end def initialize(parent) super() diff --git a/lib/msf/ui/gtk2/app.rb b/lib/msf/ui/gtk2/app.rb index 8b905cb22e..9320d14cb2 100644 --- a/lib/msf/ui/gtk2/app.rb +++ b/lib/msf/ui/gtk2/app.rb @@ -2,9 +2,11 @@ module Msf module Ui module Gtk2 - ## + ### + # # This class help us to wait the next release of ruby-libglade2 package - ## + # + ### class GladeXML < GladeXML def connect(source, target, signal, handler, data, after = false) @handler_proc ||= Proc.new{} @@ -52,11 +54,12 @@ module Msf end end - ## + ### + # # This class help us to retreive all glade widgets and place them in your user instance # like @windows, @widget, ... - ## - + # + ### class MyGlade include Msf::Ui::Gtk2::MyControls @@ -75,9 +78,11 @@ module Msf end end - ## - # This is the main class - ## + ### + # + # This class provides the main window. + # + ### class MyApp < MyGlade include Msf::Ui::Gtk2::MyControls @@ -246,6 +251,7 @@ module Msf framework.stats.num_auxiliary.to_s + " auxiliary" ) end + end end diff --git a/lib/msf/ui/gtk2/assistant/auxiliary.rb b/lib/msf/ui/gtk2/assistant/auxiliary.rb index 82a3768fdd..48f3130d3e 100644 --- a/lib/msf/ui/gtk2/assistant/auxiliary.rb +++ b/lib/msf/ui/gtk2/assistant/auxiliary.rb @@ -2,19 +2,24 @@ module Msf module Ui module Gtk2 - ## - # This class perform an assistant to configure module - ## + ### + # + # This class provides an assistant to configure module + # + ### class MsfAssistant + ### + # + # This class provides an assistant to configure auxiliary module + # + ### class Auxiliary < Msf::Ui::Gtk2::Assistant # to stock our values WIZARD2 = {} - WizardStruct2 = Struct.new('Wizard2', - :description, :page, - :options_state, :review_state) + WizardStruct2 = Struct.new('Wizard2', :description, :page, :options_state, :review_state) ARRAY2 = [ ['Options', @@ -34,9 +39,6 @@ module Msf include Msf::Ui::Gtk2::MyControls - # - # Init - # def initialize(active_module) @active_module = active_module @@ -47,16 +49,10 @@ module Msf super(@active_module.refname) # Initialize exploit driver's exploit instance - #@mydriver = Msf::ExploitDriver.new(framework) - #@mydriver.exploit = framework.auxiliary.create(@active_module.refname) @mydriver = $gtk2driver @mydriver.exploit = framework.auxiliary.create(@active_module.refname) @mydriver.active_module = @active_module - # Populate the datastore if possible - #@mydriver.exploit.load_config - - # Main interface @frame_advanced = Gtk::Expander.new("Advanced") @frame_evasion = Gtk::Expander.new("Evasion") @@ -86,7 +82,6 @@ module Msf # Save configuration for MsfAssistant # def save - dump_to_hash() @mydriver.exploit.datastore.import_options_from_hash(@hash, imported = false) @@ -113,7 +108,6 @@ module Msf [@label_options], # actual [@label_review] # next ) - #button_forward.set_sensitive(false) display() options_completion() else @@ -147,7 +141,6 @@ module Msf # Display options view # def options_completion - self.page = "options" # Expanded frame @@ -254,7 +247,6 @@ module Msf # Validate options in datastore # def validate - dump_to_hash() errors = [] @@ -340,12 +332,11 @@ module Msf MsfDialog::Error.new(self, "Auxiliary failed", e.to_s) return false end - - end - end + + end # MsfAssistant::Auxiliary - end + end # Auxiliary end end diff --git a/lib/msf/ui/gtk2/assistant/exploit.rb b/lib/msf/ui/gtk2/assistant/exploit.rb index c81bbda2a8..8f43fff2d9 100644 --- a/lib/msf/ui/gtk2/assistant/exploit.rb +++ b/lib/msf/ui/gtk2/assistant/exploit.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class provides an assistant to configure module + # + ### class MsfAssistant - ## - # This class perform an assistant to configure exploit - ## + ### + # + # This class perform an assistant to configure and launch exploit + # + ### class Exploit < Msf::Ui::Gtk2::Assistant # to stock our values @@ -42,9 +49,6 @@ module Msf include Msf::Ui::Gtk2::MyControls - # - # Init - # def initialize(active_module) @active_module = active_module @session_tree = $gtk2driver.session_tree @@ -60,8 +64,6 @@ module Msf # Populate the datastore if possible @mydriver.exploit.load_config - # p @mydriver.exploit.datastore - # Main interface @frame_advanced = Gtk::Expander.new("Advanced") @@ -98,7 +100,6 @@ module Msf # Save configuration for MsfAssistant # def save - dump_to_hash() @mydriver.exploit.datastore.import_options_from_hash(@hash, imported = false) @@ -139,7 +140,6 @@ module Msf [@label_options], # actual [@label_review] # next ) - #button_forward.set_sensitive(false) display() options_completion() elsif (self.page == "options") @@ -149,7 +149,6 @@ module Msf [@label_options], # actual [@label_review] # next ) - #button_forward.set_sensitive(false) display() options_completion() else @@ -266,6 +265,7 @@ module Msf rescue combo_all.active = 0 end + # Pack & renderer combo_all renderer = Gtk::CellRendererText.new combo_all.pack_start(renderer, true) @@ -332,11 +332,10 @@ module Msf # Pack self.main.pack_start(@options_required, false, false, 10) - # Display temporaly desactived + # TODO: Display temporaly desactived #self.main.pack_start(@frame_advanced, false, false, 10) #self.main.pack_start(@frame_evasion, false, false, 10) - # Payload options @mydriver.payload = framework.payloads.create(@hash["PAYLOAD"]) @@ -370,7 +369,7 @@ module Msf @options_evasion.pack_start(add_option(key, opt, @mydriver.exploit.datastore[key]), false, false, 10) end - # Display temporaly desactived + # TODO: Display temporaly desactived #@frame_advanced.set_label("Advanced") #@frame_advanced.add(@options_advanced) #@frame_evasion.set_label("Evasion") @@ -423,7 +422,6 @@ module Msf # Validate options in datastore # def validate - dump_to_hash() errors = [] @@ -440,12 +438,10 @@ module Msf end if (errors.empty? == false) - #button_forward.set_sensitive(false) MsfDialog::Error.new(self, "Failed to validate : #{errors.join(', ')}") false else true - #button_forward.set_sensitive(true) end end @@ -473,7 +469,6 @@ module Msf # Fire !! # def apply - # Import options from the supplied assistant @mydriver.exploit.datastore.import_options_from_hash(@hash) @@ -487,8 +482,6 @@ module Msf @mydriver.exploit.init_ui(@pipe, @pipe) @mydriver.payload.init_ui(@pipe, @pipe) - # Session registration is done by event handler - # XXX: No output from the exploit when this is set! @mydriver.use_job = true @pipe.create_subscriber_proc() do |msg| @@ -503,7 +496,6 @@ module Msf end end - @pipe.print_status("Launching exploit #{@mydriver.exploit.refname}...") begin @@ -512,9 +504,10 @@ module Msf @pipe.print_error("Exploit failed: #{e}") end end - end + + end # MsfAssistant::Exploit - end + end # Exploit end end diff --git a/lib/msf/ui/gtk2/assistant/skeleton.rb b/lib/msf/ui/gtk2/assistant/skeleton.rb index 0327352b73..ee3f4bc12f 100644 --- a/lib/msf/ui/gtk2/assistant/skeleton.rb +++ b/lib/msf/ui/gtk2/assistant/skeleton.rb @@ -3,9 +3,11 @@ module Msf module Gtk2 - ## - # This class perform a wizard - ## + ### + # + # This class provides a skeleton wizard (assitant) to configure the MSF module + # + ### class Assistant < Gtk::Window include Msf::Ui::Gtk2::MyControls @@ -14,7 +16,7 @@ module Msf attr_accessor :button_back, :button_forward def initialize(title) - super + super() self.resizable = false self.set_default_size(600, 400) self.title = title @@ -286,7 +288,8 @@ module Msf return frame_label end - end + + end # Assistant end end diff --git a/lib/msf/ui/gtk2/assistant/tips.rb b/lib/msf/ui/gtk2/assistant/tips.rb index 217eceb7b3..dbd175d5f7 100644 --- a/lib/msf/ui/gtk2/assistant/tips.rb +++ b/lib/msf/ui/gtk2/assistant/tips.rb @@ -2,9 +2,11 @@ module Msf module Ui module Gtk2 + ### # # Subclass the TreeViewTooltips to add our get_tooltip function # + ### class AssistantTips < Msf::Ui::Gtk2::TreeViewTooltips def initialize(column) @@ -19,8 +21,8 @@ module Msf return iter.get_value(3) end end - end - + + end # AssistantTips end end diff --git a/lib/msf/ui/gtk2/assistant/types.rb b/lib/msf/ui/gtk2/assistant/types.rb index e002239cb0..8832531c98 100644 --- a/lib/msf/ui/gtk2/assistant/types.rb +++ b/lib/msf/ui/gtk2/assistant/types.rb @@ -23,5 +23,7 @@ require 'msf/ui/gtk2/assistant/types/port' require 'msf/ui/gtk2/assistant/types/address' require 'msf/ui/gtk2/assistant/types/path' require 'msf/ui/gtk2/assistant/types/integer' + +# TODO #require 'msf/ui/gtk2/assistant/types/enum' #require 'msf/ui/gtk2/assistant/types/addressrange' diff --git a/lib/msf/ui/gtk2/assistant/types/address.rb b/lib/msf/ui/gtk2/assistant/types/address.rb index f4d9d4a221..2ce521e6d8 100644 --- a/lib/msf/ui/gtk2/assistant/types/address.rb +++ b/lib/msf/ui/gtk2/assistant/types/address.rb @@ -2,11 +2,18 @@ module Msf module Ui module Gtk2 + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes - + + ### # # OptAddress - IP address or hostname # + ### class Address < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) @@ -63,11 +70,10 @@ module Msf return self.key, @entry.text end - end + end # MsfTypes::Address - end + end # MsfTypes end - end end diff --git a/lib/msf/ui/gtk2/assistant/types/bool.rb b/lib/msf/ui/gtk2/assistant/types/bool.rb index b202e4af64..12eafa45d3 100644 --- a/lib/msf/ui/gtk2/assistant/types/bool.rb +++ b/lib/msf/ui/gtk2/assistant/types/bool.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptBool - Boolean true or false indication # + ### class Bool < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) @@ -55,11 +62,10 @@ module Msf return self.key, @checkbutton.active? end - end + end # MsfTypes::Bool - end + end # MSfTypes end - end end diff --git a/lib/msf/ui/gtk2/assistant/types/integer.rb b/lib/msf/ui/gtk2/assistant/types/integer.rb index 90ec9087bb..5a7cda95e0 100644 --- a/lib/msf/ui/gtk2/assistant/types/integer.rb +++ b/lib/msf/ui/gtk2/assistant/types/integer.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptInt - An integer value # + ### class Int < Msf::Ui::Gtk2::SkeletonType include Msf::Ui::Gtk2::MyControls @@ -55,9 +62,9 @@ module Msf return self.key, @entry.text end - end + end # MSfTypes::Integer - end + end # MsfTypes end end diff --git a/lib/msf/ui/gtk2/assistant/types/path.rb b/lib/msf/ui/gtk2/assistant/types/path.rb index 3eb186ce54..8f3ae02658 100644 --- a/lib/msf/ui/gtk2/assistant/types/path.rb +++ b/lib/msf/ui/gtk2/assistant/types/path.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptPath - Path name on disk # + ### class Path < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) @@ -51,11 +58,10 @@ module Msf return self.key, @button.filename end - end + end # MsfTypes::Path - end + end # MsfTypes end - end end diff --git a/lib/msf/ui/gtk2/assistant/types/port.rb b/lib/msf/ui/gtk2/assistant/types/port.rb index 3cc30b0c4a..24cf756c4e 100644 --- a/lib/msf/ui/gtk2/assistant/types/port.rb +++ b/lib/msf/ui/gtk2/assistant/types/port.rb @@ -2,11 +2,18 @@ module Msf module Ui module Gtk2 + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptPort - TCP/UDP service port # + ### class Port < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) @@ -16,7 +23,7 @@ module Msf end # - # + # An entry port port # def pack_option(default, store) hbox = Gtk::HBox.new(false, 10) diff --git a/lib/msf/ui/gtk2/assistant/types/raw.rb b/lib/msf/ui/gtk2/assistant/types/raw.rb index f663f755dc..722c7c1c34 100644 --- a/lib/msf/ui/gtk2/assistant/types/raw.rb +++ b/lib/msf/ui/gtk2/assistant/types/raw.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptRaw - Multi-byte raw string # + ### class Raw < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) @@ -16,7 +23,7 @@ module Msf end # - # + # Pack a ComboBox to choose between seh, raw and process # def pack_option(default, store) lock_by_store = nil diff --git a/lib/msf/ui/gtk2/assistant/types/string.rb b/lib/msf/ui/gtk2/assistant/types/string.rb index ed2fb1fa42..5082a10b14 100644 --- a/lib/msf/ui/gtk2/assistant/types/string.rb +++ b/lib/msf/ui/gtk2/assistant/types/string.rb @@ -1,12 +1,19 @@ module Msf module Ui module Gtk2 - + + ### + # + # This class is dedicated to support all MSF options by a Gtk2 widget + # + ### class MsfTypes + ### # # OptString - Multi-byte character string # + ### class String < Msf::Ui::Gtk2::SkeletonType def initialize(key, opt, store) diff --git a/lib/msf/ui/gtk2/console/console.rb b/lib/msf/ui/gtk2/console/console.rb index f83e8049e9..49ed07c1c1 100644 --- a/lib/msf/ui/gtk2/console/console.rb +++ b/lib/msf/ui/gtk2/console/console.rb @@ -4,38 +4,38 @@ module Msf class Console - - + ### # - # Classic console herited from Gtk::Window + # Classic console herited from SkeletonConsole # + ### class Shell < Msf::Ui::Gtk2::SkeletonConsole - + def initialize(iter) super(iter) end - end # Shell + end # Console::Shell + ### # - # Meterpreter Console + # Meterpreter Console herited from SkeletonConsole # + ### class Meterpreter < Msf::Ui::Gtk2::SkeletonConsole + def initialize(iter) - # meterpreter client client = iter[3] # call the parent super(iter) - # Not sexy - # TODO: use the API - send_cmd("execute -f cmd.exe -i -H") - + # TODO: use the API instead writing into the pipe + send_cmd("execute -f cmd.exe -i -H") end - end # Meterpreter + end # Console::Meterpreter end # Console diff --git a/lib/msf/ui/gtk2/frame/sessions_tree.rb b/lib/msf/ui/gtk2/frame/sessions_tree.rb index ead18755f7..dd33873595 100644 --- a/lib/msf/ui/gtk2/frame/sessions_tree.rb +++ b/lib/msf/ui/gtk2/frame/sessions_tree.rb @@ -2,6 +2,11 @@ module Msf module Ui module Gtk2 + ### + # + # This class perform the sessions display + # + ### class MySessionTree ID_SESSION, PEER, TYPE, O_SESSION, O_BUFFER = *(0..5).to_a diff --git a/lib/msf/ui/gtk2/meterpreter/stdapi/fs.rb b/lib/msf/ui/gtk2/meterpreter/stdapi/fs.rb index f4bfb872c7..91cd3006e1 100644 --- a/lib/msf/ui/gtk2/meterpreter/stdapi/fs.rb +++ b/lib/msf/ui/gtk2/meterpreter/stdapi/fs.rb @@ -16,7 +16,7 @@ module Msf # The session @client = client - + local = File.join(driver.resource_directory, "sessions") remote = @client.fs.dir.getwd @@ -133,19 +133,20 @@ module Msf end # Go through each source item and upload them - src_items.each { |src| + src_items.each do |src| stat = ::File.stat(src) if (stat.directory?) - @client.fs.dir.upload(dest, src, recursive) { |step, src, dst| + @client.fs.dir.upload(dest, src, recursive) do |step, src, dst| $gtk2driver.append_log_view("#{step.ljust(11)}: #{src} -> #{dst}\n") - } + end elsif (stat.file?) - @client.fs.file.upload(dest, src) { |step, src, dst| + @client.fs.file.upload(dest, src) do |step, src, dst| $gtk2driver.append_log_view("#{step.ljust(11)}: #{src} -> #{dst}\n") - } + end end - } + end + rescue ::Exception => e MsfDialog::Warning.new(self, "Upload: Operation failed", e.to_s) end