Module: Watobo

Included in:
Gui::ActionSelect, Gui::FuzzerGenSelect, Gui::InterceptorUI, Gui::MainWindow
Defined in:
lib/watobo.rb,
lib/watobo/gui.rb,
lib/watobo/utils.rb,
lib/watobo/config.rb,
lib/watobo/mixins.rb,
lib/watobo/core/ca.rb,
lib/watobo/defaults.rb,
lib/watobo/constants.rb,
lib/watobo/core/chat.rb,
lib/watobo/utils/url.rb,
lib/watobo/core/chats.rb,
lib/watobo/core/proxy.rb,
lib/watobo/core/scope.rb,
lib/watobo/utils/ntlm.rb,
lib/watobo/core/cookie.rb,
lib/watobo/core/plugin.rb,
lib/watobo/parser/html.rb,
lib/watobo/utils/utf16.rb,
lib/watobo/core/finding.rb,
lib/watobo/core/project.rb,
lib/watobo/core/request.rb,
lib/watobo/core/scanner.rb,
lib/watobo/core/session.rb,
lib/watobo/gui/list_box.rb,
lib/watobo/http/url/url.rb,
lib/watobo/http/xml/xml.rb,
lib/watobo/utils/crypto.rb,
lib/watobo/core/findings.rb,
lib/watobo/core/fuzz_gen.rb,
lib/watobo/core/response.rb,
lib/watobo/core/scanner3.rb,
lib/watobo/gui/chat_diff.rb,
lib/watobo/gui/dashboard.rb,
lib/watobo/gui/page_tree.rb,
lib/watobo/sockets/agent.rb,
lib/watobo/utils/strings.rb,
lib/watobo/core/min_class.rb,
lib/watobo/core/ott_cache.rb,
lib/watobo/core/parameter.rb,
lib/watobo/core/sid_cache.rb,
lib/watobo/framework/init.rb,
lib/watobo/gui/fuzzer_gui.rb,
lib/watobo/gui/hex_viewer.rb,
lib/watobo/gui/log_viewer.rb,
lib/watobo/gui/sites_tree.rb,
lib/watobo/gui/status_bar.rb,
lib/watobo/http/data/data.rb,
lib/watobo/http/data/json.rb,
lib/watobo/mixins/shapers.rb,
lib/watobo/utils/hexprint.rb,
lib/watobo/core/cert_store.rb,
lib/watobo/core/subscriber.rb,
lib/watobo/gui/html_viewer.rb,
lib/watobo/gui/json_viewer.rb,
lib/watobo/gui/main_window.rb,
lib/watobo/gui/text_viewer.rb,
lib/watobo/utils/load_chat.rb,
lib/watobo/utils/load_icon.rb,
lib/watobo/core/interceptor.rb,
lib/watobo/gui/about_watobo.rb,
lib/watobo/gui/checkboxtree.rb,
lib/watobo/gui/checkboxtree.rb,
lib/watobo/gui/differ_frame.rb,
lib/watobo/gui/edit_comment.rb,
lib/watobo/gui/finding_info.rb,
lib/watobo/gui/plugin_board.rb,
lib/watobo/gui/proxy_dialog.rb,
lib/watobo/gui/table_editor.rb,
lib/watobo/utils/export_xml.rb,
lib/watobo/core/active_check.rb,
lib/watobo/core/conversation.rb,
lib/watobo/gui/custom_viewer.rb,
lib/watobo/gui/export_dialog.rb,
lib/watobo/gui/findings_tree.rb,
lib/watobo/gui/fxsave_thread.rb,
lib/watobo/interceptor/proxy.rb,
lib/watobo/mixins/check_info.rb,
lib/watobo/mixins/httpparser.rb,
lib/watobo/sockets/ntlm_auth.rb,
lib/watobo/utils/check_regex.rb,
lib/watobo/utils/copy_object.rb,
lib/watobo/utils/print_debug.rb,
lib/watobo/utils/secure_eval.rb,
lib/watobo/core/active_checks.rb,
lib/watobo/core/passive_check.rb,
lib/watobo/gui/request_editor.rb,
lib/watobo/gui/tagless_viewer.rb,
lib/watobo/mixins/transcoders.rb,
lib/watobo/sockets/connection.rb,
lib/watobo/utils/expand_range.rb,
lib/watobo/utils/text2request.rb,
lib/watobo/adapters/data_store.rb,
lib/watobo/core/passive_checks.rb,
lib/watobo/framework/load_chat.rb,
lib/watobo/gui/browser_preview.rb,
lib/watobo/gui/goto_url_dialog.rb,
lib/watobo/gui/interceptor_gui.rb,
lib/watobo/gui/log_file_viewer.rb,
lib/watobo/gui/progress_window.rb,
lib/watobo/gui/project_wizzard.rb,
lib/watobo/gui/utils/gui_utils.rb,
lib/watobo/gui/www_auth_dialog.rb,
lib/watobo/sockets/http_socket.rb,
lib/watobo/utils/response_hash.rb,
lib/watobo/core/egress_handlers.rb,
lib/watobo/core/netfilter_queue.rb,
lib/watobo/core/passive_scanner.rb,
lib/watobo/gui/chatviewer_frame.rb,
lib/watobo/gui/full_scan_dialog.rb,
lib/watobo/gui/master_pw_dialog.rb,
lib/watobo/gui/save_chat_dialog.rb,
lib/watobo/gui/templates/plugin.rb,
lib/watobo/gui/utils/init_icons.rb,
lib/watobo/gui/utils/load_icons.rb,
lib/watobo/gui/workspace_dialog.rb,
lib/watobo/gui/xml_viewer_frame.rb,
lib/watobo/http/cookies/cookies.rb,
lib/watobo/core/forwarding_proxy.rb,
lib/watobo/core/intercept_carver.rb,
lib/watobo/core/intercept_filter.rb,
lib/watobo/gui/csrf_token_dialog.rb,
lib/watobo/gui/edit_scope_dialog.rb,
lib/watobo/gui/quick_scan_dialog.rb,
lib/watobo/gui/templates/plugin2.rb,
lib/watobo/gui/transcoder_window.rb,
lib/watobo/mixins/request_parser.rb,
lib/watobo/sockets/client_socket.rb,
lib/watobo/utils/file_management.rb,
lib/watobo/adapters/session_store.rb,
lib/watobo/core/client_cert_store.rb,
lib/watobo/framework/init_modules.rb,
lib/watobo/framework/license_text.rb,
lib/watobo/gui/certificate_dialog.rb,
lib/watobo/gui/client_cert_dialog.rb,
lib/watobo/gui/conversation_table.rb,
lib/watobo/gui/define_scope_frame.rb,
lib/watobo/gui/preferences_dialog.rb,
lib/watobo/gui/select_chat_dialog.rb,
lib/watobo/gui/utils/load_plugins.rb,
lib/watobo/utils/response_builder.rb,
lib/watobo/gui/checks_policy_frame.rb,
lib/watobo/gui/confirm_scan_dialog.rb,
lib/watobo/gui/mixins/gui_settings.rb,
lib/watobo/interceptor/transparent.rb,
lib/watobo/adapters/file/file_store.rb,
lib/watobo/framework/create_project.rb,
lib/watobo/gui/rewrite_rules_dialog.rb,
lib/watobo/gui/manual_request_editor.rb,
lib/watobo/gui/request_builder_frame.rb,
lib/watobo/gui/templates/plugin_base.rb,
lib/watobo/gui/utils/master_password.rb,
lib/watobo/gui/utils/session_history.rb,
lib/watobo/gui/password_policy_dialog.rb,
lib/watobo/gui/rewrite_filters_dialog.rb,
lib/watobo/adapters/file/marshal_store.rb,
lib/watobo/gui/conversation_table_ctrl.rb,
lib/watobo/gui/intercept_filter_dialog.rb,
lib/watobo/gui/scanner_settings_dialog.rb,
lib/watobo/gui/conversation_table_ctrl2.rb,
lib/watobo/gui/session_management_dialog.rb,
lib/watobo/gui/utils/save_proxy_settings.rb,
lib/watobo/gui/interceptor_settings_dialog.rb,
lib/watobo/gui/utils/save_default_settings.rb,
lib/watobo/gui/utils/save_scanner_settings.rb

Defined Under Namespace

Modules: CA, CertStore, CheckInfoMixin, ClientCertStore, Conf, Constants, Crypto, EgressHandlers, Findings, ForwardingProxy, Gui, HTTP, HTTPData, HTTPSocket, Interceptor, Mixin, Mixins, NFQueue, NTLM, Parser, PassiveScanner, Plugin, Subscriber, Template, UTF16, Utils Classes: ActiveCheck, ActiveModules, Chat, Chats, Conversation, Cookie, CookieParameter, DataStore, FileSessionStore, Finding, FuzzCounter, FuzzFile, FuzzGenerator, FuzzList, JSONParameter, MinClass, OTTCache, Parameter, PassiveCheck, PassiveModules, Plugin2, PluginBase, PluginGui, Project, Proxy, Request, Response, SIDCache, Scanner2, Scanner3, Scope, Session, SessionStore, UrlParameter, WWWFormParameter, XmlParameter

Constant Summary collapse

VERSION =

:nodoc: all #:nodoc: all

"0.9.23"
LICENSE =

:nodoc: all

"Copyright 2011 by siberas, http://www.siberas.de\n\nDisclaimer: You should only use WATOBO to perform \nvulnerability audits of your own web applications or\nthose you are authorized to do so. siberas takes no\nresponsibility if you use it for unlawful purposes.\n \nWATOBO is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public \nLicense as published by the Free Software Foundation \nversion 2 of the License.\n\nWATOBO is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied \nwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR \nPURPOSE.  See the GNU General Public License for more \ndetails.\n\nYou should have received a copy of the GNU \nGeneral Public License along with WATOBO; if not, \nwrite to the Free Software Foundation, Inc., 51 \nFranklin St, Fifth Floor, Boston, MA  02110-1301\nUSA\n"

Class Method Summary collapse

Class Method Details

.active_checksObject



14
15
16
# File 'lib/watobo/framework/init.rb', line 14

def self.active_checks
  @active_checks
end

.active_module_pathObject



66
67
68
69
# File 'lib/watobo.rb', line 66

def self.active_module_path
  @active_module_path = ""
  @active_path = File.join(base_directory, "modules", "active")
end

.base_directoryObject



56
57
58
59
# File 'lib/watobo.rb', line 56

def self.base_directory
  @base_directory ||= ""
  @base_directory = File.expand_path(File.join(File.dirname(__FILE__),".."))
end

.create_project(prefs = {}) ⇒ Object

create_project is a wrapper function to create a new project you can either create a project by giving a URL (:url), or by giving a :project_name AND a :session_name



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/watobo/framework/create_project.rb', line 22

def self.create_project(prefs={})
  project_settings = Hash.new
  # project_settings.update @settings

  if prefs.has_key? :url
    #TODO: create project_settings from url
    else
    project_settings[:project_name] = prefs[:project_name]
    project_settings[:session_name] = prefs[:session_name]
  end

  Watobo::DataStore.connect(project_settings[:project_name], project_settings[:session_name])
  @project_name = project_settings[:project_name]
  @session_name = project_settings[:session_name]

  # updating settings
  Watobo::Conf.load_project_settings()
  Watobo::Conf.load_session_settings()

  #project_settings[:session_store] = ds

  puts "* INIT PASSIVE MODULES"
  Watobo::PassiveModules.init
  puts
  puts "Total: " + Watobo::PassiveModules.length.to_s
 # project_settings[:passive_checks] = init_passive_modules
  #puts "Total: " + project_settings[:passive_checks].length.to_s
  #puts
  puts "* INIT ACTIVE MODULES"
  #project_settings[:active_checks] = init_active_modules
  Watobo::ActiveModules.init
  #  project_settings[:active_checks].each do |ac|
  #    puts ac.class
  #  end
  puts
  puts "Total: " + Watobo::ActiveModules.length.to_s
  puts

  project = Project.new(project_settings)
  #@running_projects << project
  @project = project

end

.create_request(url, prefs = {}) ⇒ Object

:nodoc: all



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/watobo/core/request.rb', line 3

def self.create_request(url, prefs={})
  unless url =~ /^https?:\/\//
    u = "http://#{url}"
  else
    u = url
  end

  uri = URI.parse u
  r = "GET #{uri.to_s} HTTP/1.1\n"
  r << "Host: #{uri.host}\n"
  r << "User-Agent: WATOBO\n"
  r << "Accept: */*\n"
  r.extend Watobo::Mixins::RequestParser
  r.to_request
end

.init_frameworkObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/watobo/framework/init.rb', line 22

def self.init_framework()
  init_working_directory

  Watobo::Conf.each do |cm|
   # puts "\n=== #{cm.group_name} ==="
   # puts cm.to_h.to_yaml
    cm.update
   # puts "#"
   # puts cm.to_h.to_yaml
  end

  init_workspace_path
  init_active_modules
  init_passive_modules
end

.load_chat(project, session, chat_id) ⇒ Object

:nodoc: all



3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/watobo/framework/load_chat.rb', line 3

def self.load_chat(project, session, chat_id)
  path = File.join Watobo.workspace_path, project.to_s, session.to_s, Watobo::Conf::Datastore.conversations
  unless File.exist? path
    puts "Could not find conversation path for #{project}/#{session} in #{Watobo.workspace_path}"
    return nil
  end
  chat_file = "#{chat_id}-chat.yml"
  chat = Watobo::Utils.loadChatYAML File.join(path, chat_file)
  puts chat.class
  chat
  
end

.load_defaultsObject

:nodoc: all



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/watobo/defaults.rb', line 3

def self.load_defaults
  config_path = File.expand_path(File.join(File.dirname(__FILE__),"..","..", "config"))
  #   puts "* loading defaults from #{config_path}"
  Dir.glob("#{config_path}/*.yml").each do |cf|
    dummy = File.basename(cf).gsub!(/.yml/,'')
    #cc = dummy.strip.gsub(/[^[a-zA-Z\-_]]/,"").gsub( "-" , "_").split("_").map{ |s| s.downcase.capitalize }.join
    cc = Watobo::Utils.camelcase dummy
    begin
      settings = YAML.load_file(cf)
      Watobo::Conf.add(cc,  settings )
    rescue => bang
      puts "[#{self}] Could not load config #{cf}"
    end
  end
end

.log(message, prefs = {}) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/watobo/adapters/data_store.rb', line 58

def self.log(message, prefs={})
  
  text = message
  if message.is_a? Array
    text = message.join("\n| ")
  end
  
  #clean up sender's name
  if prefs.has_key? :sender
    prefs[:sender].gsub!(/.*::/,'')
  end
  
  if DataStore.engine.respond_to? :logger
    DataStore.engine.logger message, prefs
  end
end

.logsObject



53
54
55
56
# File 'lib/watobo/adapters/data_store.rb', line 53

def self.logs
  return "" if DataStore.engine.nil?
  DataStore.engine.logs
end

.passive_checksObject



18
19
20
# File 'lib/watobo/framework/init.rb', line 18

def self.passive_checks
  @passive_checks
end

.passive_module_pathObject



71
72
73
74
# File 'lib/watobo.rb', line 71

def self.passive_module_path
  @passive_module_path = ""
  @passive_path = File.join(base_directory, "modules", "passive")
end

.plugin_pathObject



61
62
63
64
# File 'lib/watobo.rb', line 61

def self.plugin_path
  @plugin_directory ||= ""
  @plugin_directory = File.join(base_directory, "plugins")
end

:nodoc: all



3
4
5
6
7
8
9
10
11
12
13
# File 'lib/watobo/utils/print_debug.rb', line 3

def self.print_debug(*m)
  fl = m.shift
  puts "#"
  puts "# #{fl} #"
  if m.length > 0
    m.each do |l|
      puts l
    end
    puts "# " + "-"*fl.length + " #"
  end
end

.projectObject



15
16
17
# File 'lib/watobo/framework/create_project.rb', line 15

def self.project
  @project
end

.project_nameObject



7
8
9
# File 'lib/watobo/framework/create_project.rb', line 7

def self.project_name
  @project_name
end

.running_projectsObject



10
11
12
# File 'lib/watobo/framework/init.rb', line 10

def self.running_projects
  @running_projects
end

.save_proxy_settings(prefs = {}) ⇒ Object

:nodoc: all



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/watobo/gui/utils/save_proxy_settings.rb', line 3

def self.save_proxy_settings(prefs={})
  
  puts "* save proxy settings"

  c_prefs = {
    :save_passwords => false,
    :key => ""
  }

  c_prefs.update prefs

  unless Watobo.project.nil?
    Watobo::Conf::ForwardingProxy.save_project() do |s|
      s.each do |name, proxy|
        next unless proxy.is_a? Hash
        unless c_prefs[:save_passwords] == false
          unless c_prefs[:key].empty?
          #asdfa
          end
        else
          proxy[:password] = ''
        end
      end
    end
  else

    Watobo::Conf::ForwardingProxy.save do |s|
      s.each do |name, proxy|
        next unless proxy.is_a? Hash
        unless c_prefs[:save_passwords] == false
          unless c_prefs[:key].empty?
          #asdfa
          end
        else
          proxy[:password] = ''
        end
      end
    end
  end

end

.save_proxy_settings_UNUSED(prefs = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/watobo/gui/utils/save_proxy_settings.rb', line 45

def self.save_proxy_settings_UNUSED(prefs={})
  
  puts "* save proxy settings"

  c_prefs = {
    :save_passwords => false,
    :key => ""
  }

  c_prefs.update prefs

  unless Watobo.project.nil?
    Watobo::Conf::ForwardingProxy.save_project() do |s|
      s.each do |name, proxy|
        next unless proxy.is_a? Hash
        unless c_prefs[:save_passwords] == false
          unless c_prefs[:key].empty?
          #asdfa
          end
        else
          proxy[:password] = ''
        end
      end
    end
  else

    Watobo::Conf::ForwardingProxy.save do |s|
      s.each do |name, proxy|
        next unless proxy.is_a? Hash
        unless c_prefs[:save_passwords] == false
          unless c_prefs[:key].empty?
          #asdfa
          end
        else
          proxy[:password] = ''
        end
      end
    end
  end

end

.save_thread(ms = 250, &block) ⇒ Object



2
3
4
# File 'lib/watobo/gui/fxsave_thread.rb', line 2

def self.save_thread(ms=250, &block)
  FXApp.instance.addTimeout(ms, :repeat => true, &block)
end

.save_thread_UNUSED(ms = 250, &block) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/watobo/gui/fxsave_thread.rb', line 6

def self.save_thread_UNUSED(ms=250, &block)
  Thread.new {
    loop do
      sleep 0.5
      Watobo::Gui.application.runOnUiThread(&block)
    end
  }
end

.session_nameObject



11
12
13
# File 'lib/watobo/framework/create_project.rb', line 11

def self.session_name
  @session_name
end

.temp_directoryObject



38
39
40
# File 'lib/watobo/framework/init.rb', line 38

def self.temp_directory
  @tmp_dir
end

.versionObject



76
77
78
# File 'lib/watobo.rb', line 76

def self.version
  Watobo::VERSION
end

.working_directoryObject



42
43
44
45
# File 'lib/watobo/framework/init.rb', line 42

def self.working_directory
  # puts "Method Obsolet! use Watobo::Conf::General.working_directory instead."
  Watobo::Conf::General.working_directory
end

.workspace_pathObject



52
53
54
# File 'lib/watobo/framework/init.rb', line 52

def self.workspace_path
  Watobo::Conf::General.workspace_path
end

.workspace_path=(new_wsp) ⇒ Object



47
48
49
50
# File 'lib/watobo/framework/init.rb', line 47

def self.workspace_path=(new_wsp)
  # puts "Method Obsolet! use Watobo::Conf::General.workspace_path instead."
  Watobo::Conf::General.workspace_path = new_wsp
end