watobo 0.9.21 → 0.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +46 -1
- data/bin/nfq_server.rb +0 -9
- data/bin/watobo_gui.rb +3 -13
- data/custom-views/prettify-json.rb +9 -18
- data/icons/watobo.ico +0 -0
- data/icons/watobo.ico.old +0 -0
- data/lib/watobo.rb +10 -19
- data/lib/watobo/adapters.rb +5 -14
- data/lib/watobo/adapters/data_store.rb +50 -59
- data/lib/watobo/adapters/file/file_store.rb +287 -296
- data/lib/watobo/adapters/file/marshal_store.rb +293 -296
- data/lib/watobo/adapters/session_store.rb +5 -14
- data/lib/watobo/ca.rb +1 -10
- data/lib/watobo/config.rb +197 -206
- data/lib/watobo/constants.rb +0 -9
- data/lib/watobo/core.rb +3 -12
- data/lib/watobo/core/active_check.rb +72 -135
- data/lib/watobo/core/active_checks.rb +49 -58
- data/lib/watobo/core/ca.rb +369 -389
- data/lib/watobo/core/cert_store.rb +34 -43
- data/lib/watobo/core/chat.rb +92 -101
- data/lib/watobo/core/chats.rb +271 -280
- data/lib/watobo/core/client_cert_store.rb +106 -35
- data/lib/watobo/core/conversation.rb +48 -57
- data/lib/watobo/core/cookie.rb +23 -32
- data/lib/watobo/core/egress_handlers.rb +98 -0
- data/lib/watobo/core/finding.rb +66 -75
- data/lib/watobo/core/findings.rb +107 -114
- data/lib/watobo/core/forwarding_proxy.rb +13 -22
- data/lib/watobo/core/fuzz_gen.rb +0 -9
- data/lib/watobo/core/intercept_carver.rb +166 -177
- data/lib/watobo/core/intercept_filter.rb +235 -244
- data/lib/watobo/core/interceptor.rb +98 -107
- data/lib/watobo/core/min_class.rb +4 -13
- data/lib/watobo/core/netfilter_queue.rb +170 -179
- data/lib/watobo/core/ott_cache.rb +132 -141
- data/lib/watobo/core/parameter.rb +43 -52
- data/lib/watobo/core/passive_check.rb +103 -102
- data/lib/watobo/core/passive_checks.rb +48 -57
- data/lib/watobo/core/passive_scanner.rb +54 -55
- data/lib/watobo/core/plugin.rb +11 -20
- data/lib/watobo/core/project.rb +3 -9
- data/lib/watobo/core/proxy.rb +43 -52
- data/lib/watobo/core/request.rb +125 -123
- data/lib/watobo/core/response.rb +44 -53
- data/lib/watobo/core/scanner.rb +0 -9
- data/lib/watobo/core/scanner3.rb +405 -414
- data/lib/watobo/core/scope.rb +83 -92
- data/lib/watobo/core/session.rb +1043 -1026
- data/lib/watobo/core/sid_cache.rb +98 -107
- data/lib/watobo/core/subscriber.rb +25 -34
- data/lib/watobo/defaults.rb +21 -30
- data/lib/watobo/external/diff/lcs.rb +0 -9
- data/lib/watobo/external/diff/lcs/array.rb +0 -9
- data/lib/watobo/external/diff/lcs/block.rb +0 -9
- data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
- data/lib/watobo/external/diff/lcs/change.rb +0 -9
- data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
- data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
- data/lib/watobo/external/diff/lcs/string.rb +0 -9
- data/lib/watobo/externals.rb +6 -15
- data/lib/watobo/framework.rb +4 -13
- data/lib/watobo/framework/create_project.rb +60 -69
- data/lib/watobo/framework/init.rb +0 -9
- data/lib/watobo/framework/init_modules.rb +0 -9
- data/lib/watobo/framework/license_text.rb +28 -37
- data/lib/watobo/framework/load_chat.rb +13 -22
- data/lib/watobo/gui.rb +132 -123
- data/lib/watobo/gui/about_watobo.rb +0 -9
- data/lib/watobo/gui/browser_preview.rb +0 -9
- data/lib/watobo/gui/certificate_dialog.rb +0 -9
- data/lib/watobo/gui/chat_diff.rb +0 -9
- data/lib/watobo/gui/chatviewer_frame.rb +73 -72
- data/lib/watobo/gui/checkboxtree.rb +0 -9
- data/lib/watobo/gui/checks_policy_frame.rb +0 -9
- data/lib/watobo/gui/client_cert_dialog.rb +96 -87
- data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
- data/lib/watobo/gui/conversation_table.rb +158 -164
- data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
- data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
- data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
- data/lib/watobo/gui/custom_viewer.rb +374 -383
- data/lib/watobo/gui/dashboard.rb +296 -303
- data/lib/watobo/gui/define_scope_frame.rb +0 -9
- data/lib/watobo/gui/differ_frame.rb +215 -224
- data/lib/watobo/gui/edit_comment.rb +0 -9
- data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
- data/lib/watobo/gui/export_dialog.rb +104 -113
- data/lib/watobo/gui/finding_info.rb +0 -9
- data/lib/watobo/gui/findings_tree.rb +210 -217
- data/lib/watobo/gui/full_scan_dialog.rb +0 -9
- data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
- data/lib/watobo/gui/fxsave_thread.rb +14 -0
- data/lib/watobo/gui/goto_url_dialog.rb +70 -79
- data/lib/watobo/gui/hex_viewer.rb +0 -9
- data/lib/watobo/gui/html_viewer.rb +287 -296
- data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
- data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
- data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
- data/lib/watobo/gui/json_viewer.rb +287 -0
- data/lib/watobo/gui/list_box.rb +101 -110
- data/lib/watobo/gui/log_file_viewer.rb +32 -41
- data/lib/watobo/gui/log_viewer.rb +83 -88
- data/lib/watobo/gui/login_wizzard.rb +0 -9
- data/lib/watobo/gui/main_window.rb +587 -618
- data/lib/watobo/gui/manual_request_editor.rb +620 -565
- data/lib/watobo/gui/master_pw_dialog.rb +0 -9
- data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
- data/lib/watobo/gui/page_tree.rb +217 -226
- data/lib/watobo/gui/password_policy_dialog.rb +0 -9
- data/lib/watobo/gui/plugin_board.rb +0 -9
- data/lib/watobo/gui/preferences_dialog.rb +0 -9
- data/lib/watobo/gui/progress_window.rb +17 -27
- data/lib/watobo/gui/project_wizzard.rb +0 -9
- data/lib/watobo/gui/proxy_dialog.rb +1 -10
- data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
- data/lib/watobo/gui/request_builder_frame.rb +102 -111
- data/lib/watobo/gui/request_editor.rb +181 -137
- data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
- data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
- data/lib/watobo/gui/save_chat_dialog.rb +140 -149
- data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
- data/lib/watobo/gui/select_chat_dialog.rb +0 -9
- data/lib/watobo/gui/session_management_dialog.rb +0 -9
- data/lib/watobo/gui/sites_tree.rb +0 -9
- data/lib/watobo/gui/status_bar.rb +0 -9
- data/lib/watobo/gui/table_editor.rb +0 -9
- data/lib/watobo/gui/tagless_viewer.rb +0 -9
- data/lib/watobo/gui/templates/plugin.rb +0 -9
- data/lib/watobo/gui/templates/plugin2.rb +92 -100
- data/lib/watobo/gui/templates/plugin_base.rb +144 -153
- data/lib/watobo/gui/text_viewer.rb +0 -9
- data/lib/watobo/gui/transcoder_window.rb +0 -9
- data/lib/watobo/gui/utils/gui_utils.rb +0 -9
- data/lib/watobo/gui/utils/init_icons.rb +86 -95
- data/lib/watobo/gui/utils/load_icons.rb +33 -42
- data/lib/watobo/gui/utils/load_plugins.rb +116 -119
- data/lib/watobo/gui/utils/master_password.rb +68 -77
- data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
- data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
- data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
- data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
- data/lib/watobo/gui/utils/session_history.rb +112 -121
- data/lib/watobo/gui/workspace_dialog.rb +0 -9
- data/lib/watobo/gui/www_auth_dialog.rb +0 -9
- data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
- data/lib/watobo/http.rb +4 -13
- data/lib/watobo/http/cookies/cookies.rb +26 -35
- data/lib/watobo/http/data/data.rb +45 -54
- data/lib/watobo/http/data/json.rb +47 -55
- data/lib/watobo/http/url/url.rb +38 -47
- data/lib/watobo/http/xml/xml.rb +124 -130
- data/lib/watobo/interceptor.rb +3 -12
- data/lib/watobo/interceptor/proxy.rb +742 -739
- data/lib/watobo/interceptor/transparent.rb +22 -24
- data/lib/watobo/mixins.rb +10 -19
- data/lib/watobo/mixins/check_info.rb +27 -36
- data/lib/watobo/mixins/httpparser.rb +613 -637
- data/lib/watobo/mixins/request_parser.rb +88 -97
- data/lib/watobo/mixins/shapers.rb +515 -529
- data/lib/watobo/mixins/transcoders.rb +3 -11
- data/lib/watobo/parser.rb +1 -10
- data/lib/watobo/parser/html.rb +83 -92
- data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
- data/lib/watobo/sockets.rb +3 -12
- data/lib/watobo/sockets/agent.rb +828 -837
- data/lib/watobo/sockets/client_socket.rb +308 -312
- data/lib/watobo/sockets/connection.rb +401 -410
- data/lib/watobo/sockets/http_socket.rb +11 -13
- data/lib/watobo/sockets/ntlm_auth.rb +129 -138
- data/lib/watobo/utils.rb +10 -19
- data/lib/watobo/utils/check_regex.rb +0 -9
- data/lib/watobo/utils/copy_object.rb +0 -9
- data/lib/watobo/utils/crypto.rb +0 -9
- data/lib/watobo/utils/expand_range.rb +23 -32
- data/lib/watobo/utils/export_xml.rb +97 -106
- data/lib/watobo/utils/file_management.rb +9 -11
- data/lib/watobo/utils/hexprint.rb +9 -18
- data/lib/watobo/utils/load_chat.rb +0 -9
- data/lib/watobo/utils/load_icon.rb +0 -9
- data/lib/watobo/utils/ntlm.rb +866 -875
- data/lib/watobo/utils/print_debug.rb +12 -21
- data/lib/watobo/utils/response_builder.rb +90 -99
- data/lib/watobo/utils/response_hash.rb +0 -9
- data/lib/watobo/utils/secure_eval.rb +0 -9
- data/lib/watobo/utils/strings.rb +10 -19
- data/lib/watobo/utils/text2request.rb +0 -9
- data/lib/watobo/utils/url.rb +23 -32
- data/lib/watobo/utils/utf16.rb +11 -20
- data/modules/active/Apache/mod_status.rb +0 -9
- data/modules/active/Apache/multiview.rb +151 -160
- data/modules/active/Flash/crossdomain.rb +0 -9
- data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
- data/modules/active/cq5/cq5_default_selectors.rb +106 -115
- data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
- data/modules/active/directories/dirwalker.rb +0 -9
- data/modules/active/discovery/fileextensions.rb +0 -9
- data/modules/active/discovery/http_methods.rb +0 -9
- data/modules/active/discovery/jsmapfiles.rb +79 -0
- data/modules/active/domino/domino_db.rb +68 -76
- data/modules/active/dotNET/custom_errors.rb +102 -111
- data/modules/active/dotNET/dotnet_files.rb +90 -99
- data/modules/active/fileinclusion/lfi_simple.rb +0 -9
- data/modules/active/jboss/jboss_basic.rb +0 -9
- data/modules/active/sap/business_objects.rb +51 -60
- data/modules/active/sap/its_commands.rb +0 -9
- data/modules/active/sap/its_service_parameter.rb +0 -9
- data/modules/active/sap/its_services.rb +0 -9
- data/modules/active/sap/its_xss.rb +0 -9
- data/modules/active/shell_shock/shell_shock.rb +139 -148
- data/modules/active/siebel/siebel_apps.rb +160 -169
- data/modules/active/sqlinjection/sql_boolean.rb +0 -9
- data/modules/active/sqlinjection/sql_numerical.rb +198 -0
- data/modules/active/sqlinjection/sqli_error.rb +0 -9
- data/modules/active/sqlinjection/sqli_timing.rb +220 -229
- data/modules/active/struts2/default_handler_ognl.rb +106 -115
- data/modules/active/struts2/include_params_ognl.rb +105 -114
- data/modules/active/xml/xml_xxe.rb +112 -123
- data/modules/active/xss/xss_ng.rb +214 -223
- data/modules/active/xss/xss_simple.rb +0 -9
- data/modules/passive/ajax.rb +68 -77
- data/modules/passive/autocomplete.rb +56 -65
- data/modules/passive/cookie_options.rb +0 -9
- data/modules/passive/cookie_xss.rb +0 -9
- data/modules/passive/detect_code.rb +0 -9
- data/modules/passive/detect_fileupload.rb +0 -9
- data/modules/passive/detect_infrastructure.rb +0 -9
- data/modules/passive/detect_one_time_tokens.rb +0 -9
- data/modules/passive/dirindexing.rb +0 -9
- data/modules/passive/disclosure_domino.rb +55 -64
- data/modules/passive/disclosure_emails.rb +0 -9
- data/modules/passive/disclosure_ipaddr.rb +55 -53
- data/modules/passive/filename_as_parameter.rb +0 -9
- data/modules/passive/form_spotter.rb +0 -9
- data/modules/passive/hidden_fields.rb +50 -59
- data/modules/passive/hotspots.rb +0 -9
- data/modules/passive/in_script_parameter.rb +0 -9
- data/modules/passive/json_web_token.rb +93 -0
- data/modules/passive/multiple_server_headers.rb +0 -9
- data/modules/passive/possible_login.rb +0 -9
- data/modules/passive/redirect_url.rb +0 -9
- data/modules/passive/redirectionz.rb +0 -9
- data/modules/passive/sap-headers.rb +56 -65
- data/modules/passive/xss_dom.rb +0 -9
- data/plugins/aem/aem.rb +11 -20
- data/plugins/aem/gui/main.rb +118 -127
- data/plugins/aem/gui/tree_view.rb +171 -180
- data/plugins/aem/lib/agent.rb +130 -138
- data/plugins/aem/lib/dispatcher.rb +45 -51
- data/plugins/aem/lib/engine.rb +177 -186
- data/plugins/catalog/catalog.rb +345 -355
- data/plugins/crawler/crawler.rb +4 -13
- data/plugins/crawler/gui.rb +5 -14
- data/plugins/crawler/gui/auth_frame.rb +270 -279
- data/plugins/crawler/gui/crawler_gui.rb +271 -276
- data/plugins/crawler/gui/general_settings_frame.rb +96 -105
- data/plugins/crawler/gui/hooks_frame.rb +80 -89
- data/plugins/crawler/gui/scope_frame.rb +50 -59
- data/plugins/crawler/gui/settings_tabbook.rb +38 -47
- data/plugins/crawler/gui/status_frame.rb +59 -68
- data/plugins/crawler/lib/bags.rb +18 -27
- data/plugins/crawler/lib/constants.rb +11 -20
- data/plugins/crawler/lib/engine.rb +488 -497
- data/plugins/crawler/lib/grabber.rb +68 -77
- data/plugins/crawler/lib/status.rb +71 -80
- data/plugins/crawler/lib/uri_mp.rb +12 -21
- data/plugins/filefinder/filefinder.rb +326 -333
- data/plugins/sqlmap/bin/test.rb +78 -87
- data/plugins/sqlmap/gui.rb +4 -13
- data/plugins/sqlmap/gui/main.rb +218 -227
- data/plugins/sqlmap/gui/options_frame.rb +97 -106
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
- data/plugins/sqlmap/sqlmap.rb +2 -11
- data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
- data/plugins/sslchecker/gui/cipher_table.rb +246 -254
- data/plugins/sslchecker/gui/gui.rb +258 -264
- data/plugins/sslchecker/gui/sslchecker.rb +4 -13
- data/plugins/sslchecker/lib/check.rb +127 -133
- data/plugins/wshell/gui/main.rb +119 -117
- data/plugins/wshell/lib/core.rb +38 -88
- data/plugins/wshell/wshell.rb +11 -20
- metadata +170 -164
|
@@ -1,88 +1,79 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# ott_cache.rb
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
1
|
# @private
|
|
11
|
-
module Watobo#:nodoc: all
|
|
12
|
-
class OTTCache
|
|
13
|
-
@otts = {}
|
|
14
|
-
@otts_lock = Mutex.new
|
|
15
|
-
|
|
16
|
-
attr :tokens
|
|
17
|
-
|
|
18
|
-
def initialize()
|
|
19
|
-
@tokens = {}
|
|
20
|
-
@tokens_lock = Mutex.new
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.acquire(request)
|
|
24
|
-
urh = request.uniq_hash
|
|
25
|
-
unless @otts.has_key? urh
|
|
26
|
-
@otts[urh] = OTTCache.new()
|
|
27
|
-
end
|
|
28
|
-
@otts[urh]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def self.patterns(&block)
|
|
33
|
-
|
|
34
|
-
Watobo::Conf::OttCache.patterns.each do |p|
|
|
35
|
-
yield p if block_given?
|
|
36
|
-
end
|
|
37
|
-
YAML.load(YAML.dump(Watobo::Conf::OttCache.patterns))
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def update_tokens(response)
|
|
43
|
-
|
|
44
|
-
begin
|
|
45
|
-
# site = request.site
|
|
46
|
-
@tokens_lock.synchronize do
|
|
47
|
-
response.each do |line|
|
|
48
|
-
# puts line
|
|
49
|
-
self.class.patterns do |pat|
|
|
50
|
-
puts pat if $DEBUG
|
|
51
|
-
if line =~ /#{pat}/i then
|
|
52
|
-
token_key = Regexp.quote($1.upcase)
|
|
53
|
-
token_value = $2
|
|
54
|
-
#print "U"
|
|
55
|
-
puts "GOT NEW TOKEN (#{token_key}): #{token_value}" if $DEBUG
|
|
56
|
-
# @session[:valid_csrf_tokens][site] = Hash.new if @session[:valid_csrf_tokens][site].nil?
|
|
57
|
-
# @session[:valid_csrf_tokens][site][token_key] = token_value
|
|
58
|
-
@tokens[token_key] = token_value
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
rescue => bang
|
|
65
|
-
puts bang
|
|
66
|
-
if $DEBUG
|
|
67
|
-
puts bang.backtrace
|
|
68
|
-
puts "= Request"
|
|
69
|
-
puts request
|
|
70
|
-
puts "= Response"
|
|
71
|
-
puts response
|
|
72
|
-
puts "==="
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
end
|
|
76
|
-
# }
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# target could be a Watobo::Chat or a Watobo::Request object
|
|
80
|
-
def self.set_chat_ids(target, ott_chat_ids)
|
|
81
|
-
r = target
|
|
82
|
-
r = target.request if target.respond_to? :request
|
|
83
|
-
@otts_lock.synchronize do
|
|
84
|
-
Watobo::Conf::OttCache.request_ids[r.uniq_hash] = ott_chat_ids
|
|
85
|
-
end
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
class OTTCache
|
|
4
|
+
@otts = {}
|
|
5
|
+
@otts_lock = Mutex.new
|
|
6
|
+
|
|
7
|
+
attr :tokens
|
|
8
|
+
|
|
9
|
+
def initialize()
|
|
10
|
+
@tokens = {}
|
|
11
|
+
@tokens_lock = Mutex.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.acquire(request)
|
|
15
|
+
urh = request.uniq_hash
|
|
16
|
+
unless @otts.has_key? urh
|
|
17
|
+
@otts[urh] = OTTCache.new()
|
|
18
|
+
end
|
|
19
|
+
@otts[urh]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def self.patterns(&block)
|
|
24
|
+
|
|
25
|
+
Watobo::Conf::OttCache.patterns.each do |p|
|
|
26
|
+
yield p if block_given?
|
|
27
|
+
end
|
|
28
|
+
YAML.load(YAML.dump(Watobo::Conf::OttCache.patterns))
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def update_tokens(response)
|
|
34
|
+
|
|
35
|
+
begin
|
|
36
|
+
# site = request.site
|
|
37
|
+
@tokens_lock.synchronize do
|
|
38
|
+
response.each do |line|
|
|
39
|
+
# puts line
|
|
40
|
+
self.class.patterns do |pat|
|
|
41
|
+
puts pat if $DEBUG
|
|
42
|
+
if line =~ /#{pat}/i then
|
|
43
|
+
token_key = Regexp.quote($1.upcase)
|
|
44
|
+
token_value = $2
|
|
45
|
+
#print "U"
|
|
46
|
+
puts "GOT NEW TOKEN (#{token_key}): #{token_value}" if $DEBUG
|
|
47
|
+
# @session[:valid_csrf_tokens][site] = Hash.new if @session[:valid_csrf_tokens][site].nil?
|
|
48
|
+
# @session[:valid_csrf_tokens][site][token_key] = token_value
|
|
49
|
+
@tokens[token_key] = token_value
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
rescue => bang
|
|
56
|
+
puts bang
|
|
57
|
+
if $DEBUG
|
|
58
|
+
puts bang.backtrace
|
|
59
|
+
puts "= Request"
|
|
60
|
+
puts request
|
|
61
|
+
puts "= Response"
|
|
62
|
+
puts response
|
|
63
|
+
puts "==="
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
# }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# target could be a Watobo::Chat or a Watobo::Request object
|
|
71
|
+
def self.set_chat_ids(target, ott_chat_ids)
|
|
72
|
+
r = target
|
|
73
|
+
r = target.request if target.respond_to? :request
|
|
74
|
+
@otts_lock.synchronize do
|
|
75
|
+
Watobo::Conf::OttCache.request_ids[r.uniq_hash] = ott_chat_ids
|
|
76
|
+
end
|
|
86
77
|
end
|
|
87
78
|
|
|
88
79
|
def self.requests(target, &block)
|
|
@@ -93,68 +84,68 @@ module Watobo#:nodoc: all
|
|
|
93
84
|
ott_requests << ott_request
|
|
94
85
|
end
|
|
95
86
|
ott_requests
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# returns an array of Watobo::Requests which are necessary
|
|
99
|
-
# to update the token
|
|
100
|
-
def self.chats(target, &block)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# returns an array of Watobo::Requests which are necessary
|
|
90
|
+
# to update the token
|
|
91
|
+
def self.chats(target, &block)
|
|
101
92
|
ott_chats = []
|
|
102
|
-
return ott_chats if target.nil?
|
|
93
|
+
return ott_chats if target.nil?
|
|
103
94
|
request = target.respond_to?(:request) ? target.request : target
|
|
104
95
|
urh = request.uniq_hash
|
|
105
|
-
|
|
106
|
-
@otts_lock.synchronize do
|
|
107
|
-
return ott_chats unless Watobo::Conf::OttCache.request_ids.has_key? urh
|
|
108
|
-
Watobo::Conf::OttCache.request_ids[urh].each do |id|
|
|
109
|
-
#puts "* [OTT] get chat for id #{id}"
|
|
96
|
+
|
|
97
|
+
@otts_lock.synchronize do
|
|
98
|
+
return ott_chats unless Watobo::Conf::OttCache.request_ids.has_key? urh
|
|
99
|
+
Watobo::Conf::OttCache.request_ids[urh].each do |id|
|
|
100
|
+
#puts "* [OTT] get chat for id #{id}"
|
|
110
101
|
chat = Watobo::Chats.get_by_id(id)
|
|
111
102
|
unless chat.nil?
|
|
112
|
-
#ottr = chat.copyRequest
|
|
103
|
+
#ottr = chat.copyRequest
|
|
113
104
|
ott_chats << chat
|
|
114
105
|
yield chat if block_given?
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
ott_chats
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# update tokens for a specific request
|
|
123
|
-
def update_request(request)
|
|
124
|
-
#urh = target_request.uniq_hash
|
|
125
|
-
#return false unless @tokens.has_key? urh
|
|
126
|
-
@tokens_lock.synchronize do
|
|
127
|
-
request.map!{ |line|
|
|
128
|
-
res = line
|
|
129
|
-
self.class.patterns do |pat|
|
|
130
|
-
begin
|
|
131
|
-
if line =~ /#{pat}/i then
|
|
132
|
-
key = Regexp.quote($1.upcase)
|
|
133
|
-
old_value = $2
|
|
134
|
-
if @tokens.has_key?(key) then
|
|
135
|
-
res = line.gsub!(/#{Regexp.quote(old_value)}/, @tokens[key])
|
|
136
|
-
if res.nil? then
|
|
137
|
-
res = line
|
|
138
|
-
puts "!!!could not update token (#{key})"
|
|
139
|
-
end
|
|
140
|
-
else
|
|
141
|
-
if $DEBUG
|
|
142
|
-
puts "[OTT] nothing to update?"
|
|
143
|
-
puts @tokens.to_yaml
|
|
144
|
-
puts request
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
rescue => bang
|
|
149
|
-
puts bang
|
|
150
|
-
puts bang.backtrace if $DEBUG
|
|
151
|
-
# puts @session.to_yaml
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
res
|
|
155
|
-
}
|
|
156
|
-
end
|
|
157
|
-
# end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
ott_chats
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# update tokens for a specific request
|
|
114
|
+
def update_request(request)
|
|
115
|
+
#urh = target_request.uniq_hash
|
|
116
|
+
#return false unless @tokens.has_key? urh
|
|
117
|
+
@tokens_lock.synchronize do
|
|
118
|
+
request.map!{ |line|
|
|
119
|
+
res = line
|
|
120
|
+
self.class.patterns do |pat|
|
|
121
|
+
begin
|
|
122
|
+
if line =~ /#{pat}/i then
|
|
123
|
+
key = Regexp.quote($1.upcase)
|
|
124
|
+
old_value = $2
|
|
125
|
+
if @tokens.has_key?(key) then
|
|
126
|
+
res = line.gsub!(/#{Regexp.quote(old_value)}/, @tokens[key])
|
|
127
|
+
if res.nil? then
|
|
128
|
+
res = line
|
|
129
|
+
puts "!!!could not update token (#{key})"
|
|
130
|
+
end
|
|
131
|
+
else
|
|
132
|
+
if $DEBUG
|
|
133
|
+
puts "[OTT] nothing to update?"
|
|
134
|
+
puts @tokens.to_yaml
|
|
135
|
+
puts request
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
rescue => bang
|
|
140
|
+
puts bang
|
|
141
|
+
puts bang.backtrace if $DEBUG
|
|
142
|
+
# puts @session.to_yaml
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
res
|
|
146
|
+
}
|
|
147
|
+
end
|
|
148
|
+
# end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
160
151
|
end
|
|
@@ -1,56 +1,47 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# parameter.rb
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
1
|
# @private
|
|
11
|
-
module Watobo#:nodoc: all
|
|
12
|
-
=begin
|
|
13
|
-
|
|
14
|
-
possible locations
|
|
15
|
-
- url
|
|
16
|
-
- header
|
|
17
|
-
- cookie
|
|
18
|
-
- data (body)
|
|
19
|
-
|
|
20
|
-
=end
|
|
21
|
-
class Parameter
|
|
22
|
-
attr :location
|
|
23
|
-
attr :name
|
|
24
|
-
attr_accessor :value
|
|
25
|
-
|
|
26
|
-
def initialize(prefs)
|
|
27
|
-
@location = nil
|
|
28
|
-
@name = prefs[:name]
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
=begin
|
|
4
|
+
|
|
5
|
+
possible locations
|
|
6
|
+
- url
|
|
7
|
+
- header
|
|
8
|
+
- cookie
|
|
9
|
+
- data (body)
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
class Parameter
|
|
13
|
+
attr :location
|
|
14
|
+
attr :name
|
|
15
|
+
attr_accessor :value
|
|
16
|
+
|
|
17
|
+
def initialize(prefs)
|
|
18
|
+
@location = nil
|
|
19
|
+
@name = prefs[:name]
|
|
29
20
|
@value = prefs[:value]
|
|
30
|
-
@prefs = prefs
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class WWWFormParameter < Parameter
|
|
35
|
-
def initialize(prefs)
|
|
36
|
-
super prefs
|
|
37
|
-
@location = :data
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class UrlParameter < Parameter
|
|
43
|
-
def initialize(prefs)
|
|
44
|
-
super prefs
|
|
45
|
-
@location = :url
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class CookieParameter < Parameter
|
|
50
|
-
def initialize(prefs)
|
|
51
|
-
super prefs
|
|
52
|
-
@location = :cookie
|
|
53
|
-
end
|
|
21
|
+
@prefs = prefs
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class WWWFormParameter < Parameter
|
|
26
|
+
def initialize(prefs)
|
|
27
|
+
super prefs
|
|
28
|
+
@location = :data
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class UrlParameter < Parameter
|
|
34
|
+
def initialize(prefs)
|
|
35
|
+
super prefs
|
|
36
|
+
@location = :url
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class CookieParameter < Parameter
|
|
41
|
+
def initialize(prefs)
|
|
42
|
+
super prefs
|
|
43
|
+
@location = :cookie
|
|
44
|
+
end
|
|
54
45
|
end
|
|
55
46
|
|
|
56
47
|
class JSONParameter < Parameter
|
|
@@ -69,5 +60,5 @@ module Watobo#:nodoc: all
|
|
|
69
60
|
@parent = prefs.has_key?(:parent) ? prefs[:parent] : ""
|
|
70
61
|
@namespace = prefs.has_key?(:namespace) ? prefs[:namespace] : nil
|
|
71
62
|
end
|
|
72
|
-
end
|
|
63
|
+
end
|
|
73
64
|
end
|
|
@@ -1,122 +1,123 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# passive_check.rb
|
|
3
|
-
#.
|
|
4
|
-
# Copyright 2014 by siberas, http://www.siberas.de
|
|
5
|
-
# This file is part of WATOBO (Web Application Tool Box) http://watobo.sourceforge.com
|
|
6
|
-
# WATOBO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License.
|
|
7
|
-
# WATOBO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
8
|
-
# You should have received a copy of the GNU General Public License along with WATOBO; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
9
|
-
|
|
10
1
|
# @private
|
|
11
|
-
module Watobo#:nodoc: all
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
2
|
+
module Watobo #:nodoc: all
|
|
3
|
+
class PassiveCheck
|
|
4
|
+
include Watobo::Constants
|
|
5
|
+
extend Watobo::Subscriber
|
|
6
|
+
|
|
7
|
+
@@lock = Mutex.new
|
|
8
|
+
attr :info
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def addFinding(details)
|
|
12
|
+
t = Time.now
|
|
13
|
+
|
|
14
|
+
now = t.strftime("%m/%d/%Y@%H:%M:%S")
|
|
15
|
+
@@lock.synchronize {
|
|
16
|
+
|
|
17
|
+
new_details = Hash.new
|
|
18
|
+
new_details.update(@finding)
|
|
19
|
+
new_details.update(details)
|
|
20
|
+
|
|
21
|
+
new_details[:tstamp] = now
|
|
22
|
+
|
|
23
|
+
unless new_details.has_key?(:fid)
|
|
33
24
|
|
|
34
25
|
id_string = ''
|
|
35
26
|
|
|
36
27
|
id_string << new_details[:chat].request.url.to_s if new_details[:chat]
|
|
37
28
|
id_string << new_details[:class] if new_details[:class]
|
|
38
|
-
id_string << new_details[:title]
|
|
39
|
-
id_string << new_details[:unique]
|
|
29
|
+
id_string << new_details[:title] if new_details[:title]
|
|
30
|
+
id_string << new_details[:unique] if new_details[:unique]
|
|
40
31
|
|
|
41
32
|
if id_string.empty? then
|
|
42
33
|
id_string = rand(10000)
|
|
43
34
|
end
|
|
44
35
|
#puts "Finding #{id_string}"
|
|
45
36
|
new_details[:fid] = Digest::MD5.hexdigest(id_string)
|
|
46
|
-
|
|
37
|
+
end
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
new_details[:module] = self.class.to_s
|
|
49
40
|
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
41
|
+
if details[:debug] == true then
|
|
42
|
+
puts "---"
|
|
43
|
+
puts new_details[:class]
|
|
44
|
+
puts new_details[:title]
|
|
45
|
+
puts "---"
|
|
46
|
+
end
|
|
47
|
+
request = new_details[:chat].request
|
|
48
|
+
response = new_details[:chat].response
|
|
49
|
+
new_details[:chat_id] = new_details[:chat].id
|
|
50
|
+
|
|
51
|
+
# shorten pattern here because of crash in FXRex:match with large patterns
|
|
52
|
+
unless new_details[:proof_pattern].nil?
|
|
53
|
+
new_details[:proof_pattern] = new_details[:proof_pattern].length > 128 ? new_details[:proof_pattern][0..127] : new_details[:proof_pattern]
|
|
54
|
+
end
|
|
55
|
+
unless new_details[:check_pattern].nil?
|
|
56
|
+
new_details[:check_pattern] = new_details[:check_pattern].length > 128 ? new_details[:check_pattern][0..127] : new_details[:check_pattern]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
new_details.delete(:chat)
|
|
60
|
+
|
|
61
|
+
new_finding = Watobo::Finding.new(request, response, new_details)
|
|
62
|
+
|
|
63
|
+
Watobo::Findings.add new_finding
|
|
64
|
+
|
|
65
|
+
#@project.addFinding(new_finding)
|
|
66
|
+
# notify(:new_finding, new_finding)
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def enabled?
|
|
71
|
+
@enabled
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def enabled=(status)
|
|
75
|
+
@enabled = status
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def enable
|
|
79
|
+
@enabled = true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def disable
|
|
83
|
+
@enable = false
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def do_test(chat)
|
|
87
|
+
raise "function do_test not defined"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def initialize(project)
|
|
91
|
+
@project = project
|
|
92
|
+
@enabled = true
|
|
92
93
|
|
|
93
94
|
#@event_dispatcher_listeners = Hash.new
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
:check_name => '',
|
|
97
|
-
:check_group => '',
|
|
98
|
-
:description => '',
|
|
96
|
+
@info = {
|
|
97
|
+
:check_name => '', # name of check which briefly describes functionality, will be used for tree and progress views
|
|
98
|
+
:check_group => '', # groupname of check, will be used to group checks, e.g. :Generic, SAP, :Enumeration
|
|
99
|
+
:description => '', # description of checkfunction
|
|
99
100
|
:author => "not modified", # author of check
|
|
100
|
-
:version => "unversioned",
|
|
101
|
-
:target => nil
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
:title => 'untitled',
|
|
106
|
-
:check_pattern => nil,
|
|
107
|
-
:proof_pattern => nil,
|
|
108
|
-
:threat => '',
|
|
109
|
-
:measure => '',
|
|
110
|
-
:class => "undefined"
|
|
111
|
-
:subclass => nil,
|
|
112
|
-
:type => FINDING_TYPE_UNDEFINED,
|
|
113
|
-
:chat => nil,
|
|
114
|
-
:rating=> VULN_RATING_UNDEFINED,
|
|
115
|
-
:cvss => "n/a",
|
|
116
|
-
:icon => nil,
|
|
117
|
-
:timestamp => nil
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
end
|
|
101
|
+
:version => "unversioned", # check version
|
|
102
|
+
:target => nil # reserved
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@finding = {
|
|
106
|
+
:title => 'untitled', # [String] title name, used for finding tree
|
|
107
|
+
:check_pattern => nil, # [String] regex of vulnerability check if possible, will be used for highlighting
|
|
108
|
+
:proof_pattern => nil, # [String] regex of finding proof if possible, will be used for highlighting
|
|
109
|
+
:threat => '', # threat of vulnerability, e.g. loss of information
|
|
110
|
+
:measure => '', # measure
|
|
111
|
+
:class => "undefined", # [String] vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
|
112
|
+
:subclass => nil, # reserved
|
|
113
|
+
:type => FINDING_TYPE_UNDEFINED, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
|
114
|
+
:chat => nil, # related chat must be linked
|
|
115
|
+
:rating => VULN_RATING_UNDEFINED, #
|
|
116
|
+
:cvss => "n/a", # CVSS Base Vector
|
|
117
|
+
:icon => nil, # Icon Type
|
|
118
|
+
:timestamp => nil # timestamp
|
|
119
|
+
}
|
|
120
|
+
|
|
121
121
|
end
|
|
122
|
+
end
|
|
122
123
|
end
|