watobo 0.9.21 → 0.9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +46 -1
- data/bin/nfq_server.rb +0 -9
- data/bin/watobo_gui.rb +3 -13
- data/custom-views/prettify-json.rb +9 -18
- data/icons/watobo.ico +0 -0
- data/icons/watobo.ico.old +0 -0
- data/lib/watobo.rb +10 -19
- data/lib/watobo/adapters.rb +5 -14
- data/lib/watobo/adapters/data_store.rb +50 -59
- data/lib/watobo/adapters/file/file_store.rb +287 -296
- data/lib/watobo/adapters/file/marshal_store.rb +293 -296
- data/lib/watobo/adapters/session_store.rb +5 -14
- data/lib/watobo/ca.rb +1 -10
- data/lib/watobo/config.rb +197 -206
- data/lib/watobo/constants.rb +0 -9
- data/lib/watobo/core.rb +3 -12
- data/lib/watobo/core/active_check.rb +72 -135
- data/lib/watobo/core/active_checks.rb +49 -58
- data/lib/watobo/core/ca.rb +369 -389
- data/lib/watobo/core/cert_store.rb +34 -43
- data/lib/watobo/core/chat.rb +92 -101
- data/lib/watobo/core/chats.rb +271 -280
- data/lib/watobo/core/client_cert_store.rb +106 -35
- data/lib/watobo/core/conversation.rb +48 -57
- data/lib/watobo/core/cookie.rb +23 -32
- data/lib/watobo/core/egress_handlers.rb +98 -0
- data/lib/watobo/core/finding.rb +66 -75
- data/lib/watobo/core/findings.rb +107 -114
- data/lib/watobo/core/forwarding_proxy.rb +13 -22
- data/lib/watobo/core/fuzz_gen.rb +0 -9
- data/lib/watobo/core/intercept_carver.rb +166 -177
- data/lib/watobo/core/intercept_filter.rb +235 -244
- data/lib/watobo/core/interceptor.rb +98 -107
- data/lib/watobo/core/min_class.rb +4 -13
- data/lib/watobo/core/netfilter_queue.rb +170 -179
- data/lib/watobo/core/ott_cache.rb +132 -141
- data/lib/watobo/core/parameter.rb +43 -52
- data/lib/watobo/core/passive_check.rb +103 -102
- data/lib/watobo/core/passive_checks.rb +48 -57
- data/lib/watobo/core/passive_scanner.rb +54 -55
- data/lib/watobo/core/plugin.rb +11 -20
- data/lib/watobo/core/project.rb +3 -9
- data/lib/watobo/core/proxy.rb +43 -52
- data/lib/watobo/core/request.rb +125 -123
- data/lib/watobo/core/response.rb +44 -53
- data/lib/watobo/core/scanner.rb +0 -9
- data/lib/watobo/core/scanner3.rb +405 -414
- data/lib/watobo/core/scope.rb +83 -92
- data/lib/watobo/core/session.rb +1043 -1026
- data/lib/watobo/core/sid_cache.rb +98 -107
- data/lib/watobo/core/subscriber.rb +25 -34
- data/lib/watobo/defaults.rb +21 -30
- data/lib/watobo/external/diff/lcs.rb +0 -9
- data/lib/watobo/external/diff/lcs/array.rb +0 -9
- data/lib/watobo/external/diff/lcs/block.rb +0 -9
- data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
- data/lib/watobo/external/diff/lcs/change.rb +0 -9
- data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
- data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
- data/lib/watobo/external/diff/lcs/string.rb +0 -9
- data/lib/watobo/externals.rb +6 -15
- data/lib/watobo/framework.rb +4 -13
- data/lib/watobo/framework/create_project.rb +60 -69
- data/lib/watobo/framework/init.rb +0 -9
- data/lib/watobo/framework/init_modules.rb +0 -9
- data/lib/watobo/framework/license_text.rb +28 -37
- data/lib/watobo/framework/load_chat.rb +13 -22
- data/lib/watobo/gui.rb +132 -123
- data/lib/watobo/gui/about_watobo.rb +0 -9
- data/lib/watobo/gui/browser_preview.rb +0 -9
- data/lib/watobo/gui/certificate_dialog.rb +0 -9
- data/lib/watobo/gui/chat_diff.rb +0 -9
- data/lib/watobo/gui/chatviewer_frame.rb +73 -72
- data/lib/watobo/gui/checkboxtree.rb +0 -9
- data/lib/watobo/gui/checks_policy_frame.rb +0 -9
- data/lib/watobo/gui/client_cert_dialog.rb +96 -87
- data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
- data/lib/watobo/gui/conversation_table.rb +158 -164
- data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
- data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
- data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
- data/lib/watobo/gui/custom_viewer.rb +374 -383
- data/lib/watobo/gui/dashboard.rb +296 -303
- data/lib/watobo/gui/define_scope_frame.rb +0 -9
- data/lib/watobo/gui/differ_frame.rb +215 -224
- data/lib/watobo/gui/edit_comment.rb +0 -9
- data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
- data/lib/watobo/gui/export_dialog.rb +104 -113
- data/lib/watobo/gui/finding_info.rb +0 -9
- data/lib/watobo/gui/findings_tree.rb +210 -217
- data/lib/watobo/gui/full_scan_dialog.rb +0 -9
- data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
- data/lib/watobo/gui/fxsave_thread.rb +14 -0
- data/lib/watobo/gui/goto_url_dialog.rb +70 -79
- data/lib/watobo/gui/hex_viewer.rb +0 -9
- data/lib/watobo/gui/html_viewer.rb +287 -296
- data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
- data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
- data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
- data/lib/watobo/gui/json_viewer.rb +287 -0
- data/lib/watobo/gui/list_box.rb +101 -110
- data/lib/watobo/gui/log_file_viewer.rb +32 -41
- data/lib/watobo/gui/log_viewer.rb +83 -88
- data/lib/watobo/gui/login_wizzard.rb +0 -9
- data/lib/watobo/gui/main_window.rb +587 -618
- data/lib/watobo/gui/manual_request_editor.rb +620 -565
- data/lib/watobo/gui/master_pw_dialog.rb +0 -9
- data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
- data/lib/watobo/gui/page_tree.rb +217 -226
- data/lib/watobo/gui/password_policy_dialog.rb +0 -9
- data/lib/watobo/gui/plugin_board.rb +0 -9
- data/lib/watobo/gui/preferences_dialog.rb +0 -9
- data/lib/watobo/gui/progress_window.rb +17 -27
- data/lib/watobo/gui/project_wizzard.rb +0 -9
- data/lib/watobo/gui/proxy_dialog.rb +1 -10
- data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
- data/lib/watobo/gui/request_builder_frame.rb +102 -111
- data/lib/watobo/gui/request_editor.rb +181 -137
- data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
- data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
- data/lib/watobo/gui/save_chat_dialog.rb +140 -149
- data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
- data/lib/watobo/gui/select_chat_dialog.rb +0 -9
- data/lib/watobo/gui/session_management_dialog.rb +0 -9
- data/lib/watobo/gui/sites_tree.rb +0 -9
- data/lib/watobo/gui/status_bar.rb +0 -9
- data/lib/watobo/gui/table_editor.rb +0 -9
- data/lib/watobo/gui/tagless_viewer.rb +0 -9
- data/lib/watobo/gui/templates/plugin.rb +0 -9
- data/lib/watobo/gui/templates/plugin2.rb +92 -100
- data/lib/watobo/gui/templates/plugin_base.rb +144 -153
- data/lib/watobo/gui/text_viewer.rb +0 -9
- data/lib/watobo/gui/transcoder_window.rb +0 -9
- data/lib/watobo/gui/utils/gui_utils.rb +0 -9
- data/lib/watobo/gui/utils/init_icons.rb +86 -95
- data/lib/watobo/gui/utils/load_icons.rb +33 -42
- data/lib/watobo/gui/utils/load_plugins.rb +116 -119
- data/lib/watobo/gui/utils/master_password.rb +68 -77
- data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
- data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
- data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
- data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
- data/lib/watobo/gui/utils/session_history.rb +112 -121
- data/lib/watobo/gui/workspace_dialog.rb +0 -9
- data/lib/watobo/gui/www_auth_dialog.rb +0 -9
- data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
- data/lib/watobo/http.rb +4 -13
- data/lib/watobo/http/cookies/cookies.rb +26 -35
- data/lib/watobo/http/data/data.rb +45 -54
- data/lib/watobo/http/data/json.rb +47 -55
- data/lib/watobo/http/url/url.rb +38 -47
- data/lib/watobo/http/xml/xml.rb +124 -130
- data/lib/watobo/interceptor.rb +3 -12
- data/lib/watobo/interceptor/proxy.rb +742 -739
- data/lib/watobo/interceptor/transparent.rb +22 -24
- data/lib/watobo/mixins.rb +10 -19
- data/lib/watobo/mixins/check_info.rb +27 -36
- data/lib/watobo/mixins/httpparser.rb +613 -637
- data/lib/watobo/mixins/request_parser.rb +88 -97
- data/lib/watobo/mixins/shapers.rb +515 -529
- data/lib/watobo/mixins/transcoders.rb +3 -11
- data/lib/watobo/parser.rb +1 -10
- data/lib/watobo/parser/html.rb +83 -92
- data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
- data/lib/watobo/sockets.rb +3 -12
- data/lib/watobo/sockets/agent.rb +828 -837
- data/lib/watobo/sockets/client_socket.rb +308 -312
- data/lib/watobo/sockets/connection.rb +401 -410
- data/lib/watobo/sockets/http_socket.rb +11 -13
- data/lib/watobo/sockets/ntlm_auth.rb +129 -138
- data/lib/watobo/utils.rb +10 -19
- data/lib/watobo/utils/check_regex.rb +0 -9
- data/lib/watobo/utils/copy_object.rb +0 -9
- data/lib/watobo/utils/crypto.rb +0 -9
- data/lib/watobo/utils/expand_range.rb +23 -32
- data/lib/watobo/utils/export_xml.rb +97 -106
- data/lib/watobo/utils/file_management.rb +9 -11
- data/lib/watobo/utils/hexprint.rb +9 -18
- data/lib/watobo/utils/load_chat.rb +0 -9
- data/lib/watobo/utils/load_icon.rb +0 -9
- data/lib/watobo/utils/ntlm.rb +866 -875
- data/lib/watobo/utils/print_debug.rb +12 -21
- data/lib/watobo/utils/response_builder.rb +90 -99
- data/lib/watobo/utils/response_hash.rb +0 -9
- data/lib/watobo/utils/secure_eval.rb +0 -9
- data/lib/watobo/utils/strings.rb +10 -19
- data/lib/watobo/utils/text2request.rb +0 -9
- data/lib/watobo/utils/url.rb +23 -32
- data/lib/watobo/utils/utf16.rb +11 -20
- data/modules/active/Apache/mod_status.rb +0 -9
- data/modules/active/Apache/multiview.rb +151 -160
- data/modules/active/Flash/crossdomain.rb +0 -9
- data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
- data/modules/active/cq5/cq5_default_selectors.rb +106 -115
- data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
- data/modules/active/directories/dirwalker.rb +0 -9
- data/modules/active/discovery/fileextensions.rb +0 -9
- data/modules/active/discovery/http_methods.rb +0 -9
- data/modules/active/discovery/jsmapfiles.rb +79 -0
- data/modules/active/domino/domino_db.rb +68 -76
- data/modules/active/dotNET/custom_errors.rb +102 -111
- data/modules/active/dotNET/dotnet_files.rb +90 -99
- data/modules/active/fileinclusion/lfi_simple.rb +0 -9
- data/modules/active/jboss/jboss_basic.rb +0 -9
- data/modules/active/sap/business_objects.rb +51 -60
- data/modules/active/sap/its_commands.rb +0 -9
- data/modules/active/sap/its_service_parameter.rb +0 -9
- data/modules/active/sap/its_services.rb +0 -9
- data/modules/active/sap/its_xss.rb +0 -9
- data/modules/active/shell_shock/shell_shock.rb +139 -148
- data/modules/active/siebel/siebel_apps.rb +160 -169
- data/modules/active/sqlinjection/sql_boolean.rb +0 -9
- data/modules/active/sqlinjection/sql_numerical.rb +198 -0
- data/modules/active/sqlinjection/sqli_error.rb +0 -9
- data/modules/active/sqlinjection/sqli_timing.rb +220 -229
- data/modules/active/struts2/default_handler_ognl.rb +106 -115
- data/modules/active/struts2/include_params_ognl.rb +105 -114
- data/modules/active/xml/xml_xxe.rb +112 -123
- data/modules/active/xss/xss_ng.rb +214 -223
- data/modules/active/xss/xss_simple.rb +0 -9
- data/modules/passive/ajax.rb +68 -77
- data/modules/passive/autocomplete.rb +56 -65
- data/modules/passive/cookie_options.rb +0 -9
- data/modules/passive/cookie_xss.rb +0 -9
- data/modules/passive/detect_code.rb +0 -9
- data/modules/passive/detect_fileupload.rb +0 -9
- data/modules/passive/detect_infrastructure.rb +0 -9
- data/modules/passive/detect_one_time_tokens.rb +0 -9
- data/modules/passive/dirindexing.rb +0 -9
- data/modules/passive/disclosure_domino.rb +55 -64
- data/modules/passive/disclosure_emails.rb +0 -9
- data/modules/passive/disclosure_ipaddr.rb +55 -53
- data/modules/passive/filename_as_parameter.rb +0 -9
- data/modules/passive/form_spotter.rb +0 -9
- data/modules/passive/hidden_fields.rb +50 -59
- data/modules/passive/hotspots.rb +0 -9
- data/modules/passive/in_script_parameter.rb +0 -9
- data/modules/passive/json_web_token.rb +93 -0
- data/modules/passive/multiple_server_headers.rb +0 -9
- data/modules/passive/possible_login.rb +0 -9
- data/modules/passive/redirect_url.rb +0 -9
- data/modules/passive/redirectionz.rb +0 -9
- data/modules/passive/sap-headers.rb +56 -65
- data/modules/passive/xss_dom.rb +0 -9
- data/plugins/aem/aem.rb +11 -20
- data/plugins/aem/gui/main.rb +118 -127
- data/plugins/aem/gui/tree_view.rb +171 -180
- data/plugins/aem/lib/agent.rb +130 -138
- data/plugins/aem/lib/dispatcher.rb +45 -51
- data/plugins/aem/lib/engine.rb +177 -186
- data/plugins/catalog/catalog.rb +345 -355
- data/plugins/crawler/crawler.rb +4 -13
- data/plugins/crawler/gui.rb +5 -14
- data/plugins/crawler/gui/auth_frame.rb +270 -279
- data/plugins/crawler/gui/crawler_gui.rb +271 -276
- data/plugins/crawler/gui/general_settings_frame.rb +96 -105
- data/plugins/crawler/gui/hooks_frame.rb +80 -89
- data/plugins/crawler/gui/scope_frame.rb +50 -59
- data/plugins/crawler/gui/settings_tabbook.rb +38 -47
- data/plugins/crawler/gui/status_frame.rb +59 -68
- data/plugins/crawler/lib/bags.rb +18 -27
- data/plugins/crawler/lib/constants.rb +11 -20
- data/plugins/crawler/lib/engine.rb +488 -497
- data/plugins/crawler/lib/grabber.rb +68 -77
- data/plugins/crawler/lib/status.rb +71 -80
- data/plugins/crawler/lib/uri_mp.rb +12 -21
- data/plugins/filefinder/filefinder.rb +326 -333
- data/plugins/sqlmap/bin/test.rb +78 -87
- data/plugins/sqlmap/gui.rb +4 -13
- data/plugins/sqlmap/gui/main.rb +218 -227
- data/plugins/sqlmap/gui/options_frame.rb +97 -106
- data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
- data/plugins/sqlmap/sqlmap.rb +2 -11
- data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
- data/plugins/sslchecker/gui/cipher_table.rb +246 -254
- data/plugins/sslchecker/gui/gui.rb +258 -264
- data/plugins/sslchecker/gui/sslchecker.rb +4 -13
- data/plugins/sslchecker/lib/check.rb +127 -133
- data/plugins/wshell/gui/main.rb +119 -117
- data/plugins/wshell/lib/core.rb +38 -88
- data/plugins/wshell/wshell.rb +11 -20
- metadata +170 -164
|
@@ -1,108 +1,99 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# options_frame.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 Plugin
|
|
13
|
-
class Sqlmap
|
|
14
|
-
class OptionsFrame < FXVerticalFrame
|
|
15
|
-
def to_h
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def set(settings)
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def request=(req)
|
|
24
|
-
@request_txt.text = req.join.gsub("\r",'')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def request
|
|
28
|
-
@request_txt.to_s
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def level
|
|
32
|
-
@level_combo.getItemData(@level_combo.currentItem)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def risk
|
|
36
|
-
@risk_combo.getItemData(@risk_combo.currentItem)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def technique
|
|
40
|
-
return "BEUST" if @technique_combo.currentItem == 0
|
|
41
|
-
@technique_combo.getItemData(@technique_combo.currentItem)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def manual_options
|
|
45
|
-
"#{@manual_options_txt.text.strip}"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def initialize(owner, opts)
|
|
49
|
-
super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
50
|
-
|
|
51
|
-
self.extend Watobo::Subscriber
|
|
52
|
-
|
|
53
|
-
groupbox = FXGroupBox.new(self, "Request", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X, 0, 0, 0, 0)
|
|
54
|
-
FXLabel.new(groupbox, "Enter a test request below or use 'SEND TO -> SQLMap' from the conversation-table menu (right-click).")
|
|
55
|
-
frame = FXVerticalFrame.new(groupbox, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
56
|
-
|
|
57
|
-
@request_txt = FXText.new(frame, nil, 0, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
58
|
-
@request_txt.editable = true
|
|
59
|
-
@request_txt.connect(SEL_CHANGED){ notify(:request_changed) }
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
matrix = FXMatrix.new(self, 6, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
|
|
63
|
-
|
|
64
|
-
techniques = %w( All Time-based Error Boolean Union Stacked )
|
|
65
|
-
FXLabel.new(matrix, "Technique:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
66
|
-
@technique_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
67
|
-
techniques.each do |t|
|
|
68
|
-
@technique_combo.appendItem(t, t[0])
|
|
69
|
-
@technique_combo.numVisible = @technique_combo.numItems
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
#dbs = %w( MySQL Oracle PostgreSQL )
|
|
73
|
-
#FXLabel.new(matrix, "DB:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
74
|
-
#@db_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
75
|
-
#dbs.each do |t|
|
|
76
|
-
# @db_combo.appendItem(t, t[0])
|
|
77
|
-
# @db_combo.numVisible = @db_combo.numItems
|
|
78
|
-
#end
|
|
79
|
-
|
|
80
|
-
risks = %w( 1 2 3 )
|
|
81
|
-
FXLabel.new(matrix, "Risk:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
82
|
-
@risk_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
83
|
-
risks.each do |r|
|
|
84
|
-
@risk_combo.appendItem(r, r)
|
|
85
|
-
@risk_combo.numVisible = @risk_combo.numItems
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
levels = (1..5)
|
|
89
|
-
FXLabel.new(matrix, "Level:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
90
|
-
@level_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
91
|
-
levels.each do |l|
|
|
92
|
-
@level_combo.appendItem(l.to_s, l.to_s)
|
|
93
|
-
@level_combo.numVisible = @level_combo.numItems
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_TOP)
|
|
97
|
-
FXLabel.new(frame, "Manual Options:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
98
|
-
@manual_options_txt = FXTextField.new(frame, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
private
|
|
104
|
-
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Plugin
|
|
4
|
+
class Sqlmap
|
|
5
|
+
class OptionsFrame < FXVerticalFrame
|
|
6
|
+
def to_h
|
|
7
|
+
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def set(settings)
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def request=(req)
|
|
15
|
+
@request_txt.text = req.join.gsub("\r",'')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def request
|
|
19
|
+
@request_txt.to_s
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def level
|
|
23
|
+
@level_combo.getItemData(@level_combo.currentItem)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def risk
|
|
27
|
+
@risk_combo.getItemData(@risk_combo.currentItem)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def technique
|
|
31
|
+
return "BEUST" if @technique_combo.currentItem == 0
|
|
32
|
+
@technique_combo.getItemData(@technique_combo.currentItem)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def manual_options
|
|
36
|
+
"#{@manual_options_txt.text.strip}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def initialize(owner, opts)
|
|
40
|
+
super(owner, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
41
|
+
|
|
42
|
+
self.extend Watobo::Subscriber
|
|
43
|
+
|
|
44
|
+
groupbox = FXGroupBox.new(self, "Request", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X, 0, 0, 0, 0)
|
|
45
|
+
FXLabel.new(groupbox, "Enter a test request below or use 'SEND TO -> SQLMap' from the conversation-table menu (right-click).")
|
|
46
|
+
frame = FXVerticalFrame.new(groupbox, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
47
|
+
|
|
48
|
+
@request_txt = FXText.new(frame, nil, 0, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
49
|
+
@request_txt.editable = true
|
|
50
|
+
@request_txt.connect(SEL_CHANGED){ notify(:request_changed) }
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
matrix = FXMatrix.new(self, 6, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
|
|
54
|
+
|
|
55
|
+
techniques = %w( All Time-based Error Boolean Union Stacked )
|
|
56
|
+
FXLabel.new(matrix, "Technique:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
57
|
+
@technique_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
58
|
+
techniques.each do |t|
|
|
59
|
+
@technique_combo.appendItem(t, t[0])
|
|
60
|
+
@technique_combo.numVisible = @technique_combo.numItems
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#dbs = %w( MySQL Oracle PostgreSQL )
|
|
64
|
+
#FXLabel.new(matrix, "DB:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
65
|
+
#@db_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
66
|
+
#dbs.each do |t|
|
|
67
|
+
# @db_combo.appendItem(t, t[0])
|
|
68
|
+
# @db_combo.numVisible = @db_combo.numItems
|
|
69
|
+
#end
|
|
70
|
+
|
|
71
|
+
risks = %w( 1 2 3 )
|
|
72
|
+
FXLabel.new(matrix, "Risk:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
73
|
+
@risk_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
74
|
+
risks.each do |r|
|
|
75
|
+
@risk_combo.appendItem(r, r)
|
|
76
|
+
@risk_combo.numVisible = @risk_combo.numItems
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
levels = (1..5)
|
|
80
|
+
FXLabel.new(matrix, "Level:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
81
|
+
@level_combo = FXComboBox.new(matrix, 20, nil, 0, FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
82
|
+
levels.each do |l|
|
|
83
|
+
@level_combo.appendItem(l.to_s, l.to_s)
|
|
84
|
+
@level_combo.numVisible = @level_combo.numItems
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_TOP)
|
|
88
|
+
FXLabel.new(frame, "Manual Options:", nil, LAYOUT_TOP|JUSTIFY_RIGHT)
|
|
89
|
+
@manual_options_txt = FXTextField.new(frame, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
108
99
|
end
|
|
@@ -1,107 +1,97 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# sqlmap_ctrl.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 Plugin
|
|
13
|
-
class Sqlmap
|
|
14
|
-
@well_known_paths = [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
]
|
|
18
|
-
@binary_path = ''
|
|
19
|
-
@command = ""
|
|
20
|
-
@tmp_dir = nil
|
|
21
|
-
# set sqlmap binary path, leave it empty to check well-know-locaitons
|
|
22
|
-
# it returns the path if any or an empty string
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Plugin
|
|
4
|
+
class Sqlmap
|
|
5
|
+
@well_known_paths = [
|
|
6
|
+
"/pentest/database/sqlmap/", # BackTrack
|
|
7
|
+
"/usr/share/sqlmap/" # Kali Linux, Samurai WTF
|
|
8
|
+
]
|
|
9
|
+
@binary_path = ''
|
|
10
|
+
@command = ""
|
|
11
|
+
@tmp_dir = nil
|
|
12
|
+
# set sqlmap binary path, leave it empty to check well-know-locaitons
|
|
13
|
+
# it returns the path if any or an empty string
|
|
23
14
|
def self.set_binary_path(path=nil)
|
|
24
15
|
search_paths = @well_known_paths
|
|
25
|
-
search_paths = [ path ] unless path.nil?
|
|
16
|
+
search_paths = [ path ] unless path.nil?
|
|
26
17
|
@binary_path = ""
|
|
27
|
-
|
|
18
|
+
|
|
28
19
|
[ "sqlmap.py",
|
|
29
20
|
"sqlmap" # on some distributions no .py extension, e.g. kali linux
|
|
30
21
|
].each do |binary_name|
|
|
31
|
-
search_paths.each do |p|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
save_config
|
|
40
|
-
|
|
41
|
-
@binary_path
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def self.method_missing(name, *args, &block)
|
|
45
|
-
iv_name = "@#{name}"
|
|
46
|
-
super unless instance_variable_defined? iv_name
|
|
47
|
-
|
|
48
|
-
v = instance_variable_get(iv_name)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def self.set_tmp_dir(dir=nil)
|
|
52
|
-
# get project path
|
|
53
|
-
if dir.nil?
|
|
54
|
-
@tmp_dir = File.join(Watobo.temp_directory,"sqlmap")
|
|
55
|
-
Dir.mkdir @tmp_dir unless File.exist? @tmp_dir
|
|
56
|
-
else
|
|
57
|
-
@tmp_dir = dir if File.exist? dir
|
|
58
|
-
end
|
|
59
|
-
save_config
|
|
60
|
-
@tmp_dir
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def self.run(request, opts)
|
|
64
|
-
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def self.save_config()
|
|
68
|
-
wd = Watobo.working_directory
|
|
69
|
-
|
|
70
|
-
dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
|
|
71
|
-
path = File.join(wd, "conf", "plugins")
|
|
72
|
-
Dir.mkdir path unless File.exist? path
|
|
73
|
-
conf_dir = File.join(path, dir_name)
|
|
74
|
-
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
75
|
-
file = File.join(conf_dir, dir_name + "_config.yml")
|
|
76
|
-
config = {
|
|
77
|
-
:tmp_dir => @tmp_dir,
|
|
78
|
-
:binary_path => @binary_path
|
|
79
|
-
|
|
80
|
-
Watobo::Utils.save_settings(file, config)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def self.load_config()
|
|
84
|
-
wd = Watobo.working_directory
|
|
85
|
-
dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
|
|
86
|
-
path = File.join(wd, "conf", "plugins")
|
|
87
|
-
Dir.mkdir path unless File.exist? path
|
|
88
|
-
conf_dir = File.join(path, dir_name)
|
|
89
|
-
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
90
|
-
file = File.join(conf_dir, dir_name + "_config.yml")
|
|
91
|
-
config = Watobo::Utils.load_settings(file)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# set default values
|
|
95
|
-
config = load_config
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
end
|
|
22
|
+
search_paths.each do |p|
|
|
23
|
+
bp = File.join(p, binary_name)
|
|
24
|
+
if File.exist? bp
|
|
25
|
+
@binary_path = bp
|
|
26
|
+
break
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
save_config
|
|
31
|
+
|
|
32
|
+
@binary_path
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.method_missing(name, *args, &block)
|
|
36
|
+
iv_name = "@#{name}"
|
|
37
|
+
super unless instance_variable_defined? iv_name
|
|
38
|
+
|
|
39
|
+
v = instance_variable_get(iv_name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.set_tmp_dir(dir=nil)
|
|
43
|
+
# get project path
|
|
44
|
+
if dir.nil?
|
|
45
|
+
@tmp_dir = File.join(Watobo.temp_directory,"sqlmap")
|
|
46
|
+
Dir.mkdir @tmp_dir unless File.exist? @tmp_dir
|
|
47
|
+
else
|
|
48
|
+
@tmp_dir = dir if File.exist? dir
|
|
49
|
+
end
|
|
50
|
+
save_config
|
|
51
|
+
@tmp_dir
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.run(request, opts)
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.save_config()
|
|
59
|
+
wd = Watobo.working_directory
|
|
60
|
+
|
|
61
|
+
dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
|
|
62
|
+
path = File.join(wd, "conf", "plugins")
|
|
63
|
+
Dir.mkdir path unless File.exist? path
|
|
64
|
+
conf_dir = File.join(path, dir_name)
|
|
65
|
+
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
66
|
+
file = File.join(conf_dir, dir_name + "_config.yml")
|
|
67
|
+
config = {
|
|
68
|
+
:tmp_dir => @tmp_dir,
|
|
69
|
+
:binary_path => @binary_path
|
|
70
|
+
}
|
|
71
|
+
Watobo::Utils.save_settings(file, config)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.load_config()
|
|
75
|
+
wd = Watobo.working_directory
|
|
76
|
+
dir_name = Watobo::Utils.snakecase self.name.gsub(/.*::/,'')
|
|
77
|
+
path = File.join(wd, "conf", "plugins")
|
|
78
|
+
Dir.mkdir path unless File.exist? path
|
|
79
|
+
conf_dir = File.join(path, dir_name)
|
|
80
|
+
Dir.mkdir conf_dir unless File.exist? conf_dir
|
|
81
|
+
file = File.join(conf_dir, dir_name + "_config.yml")
|
|
82
|
+
config = Watobo::Utils.load_settings(file)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# set default values
|
|
86
|
+
config = load_config
|
|
87
|
+
if config.is_a? Hash
|
|
88
|
+
set_binary_path config[:binary_path]
|
|
89
|
+
set_tmp_dir config[:tmp_dir]
|
|
90
|
+
else
|
|
91
|
+
set_binary_path
|
|
92
|
+
set_tmp_dir
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
data/plugins/sqlmap/sqlmap.rb
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
%w( sqlmap_ctrl ).each do |l|
|
|
11
|
-
require_relative File.join("lib", l )
|
|
1
|
+
%w( sqlmap_ctrl ).each do |l|
|
|
2
|
+
require_relative File.join("lib", l )
|
|
12
3
|
end
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# sslchecker_cli.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
|
-
|
|
@@ -1,255 +1,247 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# cipher_table.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 Plugin
|
|
13
|
-
module Sslchecker
|
|
14
|
-
module Gui
|
|
15
|
-
|
|
16
|
-
class CipherTableController < FXHorizontalFrame
|
|
17
|
-
def subscribe(event, &callback)
|
|
18
|
-
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def clearEvents(event)
|
|
22
|
-
@event_dispatcher_listener[event].clear
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def notify(event, *args)
|
|
26
|
-
if @event_dispatcher_listeners[event]
|
|
27
|
-
@event_dispatcher_listeners[event].each do |m|
|
|
28
|
-
m.call(*args) if m.respond_to? :call
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def initialize(owner, opts)
|
|
34
|
-
super(owner,opts)
|
|
35
|
-
@event_dispatcher_listeners = Hash.new
|
|
36
|
-
@good_cb = FXCheckButton.new(self, "good", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
37
|
-
@good_cb.connect(SEL_COMMAND) { update_table }
|
|
38
|
-
@good_cb.checkState = true
|
|
39
|
-
@bad_cb = FXCheckButton.new(self, "bad", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
40
|
-
@bad_cb.connect(SEL_COMMAND) { update_table }
|
|
41
|
-
@bad_cb.checkState = true
|
|
42
|
-
@na_cb = FXCheckButton.new(self, "n/a", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
43
|
-
@na_cb.connect(SEL_COMMAND) { update_table }
|
|
44
|
-
@na_cb.checkState = true
|
|
45
|
-
FXButton.new(self,
|
|
46
|
-
# FXButton.new(self, "clear").connect(SEL_COMMAND) { notify(:clear_ciphers) }
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def update_table
|
|
51
|
-
show_prefs = CipherTable::CTF_NONE
|
|
52
|
-
show_prefs = show_prefs | CipherTable::CTF_BAD if @bad_cb.checked?
|
|
53
|
-
show_prefs = show_prefs | CipherTable::CTF_GOOD if @good_cb.checked?
|
|
54
|
-
show_prefs = show_prefs | CipherTable::CTF_NA if @na_cb.checked?
|
|
55
|
-
notify(:apply_filter, show_prefs)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class CipherTable < FXTable
|
|
60
|
-
CTF_NONE = 0x00
|
|
61
|
-
CTF_GOOD = 0x01
|
|
62
|
-
CTF_BAD = 0x02
|
|
63
|
-
CTF_NA = 0x04
|
|
64
|
-
CTF_ALL = 0x07
|
|
65
|
-
|
|
66
|
-
attr :ciphers
|
|
67
|
-
attr_accessor :min_bit_length
|
|
68
|
-
attr_accessor :filter
|
|
69
|
-
|
|
70
|
-
# this returns a comma seperated list of the table [string]
|
|
71
|
-
def to_csv
|
|
72
|
-
csv =
|
|
73
|
-
self.each_row do |c,b,r|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
new_font.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
self.
|
|
91
|
-
self.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
puts bang
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
@
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
@columns[:
|
|
141
|
-
@columns[:
|
|
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
|
-
puts bang
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
self.
|
|
177
|
-
self.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
puts bang
|
|
197
|
-
puts
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
self.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
self.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
self.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
self.
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
self.
|
|
245
|
-
self.
|
|
246
|
-
self.
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
end
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Plugin
|
|
4
|
+
module Sslchecker
|
|
5
|
+
module Gui
|
|
6
|
+
|
|
7
|
+
class CipherTableController < FXHorizontalFrame
|
|
8
|
+
def subscribe(event, &callback)
|
|
9
|
+
(@event_dispatcher_listeners[event] ||= []) << callback
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def clearEvents(event)
|
|
13
|
+
@event_dispatcher_listener[event].clear
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def notify(event, *args)
|
|
17
|
+
if @event_dispatcher_listeners[event]
|
|
18
|
+
@event_dispatcher_listeners[event].each do |m|
|
|
19
|
+
m.call(*args) if m.respond_to? :call
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def initialize(owner, opts)
|
|
25
|
+
super(owner,opts)
|
|
26
|
+
@event_dispatcher_listeners = Hash.new
|
|
27
|
+
@good_cb = FXCheckButton.new(self, "good", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
28
|
+
@good_cb.connect(SEL_COMMAND) { update_table }
|
|
29
|
+
@good_cb.checkState = true
|
|
30
|
+
@bad_cb = FXCheckButton.new(self, "bad", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
31
|
+
@bad_cb.connect(SEL_COMMAND) { update_table }
|
|
32
|
+
@bad_cb.checkState = true
|
|
33
|
+
@na_cb = FXCheckButton.new(self, "n/a", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
34
|
+
@na_cb.connect(SEL_COMMAND) { update_table }
|
|
35
|
+
@na_cb.checkState = true
|
|
36
|
+
FXButton.new(self, 'save').connect(SEL_COMMAND) { notify(:save_table) }
|
|
37
|
+
# FXButton.new(self, "clear").connect(SEL_COMMAND) { notify(:clear_ciphers) }
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def update_table
|
|
42
|
+
show_prefs = CipherTable::CTF_NONE
|
|
43
|
+
show_prefs = show_prefs | CipherTable::CTF_BAD if @bad_cb.checked?
|
|
44
|
+
show_prefs = show_prefs | CipherTable::CTF_GOOD if @good_cb.checked?
|
|
45
|
+
show_prefs = show_prefs | CipherTable::CTF_NA if @na_cb.checked?
|
|
46
|
+
notify(:apply_filter, show_prefs)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class CipherTable < FXTable
|
|
51
|
+
CTF_NONE = 0x00
|
|
52
|
+
CTF_GOOD = 0x01
|
|
53
|
+
CTF_BAD = 0x02
|
|
54
|
+
CTF_NA = 0x04
|
|
55
|
+
CTF_ALL = 0x07
|
|
56
|
+
|
|
57
|
+
attr :ciphers
|
|
58
|
+
attr_accessor :min_bit_length
|
|
59
|
+
attr_accessor :filter
|
|
60
|
+
|
|
61
|
+
# this returns a comma seperated list of the table [string]
|
|
62
|
+
def to_csv
|
|
63
|
+
csv = []
|
|
64
|
+
self.each_row do |c,b,r,s|
|
|
65
|
+
l = [ c.text.strip ]
|
|
66
|
+
l << b.text.strip
|
|
67
|
+
l << r.text.strip
|
|
68
|
+
l << s.text.strip
|
|
69
|
+
csv << l.join(';')
|
|
70
|
+
end
|
|
71
|
+
return csv.join( "\n")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def setNewFont(font_type=nil, size=nil)
|
|
75
|
+
begin
|
|
76
|
+
new_size = size.nil? ? GUI_REGULAR_FONT_SIZE : size
|
|
77
|
+
new_font_type = font_type.nil? ? "helvetica" : font_type
|
|
78
|
+
new_font = FXFont.new(getApp(), new_font_type, new_size)
|
|
79
|
+
new_font.create
|
|
80
|
+
|
|
81
|
+
self.font = new_font
|
|
82
|
+
self.rowHeader.font = new_font
|
|
83
|
+
self.defRowHeight = new_size+10
|
|
84
|
+
|
|
85
|
+
updateTable()
|
|
86
|
+
|
|
87
|
+
rescue => bang
|
|
88
|
+
puts bang
|
|
89
|
+
puts bang.backtrace if $DEBUG
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def add_cipher( cipher )
|
|
94
|
+
|
|
95
|
+
[ :method, :algo, :bits, :support ].each do |k|
|
|
96
|
+
return false unless cipher.has_key? k
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
@ciphers.push cipher
|
|
100
|
+
add_cipher_row(cipher)
|
|
101
|
+
|
|
102
|
+
true
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def show_all
|
|
106
|
+
@filter = CTF_ALL
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def update_table
|
|
110
|
+
# puts "update table: #{filter}"
|
|
111
|
+
self.clearItems
|
|
112
|
+
initColumns
|
|
113
|
+
@ciphers.each do |c|
|
|
114
|
+
add_cipher_row c
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def clear_ciphers
|
|
119
|
+
self.clearItems
|
|
120
|
+
initColumns
|
|
121
|
+
@ciphers.clear
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def initialize(owner, opts)
|
|
125
|
+
super(owner, :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y|TABLE_READONLY|LAYOUT_SIDE_TOP, :padding => 2)
|
|
126
|
+
@ciphers = []
|
|
127
|
+
@min_bit_length = 128
|
|
128
|
+
|
|
129
|
+
@columns = Hash.new
|
|
130
|
+
@columns[:method] = { :label => "Method", :pos => 0, :width => 50 }
|
|
131
|
+
@columns[:algo] = { :label => "Cipher", :pos => 1, :width => 250 }
|
|
132
|
+
@columns[:bits] = { :label => "Bits", :pos => 2, :width => 100 }
|
|
133
|
+
@columns[:support] = { :label => "Result", :pos => 3, :width => 50 }
|
|
134
|
+
|
|
135
|
+
@filter = CTF_ALL
|
|
136
|
+
|
|
137
|
+
init_icons
|
|
138
|
+
initColumns()
|
|
139
|
+
adjustCellWidth
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
private
|
|
143
|
+
|
|
144
|
+
def init_icons
|
|
145
|
+
begin
|
|
146
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "..", "icons" ))
|
|
147
|
+
file = "green_16x16.ico"
|
|
148
|
+
icon_file = File.join(path, file)
|
|
149
|
+
# puts icon_file
|
|
150
|
+
|
|
151
|
+
@icon_ok = Watobo::Gui.load_icon(icon_file)
|
|
152
|
+
|
|
153
|
+
file = "red_16x16.ico"
|
|
154
|
+
icon_file = File.join(path, file)
|
|
155
|
+
@icon_bad = Watobo::Gui.load_icon(icon_file)
|
|
156
|
+
|
|
157
|
+
file = "grey_16x16.ico"
|
|
158
|
+
icon_file = File.join(path, file)
|
|
159
|
+
@icon_na = Watobo::Gui.load_icon(icon_file)
|
|
160
|
+
rescue => bang
|
|
161
|
+
puts bang
|
|
162
|
+
puts bang.backtrace
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def initColumns()
|
|
167
|
+
self.setTableSize(0, @columns.length)
|
|
168
|
+
self.visibleRows = 20
|
|
169
|
+
self.visibleColumns = @columns.length
|
|
170
|
+
|
|
171
|
+
@columns.each do |key, opts|
|
|
172
|
+
self.setColumnText( opts[:pos], opts[:label] )
|
|
173
|
+
#self.setColumnIcon(@col_order.index(TABLE_COL_SSL), TBL_ICON_LOCK)# puts self.getItem(@col_order.index(col), 0 ).class.to_s
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
adjustCellWidth
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def adjustCellWidth()
|
|
181
|
+
begin
|
|
182
|
+
self.rowHeader.width = 0
|
|
183
|
+
@columns.each_value do |opts|
|
|
184
|
+
self.setColumnWidth( opts[:pos], opts[:width] )
|
|
185
|
+
end
|
|
186
|
+
rescue => bang
|
|
187
|
+
puts bang
|
|
188
|
+
puts bang.backtrace
|
|
189
|
+
puts "!!!ERROR: adjustCellWidth"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def add_cipher_row(cipher)
|
|
195
|
+
add_cipher = ( @filter == CTF_ALL ) ? true : false
|
|
196
|
+
|
|
197
|
+
if cipher[:support] == false
|
|
198
|
+
# @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",0)
|
|
199
|
+
text = "N/A"
|
|
200
|
+
icon = @icon_na
|
|
201
|
+
add_cipher = true if ( @filter & CTF_NA > 0 )
|
|
202
|
+
|
|
203
|
+
elsif cipher[:bits].to_i < @min_bit_length
|
|
204
|
+
# @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",2)
|
|
205
|
+
text = "BAD"
|
|
206
|
+
icon = @icon_bad
|
|
207
|
+
add_cipher = true if ( @filter & CTF_BAD > 0 )
|
|
208
|
+
else
|
|
209
|
+
text = "OK"
|
|
210
|
+
icon = @icon_ok
|
|
211
|
+
add_cipher = true if ( @filter & CTF_GOOD > 0 )
|
|
212
|
+
# @result_viewer.appendStyledText("checked: #{cipher} - #{bits} - #{result}\n",1)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
if add_cipher
|
|
216
|
+
lastRowIndex = self.getNumRows
|
|
217
|
+
self.appendRows(1)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
index = @columns[:method][:pos]
|
|
221
|
+
self.setItemText(lastRowIndex, index, cipher[:method].to_s)
|
|
222
|
+
self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
|
|
223
|
+
|
|
224
|
+
index = @columns[:algo][:pos]
|
|
225
|
+
self.setItemText(lastRowIndex, index, cipher[:algo])
|
|
226
|
+
self.getItem(lastRowIndex, index).justify = FXTableItem::LEFT
|
|
227
|
+
|
|
228
|
+
index = @columns[:bits][:pos]
|
|
229
|
+
self.setItemText(lastRowIndex, index, cipher[:bits].to_s)
|
|
230
|
+
self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
|
|
231
|
+
|
|
232
|
+
index = @columns[:support][:pos]
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
self.setItemIcon(lastRowIndex, index, icon)
|
|
236
|
+
self.setItemIconPosition(lastRowIndex, index, FXTableItem::BEFORE)
|
|
237
|
+
self.setItemText(lastRowIndex, index, text)
|
|
238
|
+
self.getItem(lastRowIndex,index).justify = FXTableItem::LEFT
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|