watobo 0.9.21 → 0.9.23
Sign up to get free protection for your applications and to get access to all the features.
- 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,12 +1,3 @@
|
|
1
|
-
#.
|
2
|
-
# crossdomain.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
|
# .
|
11
2
|
# crossdomain.rb
|
12
3
|
#
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# @private
|
2
|
+
module Watobo #:nodoc: all
|
3
|
+
module Modules
|
4
|
+
module Active
|
5
|
+
module Jwt
|
6
|
+
|
7
|
+
class Jwt_oauth2_none < Watobo::ActiveCheck
|
8
|
+
@@tested_directories = Hash.new
|
9
|
+
|
10
|
+
threat =<<'EOF'
|
11
|
+
Privilege Escalation
|
12
|
+
EOF
|
13
|
+
|
14
|
+
#
|
15
|
+
details =<<'EOD'
|
16
|
+
|
17
|
+
EOD
|
18
|
+
|
19
|
+
|
20
|
+
measure = 'Only accept secure algorithms.'
|
21
|
+
|
22
|
+
@info.update(
|
23
|
+
:check_name => 'OAuth2 Anonymous JWT', # name of check which briefly describes functionality, will be used for tree and progress views
|
24
|
+
:check_group => 'JWT',
|
25
|
+
:description => 'Checks if anonymous token (without signature) is supported by the application.', # description of checkfunction
|
26
|
+
:author => 'Andreas Schmidt', # author of check
|
27
|
+
:version => '1.0' # check version
|
28
|
+
)
|
29
|
+
|
30
|
+
@finding.update(
|
31
|
+
:threat => threat, # thread of vulnerability, e.g. loss of information
|
32
|
+
:class => "JWT - None", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
33
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
34
|
+
:rating => VULN_RATING_CRITICAL,
|
35
|
+
:measure => measure,
|
36
|
+
:details => details
|
37
|
+
)
|
38
|
+
|
39
|
+
def initialize(project, prefs={})
|
40
|
+
super(project, prefs)
|
41
|
+
|
42
|
+
def reset
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def generateChecks(chat)
|
51
|
+
begin
|
52
|
+
# Check for JWT Bearer Header, e.g.
|
53
|
+
# Authorization: Bearer asdfasdfasdf.alksjdflkjsdlfjkweoriuwoejosjfoijowemrjosjajjojpj.Xm7q8hzlXlooWPyZPayq ...
|
54
|
+
bearer = chat.request.headers(' Bearer ')[0]
|
55
|
+
return true if bearer.nil?
|
56
|
+
|
57
|
+
jwt = bearer.match(/Bearer (.*)/)[1]
|
58
|
+
jh, jp, js = jwt.split('.')
|
59
|
+
jh = JSON.parse(Base64.decode64(jh))
|
60
|
+
jp = JSON.parse(Base64.decode64(jp))
|
61
|
+
|
62
|
+
# remove 'alg' from original header
|
63
|
+
jh.delete 'alg'
|
64
|
+
|
65
|
+
# TODO: improve check to also compare responses which don't have a body
|
66
|
+
body_orig = chat.response.body.to_s
|
67
|
+
return true if body_orig.empty?
|
68
|
+
|
69
|
+
checker = proc {
|
70
|
+
request = nil
|
71
|
+
response = nil
|
72
|
+
test_request = chat.copyRequest
|
73
|
+
|
74
|
+
# create new token with original header fields - except 'alg'
|
75
|
+
token = JWT.encode jp, nil, 'none', jh
|
76
|
+
|
77
|
+
new_auth_header = "Bearer #{token}"
|
78
|
+
|
79
|
+
test_request.set_header 'Authorization', new_auth_header
|
80
|
+
|
81
|
+
request, response = doRequest(test_request)
|
82
|
+
|
83
|
+
if response.body.to_s.strip == body_orig.strip
|
84
|
+
|
85
|
+
addFinding(request, response,
|
86
|
+
:check_pattern => token,
|
87
|
+
:proof_pattern => body_orig.strip,
|
88
|
+
#:test_item => '',
|
89
|
+
:chat => chat,
|
90
|
+
:title => "[#{request.file}]"
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
[request, response]
|
95
|
+
}
|
96
|
+
yield checker
|
97
|
+
|
98
|
+
rescue => bang
|
99
|
+
puts bang
|
100
|
+
puts bang.backtrace if $DEBUG
|
101
|
+
puts "ERROR!! #{Module.nesting[0].name}"
|
102
|
+
raise
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -1,116 +1,107 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
|
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
|
1
|
+
# @private
|
2
|
+
module Watobo#:nodoc: all
|
3
|
+
module Modules
|
4
|
+
module Active
|
5
|
+
module Cq5
|
6
|
+
#class Dir_indexing < Watobo::Mixin::Session
|
7
|
+
class Cq5_default_selectors < Watobo::ActiveCheck
|
9
8
|
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
test_response =
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
9
|
+
@info.update(
|
10
|
+
:check_name => 'CQ5 Selectors', # name of check which briefly describes functionality, will be used for tree and progress views
|
11
|
+
:description => "This module checks for default selectors.", # description of checkfunction
|
12
|
+
:author => "Andreas Schmidt", # author of check
|
13
|
+
:version => "1.0", # check version
|
14
|
+
:check_group => "CQ5"
|
15
|
+
)
|
16
|
+
|
17
|
+
@finding.update(
|
18
|
+
:threat => 'Selectors can reveal sensitive information about the application, e.g. password hashes (jackrabbit). Also, the query selector enables you to perform XPATH queries on the entire repository, which could slow your system down considerably, or even cause a denial of service if run multiple times', # thread of vulnerability, e.g. loss of information
|
19
|
+
:class => "CQ5: Selectors", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
20
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
21
|
+
:rating => VULN_RATING_INFO
|
22
|
+
)
|
23
|
+
|
24
|
+
def initialize(project, prefs={})
|
25
|
+
super(project, prefs)
|
26
|
+
|
27
|
+
@checked_locations = []
|
28
|
+
@selectors = %w( query assets infinity children s7catalog pages feed feedentry tidy sysview docview permissions overlay 1 2 3 4 5 6 7 )
|
29
|
+
@extensions = %w( json html csv zip xml )
|
30
|
+
# specials are combinations which need one or more parameters to produce a valid result
|
31
|
+
@specials = %w( query.json?statement=%2F%2F%2A cqactions.json?path=/&depth=1&authorizableId=* permissions.overlay.json?path=/ )
|
32
|
+
|
33
|
+
@mixed = @selectors.map{|s| @extensions.map{|e| s + '.' + e } }.flatten
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def reset()
|
38
|
+
@checked_locations = []
|
39
|
+
end
|
40
|
+
|
41
|
+
def generateChecks(chat)
|
42
|
+
path = chat.request.path
|
43
|
+
return false if @checked_locations.include? path
|
44
|
+
@checked_locations << path
|
45
|
+
|
46
|
+
test_extensions = @extensions
|
47
|
+
test_extensions.concat @specials
|
48
|
+
test_extensions.concat @mixed
|
49
|
+
|
50
|
+
test_extensions.each do |ext|
|
51
|
+
checker = proc {
|
52
|
+
begin
|
53
|
+
test_request = nil
|
54
|
+
test_response = nil
|
55
|
+
|
56
|
+
test = chat.copyRequest
|
57
|
+
|
58
|
+
# replace file extension only
|
59
|
+
|
60
|
+
test.set_file_extension(ext)
|
61
|
+
|
62
|
+
status, test_request, test_response = fileExists?(test)
|
63
|
+
|
64
|
+
if status == true and test_response.content_type != chat.response.content_type and test_response.status_code.to_i < 300
|
65
|
+
|
66
|
+
addFinding( test_request, test_response,
|
67
|
+
:test_item => "#{test_request.url}",
|
68
|
+
:proof_pattern => "#{test_response.status}",
|
69
|
+
:chat => chat,
|
70
|
+
:title => "[#{ext}]"
|
71
|
+
)
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
# also test extensions on the path
|
76
|
+
test = chat.copyRequest
|
77
|
+
|
78
|
+
test.replaceFileExt(".#{ext}")
|
79
|
+
|
80
|
+
status, test_request, test_response = fileExists?(test)
|
81
|
+
|
82
|
+
if status == true and test_response.content_type != chat.response.content_type and test_response.status_code.to_i < 300
|
83
|
+
|
84
|
+
addFinding( test_request, test_response,
|
85
|
+
:test_item => "#{test_request.url}",
|
86
|
+
:proof_pattern => "#{test_response.status}",
|
87
|
+
:chat => chat,
|
88
|
+
:title => "[#{ext}]"
|
89
|
+
)
|
90
|
+
|
91
|
+
end
|
92
|
+
rescue => bang
|
93
|
+
puts bang
|
94
|
+
puts bang.backtrace if $DEBUG
|
95
|
+
end
|
96
|
+
[ test_request, test_response ]
|
97
|
+
|
98
|
+
}
|
99
|
+
yield checker
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -1,134 +1,125 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
module
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
def
|
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
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
}
|
127
|
-
yield checker
|
128
|
-
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
1
|
+
# @private
|
2
|
+
module Watobo#:nodoc: all
|
3
|
+
module Modules
|
4
|
+
module Active
|
5
|
+
module Cq5
|
6
|
+
#class Dir_indexing < Watobo::Mixin::Session
|
7
|
+
class Cqp_user_enumeration < Watobo::ActiveCheck
|
8
|
+
|
9
|
+
@info.update(
|
10
|
+
:check_name => 'CQ5 CQP User Enumeration', # name of check which briefly describes functionality, will be used for tree and progress views
|
11
|
+
:description => "This module checks if CQ JSON extension is aktive and enumerates all usernames.", # description of checkfunction
|
12
|
+
:author => "Andreas Schmidt", # author of check
|
13
|
+
:version => "1.0", # check version
|
14
|
+
:check_group => "CQ5"
|
15
|
+
)
|
16
|
+
|
17
|
+
@finding.update(
|
18
|
+
:threat => 'Information Disclosure.', # thread of vulnerability, e.g. loss of information
|
19
|
+
:class => "CQ5: Users", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
20
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
21
|
+
:rating => VULN_RATING_INFO
|
22
|
+
)
|
23
|
+
def initialize(project, prefs={})
|
24
|
+
super(project, prefs)
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset()
|
29
|
+
@checked_locations = []
|
30
|
+
end
|
31
|
+
|
32
|
+
def generateChecks(chat)
|
33
|
+
|
34
|
+
path = chat.request.path
|
35
|
+
return false if @checked_locations.include? path
|
36
|
+
@checked_locations << path
|
37
|
+
#
|
38
|
+
# via JSON Extension
|
39
|
+
|
40
|
+
checker = proc {
|
41
|
+
begin
|
42
|
+
test_request = nil
|
43
|
+
test_response = nil
|
44
|
+
|
45
|
+
test = chat.copyRequest
|
46
|
+
|
47
|
+
test.set_file_extension('.json')
|
48
|
+
|
49
|
+
status, test_request, test_response = fileExists?(test)
|
50
|
+
|
51
|
+
if status == true and test_response.has_body?
|
52
|
+
if test_response.content_type =~ /json/
|
53
|
+
j = JSON.parse test_response.body.to_s
|
54
|
+
username = j['jcr:createdBy']
|
55
|
+
puts "\nCQ5 User: #{username}"
|
56
|
+
addFinding( test_request, test_response,
|
57
|
+
:test_item => "#{test_request.url}",
|
58
|
+
:proof_pattern => "jcr:createdBy.*#{username}",
|
59
|
+
:chat => chat,
|
60
|
+
:threat => "Usernames may help an attacker to perform authorization attacks, e.g. brute-force attacks.",
|
61
|
+
:title => "[#{username}]"
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
rescue => bang
|
67
|
+
puts bang
|
68
|
+
puts bang.backtrace if $DEBUG
|
69
|
+
end
|
70
|
+
[ test_request, test_response ]
|
71
|
+
|
72
|
+
}
|
73
|
+
yield checker
|
74
|
+
|
75
|
+
#
|
76
|
+
# via XML Extension
|
77
|
+
|
78
|
+
checker = proc {
|
79
|
+
begin
|
80
|
+
test_request = nil
|
81
|
+
test_response = nil
|
82
|
+
|
83
|
+
test = chat.copyRequest
|
84
|
+
|
85
|
+
test.set_file_extension('.xml')
|
86
|
+
|
87
|
+
status, test_request, test_response = fileExists?(test)
|
88
|
+
|
89
|
+
if status == true and test_response.has_body?
|
90
|
+
if test_response.content_type =~ /xml/
|
91
|
+
xml = Nokogiri::XML(test_response.body.to_s)
|
92
|
+
xml.traverse do |node|
|
93
|
+
next unless node.respond_to? :attributes
|
94
|
+
node.attributes.each do |attr|
|
95
|
+
if attr[0] =~ /By$/i
|
96
|
+
username = attr[1]
|
97
|
+
addFinding( test_request, test_response,
|
98
|
+
:test_item => "#{test_request.url}",
|
99
|
+
:proof_pattern => "#{attr[0]}.*#{username}",
|
100
|
+
:chat => chat,
|
101
|
+
:threat => "Usernames may help an attacker to perform authorization attacks, e.g. brute-force attacks.",
|
102
|
+
:title => "[#{username}]"
|
103
|
+
)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
rescue => bang
|
112
|
+
puts bang
|
113
|
+
puts bang.backtrace if $DEBUG
|
114
|
+
end
|
115
|
+
[ test_request, test_response ]
|
116
|
+
|
117
|
+
}
|
118
|
+
yield checker
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|