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,35 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
1
|
+
# @private
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module ClientCertStore#:nodoc: all
|
|
4
|
+
@client_certs = {}
|
|
5
|
+
@project = nil
|
|
6
|
+
|
|
7
|
+
# :ssl_client_cert
|
|
8
|
+
# :ssl_client_key
|
|
9
|
+
# :extra_chain_certs
|
|
10
|
+
|
|
11
|
+
def self.clear
|
|
12
|
+
@client_certs.clear
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.add_pem( site, cert_file, key_file, password=nil)
|
|
16
|
+
cinfo = { :type => :pem,
|
|
17
|
+
:certificate_file => cert_file,
|
|
18
|
+
:key_file => key_file,
|
|
19
|
+
:password => password
|
|
20
|
+
}
|
|
21
|
+
begin
|
|
22
|
+
cinfo[:ssl_client_cert] = OpenSSL::X509::Certificate.new(File.read(cert_file))
|
|
23
|
+
cinfo[:ssl_client_key] = OpenSSL::PKey::RSA.new(File.read(key_file))
|
|
24
|
+
@client_certs[site] = cinfo
|
|
25
|
+
return false
|
|
26
|
+
rescue => bang
|
|
27
|
+
puts bang
|
|
28
|
+
end
|
|
29
|
+
false
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.add_pkcs12( site, cert_file, password=nil )
|
|
34
|
+
cinfo = { :type => :pkcs12,
|
|
35
|
+
:certificate_file => cert_file,
|
|
36
|
+
:password => password
|
|
37
|
+
}
|
|
38
|
+
begin
|
|
39
|
+
p12 = OpenSSL::PKCS12.new( File.read(cert_file), password)
|
|
40
|
+
cinfo[:ssl_client_cert] = p12.certificate
|
|
41
|
+
cinfo[:ssl_client_key] = p12.key
|
|
42
|
+
cinfo[:extra_chain_certs] = p12.ca_certs
|
|
43
|
+
|
|
44
|
+
@client_certs[site] = cinfo
|
|
45
|
+
return true
|
|
46
|
+
rescue => bang
|
|
47
|
+
puts bang
|
|
48
|
+
end
|
|
49
|
+
false
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.set( site, cert )
|
|
54
|
+
return false if cert.nil?
|
|
55
|
+
@client_certs[ site.to_sym ] = cert
|
|
56
|
+
save
|
|
57
|
+
true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.certs
|
|
61
|
+
Marshal::load(Marshal::dump(@client_certs))
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.certs=(client_certs)
|
|
65
|
+
@client_certs = client_certs
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.get( site )
|
|
69
|
+
return nil unless @client_certs.has_key? site.to_sym
|
|
70
|
+
@client_certs[ site.to_sym ]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.load
|
|
74
|
+
certs = Watobo::DataStore.load_project_settings('ClientCertStore')
|
|
75
|
+
return false if certs.nil?
|
|
76
|
+
@client_certs = certs
|
|
77
|
+
@client_certs.each do |site, cinfo|
|
|
78
|
+
begin
|
|
79
|
+
case cinfo[:type]
|
|
80
|
+
when :pem
|
|
81
|
+
add_pem(site, cinfo[:certificate_file], cinfo[:key_file], cinfo[:password])
|
|
82
|
+
when :pkcs12
|
|
83
|
+
add_pkcs12(site, cinfo[:certificate_file], cinfo[:password])
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
rescue => bang
|
|
87
|
+
puts bang
|
|
88
|
+
puts bang.backtrace
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def self.save
|
|
94
|
+
out = {}
|
|
95
|
+
@client_certs.each do |site, cinfo|
|
|
96
|
+
data = {}
|
|
97
|
+
[:certificate_file, :key_file, :type ].each do |k|
|
|
98
|
+
data[k] = cinfo[k]
|
|
99
|
+
end
|
|
100
|
+
out[site] = data
|
|
101
|
+
end
|
|
102
|
+
Watobo::DataStore.save_project_settings('ClientCertStore', out)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -1,59 +1,50 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# conversation.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 Conversation
|
|
13
|
-
include Watobo::Constants
|
|
14
|
-
attr_accessor :file
|
|
15
|
-
def id()
|
|
16
|
-
# must be defined
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def copyRequest()
|
|
20
|
-
# req_copy = []
|
|
21
|
-
# self.request.each do |line|
|
|
22
|
-
# req_copy.push line.clone
|
|
23
|
-
# end
|
|
24
|
-
orig = Utils.copyObject(@request)
|
|
25
|
-
# now extend the new request with the Watobo mixins
|
|
26
|
-
#copy.extend Watobo::Mixin::Parser::Url
|
|
27
|
-
#copy.extend Watobo::Mixin::Parser::Web10
|
|
28
|
-
#copy.extend Watobo::Mixin::Shaper::Web10
|
|
29
|
-
copy = Watobo::Request.new(orig)
|
|
30
|
-
return copy
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
# def extendRequest
|
|
36
|
-
# @request.extend Watobo::Mixin::Shaper::Web10
|
|
37
|
-
# @request.extend Watobo::Mixin::Parser::Web10
|
|
38
|
-
# @request.extend Watobo::Mixin::Parser::Url
|
|
39
|
-
# end
|
|
40
|
-
|
|
41
|
-
# def extendResponse
|
|
42
|
-
# @response.extend Watobo::Mixin::Parser::Web10
|
|
43
|
-
# end
|
|
44
|
-
|
|
45
|
-
def initialize(request, response)
|
|
46
|
-
@request = Watobo::Request.new request
|
|
47
|
-
@response = Watobo::Response.new response
|
|
48
|
-
@file = nil
|
|
49
|
-
|
|
50
|
-
# extendRequest()
|
|
51
|
-
# extendResponse()
|
|
52
|
-
#Watobo::Request.create @request
|
|
53
|
-
#Watobo::Response.create @response
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
end
|
|
58
|
-
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
class Conversation
|
|
4
|
+
include Watobo::Constants
|
|
5
|
+
attr_accessor :file
|
|
6
|
+
def id()
|
|
7
|
+
# must be defined
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def copyRequest()
|
|
11
|
+
# req_copy = []
|
|
12
|
+
# self.request.each do |line|
|
|
13
|
+
# req_copy.push line.clone
|
|
14
|
+
# end
|
|
15
|
+
orig = Utils.copyObject(@request)
|
|
16
|
+
# now extend the new request with the Watobo mixins
|
|
17
|
+
#copy.extend Watobo::Mixin::Parser::Url
|
|
18
|
+
#copy.extend Watobo::Mixin::Parser::Web10
|
|
19
|
+
#copy.extend Watobo::Mixin::Shaper::Web10
|
|
20
|
+
copy = Watobo::Request.new(orig)
|
|
21
|
+
return copy
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# def extendRequest
|
|
27
|
+
# @request.extend Watobo::Mixin::Shaper::Web10
|
|
28
|
+
# @request.extend Watobo::Mixin::Parser::Web10
|
|
29
|
+
# @request.extend Watobo::Mixin::Parser::Url
|
|
30
|
+
# end
|
|
31
|
+
|
|
32
|
+
# def extendResponse
|
|
33
|
+
# @response.extend Watobo::Mixin::Parser::Web10
|
|
34
|
+
# end
|
|
35
|
+
|
|
36
|
+
def initialize(request, response)
|
|
37
|
+
@request = Watobo::Request.new request
|
|
38
|
+
@response = Watobo::Response.new response
|
|
39
|
+
@file = nil
|
|
40
|
+
|
|
41
|
+
# extendRequest()
|
|
42
|
+
# extendResponse()
|
|
43
|
+
#Watobo::Request.create @request
|
|
44
|
+
#Watobo::Response.create @response
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
59
50
|
end
|
data/lib/watobo/core/cookie.rb
CHANGED
|
@@ -1,27 +1,18 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# cookie.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
|
-
#Set-Cookie: mycookie=b41dc9e55d6163f78321996b10c940edcec1b4e55a76464c4e9d25e160ac0ec5b769806b; path=/; secure
|
|
14
|
-
class Cookie < Parameter
|
|
15
|
-
|
|
16
|
-
attr :name
|
|
17
|
-
attr :value
|
|
18
|
-
attr :path
|
|
19
|
-
attr :secure
|
|
20
|
-
attr :http_only
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
|
|
4
|
+
#Set-Cookie: mycookie=b41dc9e55d6163f78321996b10c940edcec1b4e55a76464c4e9d25e160ac0ec5b769806b; path=/; secure
|
|
5
|
+
class Cookie < Parameter
|
|
6
|
+
|
|
7
|
+
attr :name
|
|
8
|
+
attr :value
|
|
9
|
+
attr :path
|
|
10
|
+
attr :secure
|
|
11
|
+
attr :http_only
|
|
21
12
|
|
|
22
|
-
def to_s
|
|
23
|
-
"#{@name}=#{@value}"
|
|
24
|
-
end
|
|
13
|
+
def to_s
|
|
14
|
+
"#{@name}=#{@value}"
|
|
15
|
+
end
|
|
25
16
|
|
|
26
17
|
def initialize(prefs)
|
|
27
18
|
@secure = false
|
|
@@ -46,14 +37,14 @@ module Watobo#:nodoc: all
|
|
|
46
37
|
@path = m.nil? ? "" : m[1].strip
|
|
47
38
|
@secure = true if chunks.select{|c| c =~ /Secure/i }
|
|
48
39
|
@http_only = true if chunks.select{|c| c =~ /HttpOnly/i }
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
#if prefs.is_a? Hash
|
|
52
|
-
# #TODO: create cookie with hash-settings
|
|
53
|
-
# else
|
|
54
|
-
# raise ArgumentError, "Need hash (:name, :value, ...) or string (Set-Cookie:...)"
|
|
55
|
-
#end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
#if prefs.is_a? Hash
|
|
43
|
+
# #TODO: create cookie with hash-settings
|
|
44
|
+
# else
|
|
45
|
+
# raise ArgumentError, "Need hash (:name, :value, ...) or string (Set-Cookie:...)"
|
|
46
|
+
#end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
59
50
|
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# @private
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
|
|
4
|
+
module EgressHandlers
|
|
5
|
+
|
|
6
|
+
CONFIG_FILE = 'egress_config.yml'
|
|
7
|
+
MAX_HISTORY = 5
|
|
8
|
+
|
|
9
|
+
@handlers = {}
|
|
10
|
+
@history = []
|
|
11
|
+
@last = nil
|
|
12
|
+
def self.list(&block)
|
|
13
|
+
@handlers.each_key do |name|
|
|
14
|
+
yield name if block_given?
|
|
15
|
+
end
|
|
16
|
+
@handlers.each_key.to_a
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.add(file)
|
|
20
|
+
load file
|
|
21
|
+
update
|
|
22
|
+
save_config
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.last
|
|
26
|
+
@last
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.last=(name)
|
|
30
|
+
@last = name
|
|
31
|
+
save_config
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.create(name)
|
|
35
|
+
# puts "create egress-handler #{name}"
|
|
36
|
+
fkey = name.to_sym
|
|
37
|
+
return nil unless @handlers.has_key? fkey
|
|
38
|
+
@handlers[fkey].new()
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.update
|
|
42
|
+
constants.each do |name|
|
|
43
|
+
next if name == :CONFIG_FILE
|
|
44
|
+
next if name == :MAX_HISTORY
|
|
45
|
+
h = class_eval(name.to_s)
|
|
46
|
+
h_name = h.name.gsub(/.*::/, '').to_sym
|
|
47
|
+
@handlers[h_name] = h
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.length
|
|
52
|
+
@handlers.length
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.reload
|
|
56
|
+
@history.each do |file|
|
|
57
|
+
load file
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.load(file)
|
|
62
|
+
begin
|
|
63
|
+
Kernel.load file
|
|
64
|
+
@history << file
|
|
65
|
+
@history.uniq!
|
|
66
|
+
@history.shift if @history.length > MAX_HISTORY
|
|
67
|
+
|
|
68
|
+
rescue SyntaxError => bang
|
|
69
|
+
puts bang
|
|
70
|
+
puts bang.backtrace
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.init
|
|
76
|
+
@cfg_file = File.join Watobo.working_directory, 'conf', CONFIG_FILE
|
|
77
|
+
load_config
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def self.load_config
|
|
81
|
+
cfg = Watobo::DataStore.load_project_settings(self.name.gsub(/^.*::/,''))
|
|
82
|
+
return false if cfg.nil?
|
|
83
|
+
@last = cfg[:last]
|
|
84
|
+
@history = cfg[:history]
|
|
85
|
+
reload
|
|
86
|
+
update
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def self.save_config
|
|
90
|
+
cfg = { :last => @last,
|
|
91
|
+
:history => @history
|
|
92
|
+
}
|
|
93
|
+
Watobo::DataStore.save_project_settings(self.name.gsub(/^.*::/,''), cfg)
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
data/lib/watobo/core/finding.rb
CHANGED
|
@@ -1,50 +1,41 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# finding.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 Finding < Conversation
|
|
13
|
-
|
|
14
|
-
@@numFindings = 0
|
|
15
|
-
@@max_id = 0
|
|
16
|
-
|
|
17
|
-
@@lock = Mutex.new
|
|
18
|
-
|
|
19
|
-
attr :details
|
|
20
|
-
attr :request
|
|
21
|
-
attr :response
|
|
22
|
-
def resetCounters()
|
|
23
|
-
@@numFindings = 0
|
|
24
|
-
@@max_id = 0
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def id()
|
|
28
|
-
@details[:id]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def false_positive?
|
|
32
|
-
@details[:false_positive]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def set_false_positive
|
|
36
|
-
@details[:false_positive] = true
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def unset_false_positive
|
|
40
|
-
@details[:false_positive] = false
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def method_missing(name, *args, &block)
|
|
44
|
-
if @details.has_key? name
|
|
45
|
-
return @details[name]
|
|
46
|
-
end
|
|
47
|
-
super
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
class Finding < Conversation
|
|
4
|
+
|
|
5
|
+
@@numFindings = 0
|
|
6
|
+
@@max_id = 0
|
|
7
|
+
|
|
8
|
+
@@lock = Mutex.new
|
|
9
|
+
|
|
10
|
+
attr :details
|
|
11
|
+
attr :request
|
|
12
|
+
attr :response
|
|
13
|
+
def resetCounters()
|
|
14
|
+
@@numFindings = 0
|
|
15
|
+
@@max_id = 0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def id()
|
|
19
|
+
@details[:id]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def false_positive?
|
|
23
|
+
@details[:false_positive]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def set_false_positive
|
|
27
|
+
@details[:false_positive] = true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def unset_false_positive
|
|
31
|
+
@details[:false_positive] = false
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def method_missing(name, *args, &block)
|
|
35
|
+
if @details.has_key? name
|
|
36
|
+
return @details[name]
|
|
37
|
+
end
|
|
38
|
+
super
|
|
48
39
|
end
|
|
49
40
|
|
|
50
41
|
def to_h
|
|
@@ -52,33 +43,33 @@ module Watobo#:nodoc: all
|
|
|
52
43
|
h[:request] = @request.to_a
|
|
53
44
|
h[:response] = @response.to_a
|
|
54
45
|
h
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def initialize(request, response, details = {})
|
|
58
|
-
super(request, response)
|
|
59
|
-
@details = {
|
|
60
|
-
:id => -1,
|
|
61
|
-
:comment => '',
|
|
62
|
-
:false_positive => false # FalsePositive
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@details.update details if details.is_a? Hash
|
|
66
|
-
|
|
67
|
-
@@lock.synchronize{
|
|
68
|
-
# enter critical section here ???
|
|
69
|
-
if @details[:id] > 0 and @details[:id] > @@max_id
|
|
70
|
-
@@max_id = @details[:id]
|
|
71
|
-
elsif @details[:id] < 0
|
|
72
|
-
@@max_id += 1
|
|
73
|
-
@details[:id] = @@max_id
|
|
74
|
-
end
|
|
75
|
-
@@numFindings += 1
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
# extendRequest()
|
|
79
|
-
# extendResponse()
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def initialize(request, response, details = {})
|
|
49
|
+
super(request, response)
|
|
50
|
+
@details = {
|
|
51
|
+
:id => -1,
|
|
52
|
+
:comment => '',
|
|
53
|
+
:false_positive => false # FalsePositive
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@details.update details if details.is_a? Hash
|
|
57
|
+
|
|
58
|
+
@@lock.synchronize{
|
|
59
|
+
# enter critical section here ???
|
|
60
|
+
if @details[:id] > 0 and @details[:id] > @@max_id
|
|
61
|
+
@@max_id = @details[:id]
|
|
62
|
+
elsif @details[:id] < 0
|
|
63
|
+
@@max_id += 1
|
|
64
|
+
@details[:id] = @@max_id
|
|
65
|
+
end
|
|
66
|
+
@@numFindings += 1
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
# extendRequest()
|
|
70
|
+
# extendResponse()
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
84
75
|
end
|