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,170 +1,161 @@
|
|
1
|
-
#.
|
2
|
-
# siebel_apps.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
|
-
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
|
2
|
+
module Watobo#:nodoc: all
|
3
|
+
module Modules
|
4
|
+
module Active
|
5
|
+
module Siebel
|
6
|
+
|
7
|
+
class Siebel_apps < Watobo::ActiveCheck
|
8
|
+
check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
|
9
|
+
@@tested_directories = Hash.new
|
10
|
+
|
11
|
+
@info.update(
|
12
|
+
:check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
|
13
|
+
:description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
|
14
|
+
:author => "Andreas Schmidt", # author of check
|
15
|
+
:version => "1.0", # check version
|
16
|
+
:check_group => check_group
|
17
|
+
)
|
18
|
+
|
19
|
+
@finding.update(
|
20
|
+
:threat => 'Information', # thread of vulnerability, e.g. loss of information
|
21
|
+
:class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
22
|
+
:type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
23
|
+
)
|
24
|
+
|
25
|
+
def initialize(project, prefs={})
|
26
|
+
|
27
|
+
super(project, prefs)
|
28
|
+
|
29
|
+
@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 )
|
30
|
+
@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 )
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset()
|
36
|
+
@@tested_directories.clear
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
def generateChecks(chat)
|
42
|
+
|
43
|
+
begin
|
44
|
+
path = chat.request.dir
|
45
|
+
# puts "!!!!#{self}: #{path}"
|
46
|
+
unless @@tested_directories.has_key?(path)
|
47
|
+
@@tested_directories[path] = true
|
48
|
+
|
49
|
+
@apps.each do |app|
|
50
|
+
@langs.each do |lang|
|
51
|
+
|
52
|
+
|
53
|
+
checker = proc{
|
54
|
+
begin
|
55
|
+
app_dir = "#{app}_#{lang}"
|
56
|
+
#puts app_dir
|
57
|
+
test_request = nil
|
58
|
+
test_response = nil
|
59
|
+
test = chat.copyRequest
|
60
|
+
test.appendDir app_dir
|
61
|
+
|
62
|
+
status, test_request, test_response = fileExists?(test, :default => true)
|
63
|
+
|
64
|
+
if status == true
|
65
|
+
|
66
|
+
# test_chat = Chat.new(test,test_response, :id => chat.id)
|
67
|
+
|
68
|
+
addFinding( test_request,test_response,
|
69
|
+
:test_item => chat.request.url.to_s,
|
70
|
+
:check_pattern => "#{app_dir}",
|
71
|
+
:proof_pattern => "#{test_response.status}",
|
72
|
+
:chat => chat,
|
73
|
+
:title => "#{app_dir}"
|
74
|
+
)
|
75
|
+
|
76
|
+
# check for _stats.swe
|
77
|
+
stats_test = chat.copyRequest
|
78
|
+
stats_test.replaceFileExt("_stats.swe")
|
79
|
+
status, stats_request, stats_response = fileExists?( stats_test, :default => true)
|
80
|
+
|
81
|
+
if status == true and stats_response.has_body?
|
82
|
+
addFinding( stats_request,stats_response,
|
83
|
+
:test_item => stats_request.url.to_s,
|
84
|
+
:check_pattern => "#{app_dir}",
|
85
|
+
:proof_pattern => "#{stats_response.status}",
|
86
|
+
:chat => chat,
|
87
|
+
:title => "#{app_dir}",
|
88
|
+
:check_name => "Siebel Stats Page",
|
89
|
+
:class => "Siebel: Stats Page"
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
# check for base.txt
|
94
|
+
base_test = chat.copyRequest
|
95
|
+
base_test.appendDir app_dir
|
96
|
+
base_test.replaceFileExt("base.txt")
|
97
|
+
# puts base_test.url
|
98
|
+
status, base_request, base_response = fileExists?(base_test, :default => true)
|
99
|
+
|
100
|
+
if status == true and base_response.has_body?
|
101
|
+
version = nil
|
102
|
+
if base_response.body.strip =~ /^([0-9.]*) /
|
103
|
+
version = $1
|
104
|
+
end
|
105
|
+
addFinding( base_request,base_response,
|
106
|
+
:test_item => base_request.url.to_s,
|
107
|
+
:check_pattern => "base.txt",
|
108
|
+
:proof_pattern => "#{base_response.status}",
|
109
|
+
:chat => chat,
|
110
|
+
:title => "#{app_dir}",
|
111
|
+
:check_name => "Siebel Version #{version}",
|
112
|
+
:class => "Siebel: Version #{version}"
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
# check for About_Siebel.htm and siebindex.htm
|
117
|
+
%w( About_Siebel.htm help/siebindex.htm siebindex.htm ).each do |df|
|
118
|
+
default_test = chat.copyRequest
|
119
|
+
default_test.appendDir app_dir
|
120
|
+
default_test.replaceFileExt(df)
|
121
|
+
status, default_request, default_response = fileExists?(default_test, :default => true)
|
122
|
+
|
123
|
+
if status == true
|
124
|
+
addFinding( default_request,default_response,
|
125
|
+
:test_item => "#{default_request.url.to_s}",
|
126
|
+
:check_pattern => "#{df}",
|
127
|
+
:proof_pattern => "#{default_response.status}",
|
128
|
+
:chat => chat,
|
129
|
+
:title => "#{df}",
|
130
|
+
#:check_name => "Siebel Version #{version}",
|
131
|
+
:class => "Siebel: Default Files"
|
132
|
+
)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
rescue => bang
|
138
|
+
puts bang
|
139
|
+
puts bang.backtrace
|
140
|
+
end
|
141
|
+
[ test_request, test_response ]
|
142
|
+
}
|
143
|
+
yield checker
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
rescue => bang
|
149
|
+
puts bang
|
150
|
+
puts "ERROR!! #{Module.nesting[0].name}"
|
151
|
+
raise
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
# --> eo namespace
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
@@ -1,12 +1,3 @@
|
|
1
|
-
#.
|
2
|
-
# sql_boolean.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
|
require 'digest/md5'
|
11
2
|
require 'digest/sha1'
|
12
3
|
|
@@ -0,0 +1,198 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
require 'digest/sha1'
|
3
|
+
|
4
|
+
# @private
|
5
|
+
module Watobo#:nodoc: all
|
6
|
+
module Modules
|
7
|
+
module Active
|
8
|
+
module Sqlinjection
|
9
|
+
|
10
|
+
|
11
|
+
class Sql_numerical < Watobo::ActiveCheck
|
12
|
+
|
13
|
+
@info.update(
|
14
|
+
:check_name => 'Numerical SQL-Injection', # name of check which briefly describes functionality, will be used for tree and progress views
|
15
|
+
:check_group => AC_GROUP_SQL,
|
16
|
+
:description => "Checks numerical parameter values for SQL-Injection flaws.", # description of checkfunction
|
17
|
+
:author => "Andreas Schmidt", # author of check
|
18
|
+
:version => "0.9" # check version
|
19
|
+
)
|
20
|
+
|
21
|
+
threat =<<'EOF'
|
22
|
+
SQL Injection is an attack technique used to exploit applications that construct SQL statements from user-supplied input.
|
23
|
+
When successful, the attacker is able to change the logic of SQL statements executed against the database.
|
24
|
+
Structured Query Language (SQL) is a specialized programming language for sending queries to databases.
|
25
|
+
The SQL programming language is both an ANSI and an ISO standard, though many database products supporting SQL do so with
|
26
|
+
proprietary extensions to the standard language. Applications often use user-supplied data to create SQL statements.
|
27
|
+
If an application fails to properly construct SQL statements it is possible for an attacker to alter the statement structure
|
28
|
+
and execute unplanned and potentially hostile commands. When such commands are executed, they do so under the context of the user
|
29
|
+
specified by the application executing the statement. This capability allows attackers to gain control of all database resources
|
30
|
+
accessible by that user, up to and including the ability to execute commands on the hosting system.
|
31
|
+
|
32
|
+
Source: http://projects.webappsec.org/SQL-Injection
|
33
|
+
EOF
|
34
|
+
|
35
|
+
measure = "All user input must be escaped and/or filtered thoroughly before the sql statement is put together. Additionally prepared statements should be used."
|
36
|
+
|
37
|
+
@finding.update(
|
38
|
+
:threat => threat, # thread of vulnerability, e.g. loss of information
|
39
|
+
:class => "SQL-Injection", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
40
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
41
|
+
:rating => VULN_RATING_CRITICAL,
|
42
|
+
:measure => measure
|
43
|
+
)
|
44
|
+
|
45
|
+
def initialize(project, prefs={})
|
46
|
+
super(project, prefs)
|
47
|
+
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def generateChecks(chat)
|
52
|
+
|
53
|
+
#
|
54
|
+
# Check GET-Parameters
|
55
|
+
#
|
56
|
+
begin
|
57
|
+
urlParmNames(chat).each do |parm|
|
58
|
+
vint = nil
|
59
|
+
# first check if parameter is integer value
|
60
|
+
value = chat.request.get_parm_value(parm)
|
61
|
+
if value.strip =~ /^\d+$/ then
|
62
|
+
# puts "*!* #"
|
63
|
+
vint = value.to_i
|
64
|
+
end
|
65
|
+
|
66
|
+
if vint then
|
67
|
+
#puts "* found integer get parameter #{parm}"
|
68
|
+
checker = proc {
|
69
|
+
begin
|
70
|
+
test_request = nil
|
71
|
+
test_response = nil
|
72
|
+
|
73
|
+
# first do request double time to check if hashes are the same
|
74
|
+
test = chat.copyRequest
|
75
|
+
test_request,test_response = doRequest(test,:default => true)
|
76
|
+
# hash_1 = Digest::MD5.hexdigest(test_response.body.join)
|
77
|
+
hash_1 = Watobo::Utils.responseHash(test_request, test_response)
|
78
|
+
test = chat.copyRequest
|
79
|
+
test_request,test_response = doRequest(test,:default => true)
|
80
|
+
hash_2 = Watobo::Utils.responseHash(test_request, test_response)
|
81
|
+
#hash_2 = Digest::MD5.hexdigest(test_response.body.join)
|
82
|
+
|
83
|
+
test = chat.copyRequest
|
84
|
+
# also need to check if altered parm will change response
|
85
|
+
new_value = "#{vint+1}"
|
86
|
+
test.replace_get_parm(parm,new_value)
|
87
|
+
test_request,test_response = doRequest(test,:default => true)
|
88
|
+
hash_3 = Watobo::Utils.responseHash(test_request, test_response)
|
89
|
+
# puts "Hash 1: #{hash_1}"
|
90
|
+
# puts "Hash 2: #{hash_2}"
|
91
|
+
# puts "Hash 3: #{hash_3}"
|
92
|
+
# if hash_1 == hash_2 then
|
93
|
+
if hash_1 == hash_2 and hash_1 != hash_3 then # same hashes? now we can start the test
|
94
|
+
test = chat.copyRequest
|
95
|
+
# first add one to the original value and append "-1"
|
96
|
+
new_value = "#{vint+1}-1"
|
97
|
+
test.replace_get_parm(parm,new_value)
|
98
|
+
test_request,test_response = doRequest(test,:default => true)
|
99
|
+
|
100
|
+
hash_test = Watobo::Utils.responseHash(test_request, test_response)
|
101
|
+
if hash_test == hash_1 then
|
102
|
+
path = "/" + test_request.path
|
103
|
+
# test_chat = Chat.new(test,test_response, :id => chat.id)
|
104
|
+
addFinding(test_request, test_response,
|
105
|
+
:check_pattern => "#{parm}",
|
106
|
+
:chat => chat,
|
107
|
+
:title => "[#{parm}] - #{path}"
|
108
|
+
)
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
rescue => bang
|
114
|
+
puts bang
|
115
|
+
raise
|
116
|
+
end
|
117
|
+
[ test_request, test_response ]
|
118
|
+
}
|
119
|
+
yield checker
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
postParmNames(chat).each do |parm|
|
126
|
+
vint = nil
|
127
|
+
# first check if parameter is integer value
|
128
|
+
value = chat.request.post_parm_value(parm)
|
129
|
+
if value.strip =~ /^\d+$/ then
|
130
|
+
vint = value.to_i
|
131
|
+
end
|
132
|
+
|
133
|
+
if vint then
|
134
|
+
checker = proc {
|
135
|
+
test_request = nil
|
136
|
+
test_response = nil
|
137
|
+
#puts "* found integer post parameter #{parm}"
|
138
|
+
# first do request double time to check if hashes are the same
|
139
|
+
test = chat.copyRequest
|
140
|
+
test_request,test_response = doRequest(test, :default => true)
|
141
|
+
hash_1 = Watobo::Utils.responseHash(test_request, test_response)
|
142
|
+
hash_ref = Watobo::Utils.responseHash(test_request, test_response)
|
143
|
+
test = chat.copyRequest
|
144
|
+
test_request,test_response = doRequest(test, :default => true)
|
145
|
+
hash_2 = Watobo::Utils.responseHash(test_request, test_response)
|
146
|
+
# also need to check if altered parm will change response
|
147
|
+
test = chat.copyRequest
|
148
|
+
new_value = "#{vint+1}"
|
149
|
+
test.replace_get_parm(parm,new_value)
|
150
|
+
test_request,test_response = doRequest(test,:default => true)
|
151
|
+
hash_3 = Watobo::Utils.responseHash(test_request, test_response)
|
152
|
+
# puts
|
153
|
+
# puts "#{value}, #{new_value}, #{parm}"
|
154
|
+
# puts "Hash 1: #{hash_1}"
|
155
|
+
# puts "Hash 2: #{hash_2}"
|
156
|
+
# puts "Hash 3: #{hash_3}"
|
157
|
+
|
158
|
+
# if hash_1 == hash_2 then
|
159
|
+
if hash_1 == hash_2 and hash_1 != hash_3 then # same hashes? now we can start the test
|
160
|
+
test = chat.copyRequest
|
161
|
+
# first add one to the original value and append "-1"
|
162
|
+
new_value = "#{vint+1}-1"
|
163
|
+
test.replace_post_parm(parm,new_value)
|
164
|
+
test_request,test_response = doRequest(test, :default => true)
|
165
|
+
|
166
|
+
hash_test = Watobo::Utils.responseHash(test_request, test_response)
|
167
|
+
# puts "Hash Test: #{hash_test}"
|
168
|
+
if hash_test == hash_ref then
|
169
|
+
# test_chat = Chat.new(test, test_response, :id => chat.id)
|
170
|
+
path = "/" + test_request.path
|
171
|
+
addFinding(test_request, test_response,
|
172
|
+
:check_pattern => "#{parm}",
|
173
|
+
:chat => chat,
|
174
|
+
:title => "[#{parm}] - #{path}"
|
175
|
+
)
|
176
|
+
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
[ test_request, test_response ]
|
181
|
+
}
|
182
|
+
yield checker
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
rescue => bang
|
187
|
+
puts bang
|
188
|
+
puts "ERROR!! #{Module.nesting[0].name}"
|
189
|
+
raise
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
# --> eo namespace
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|