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,83 +1,74 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# grabber.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 Crawler
|
|
13
|
-
class Grabber
|
|
14
|
-
def get_page(linkbag)
|
|
15
|
-
begin
|
|
16
|
-
return nil if linkbag.nil?
|
|
17
|
-
return nil unless linkbag.respond_to? :link
|
|
18
|
-
page = nil
|
|
19
|
-
|
|
20
|
-
uri = linkbag.link
|
|
21
|
-
uri = linkbag.link.uri if linkbag.link.respond_to? :uri
|
|
22
|
-
|
|
23
|
-
unless @opts[:head_request_pattern].empty?
|
|
24
|
-
pext = uri.path.match(/\.[^\.]*$/)
|
|
25
|
-
unless pext.nil?
|
|
26
|
-
if pext[0] =~ /\.#{@opts[:head_request_pattern]}/i
|
|
27
|
-
page = @agent.head uri
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
2
|
+
module Watobo#:nodoc: all
|
|
3
|
+
module Crawler
|
|
4
|
+
class Grabber
|
|
5
|
+
def get_page(linkbag)
|
|
6
|
+
begin
|
|
7
|
+
return nil if linkbag.nil?
|
|
8
|
+
return nil unless linkbag.respond_to? :link
|
|
9
|
+
page = nil
|
|
10
|
+
|
|
11
|
+
uri = linkbag.link
|
|
12
|
+
uri = linkbag.link.uri if linkbag.link.respond_to? :uri
|
|
13
|
+
|
|
14
|
+
unless @opts[:head_request_pattern].empty?
|
|
15
|
+
pext = uri.path.match(/\.[^\.]*$/)
|
|
16
|
+
unless pext.nil?
|
|
17
|
+
if pext[0] =~ /\.#{@opts[:head_request_pattern]}/i
|
|
18
|
+
page = @agent.head uri
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
32
23
|
page = @agent.get uri if page.nil?
|
|
33
24
|
|
|
34
|
-
Watobo::Crawler::Status.inc_requests
|
|
35
|
-
|
|
36
|
-
sleep(@opts[:delay]/1000.0).round(3) if @opts[:delay] > 0
|
|
37
|
-
return nil if page.nil?
|
|
38
|
-
return PageBag.new( page, linkbag.depth+1 )
|
|
39
|
-
rescue => bang
|
|
40
|
-
puts bang #if $DEBUG
|
|
41
|
-
puts bang.backtrace if $DEBUG
|
|
42
|
-
end
|
|
43
|
-
return nil
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def run
|
|
47
|
-
@grab_thread = Thread.new(@link_queue, @page_queue){ |lq, pq|
|
|
48
|
-
loop do
|
|
49
|
-
begin
|
|
50
|
-
#link, referer, depth = lq.deq
|
|
51
|
-
link = lq.deq
|
|
52
|
-
next if link.depth > @opts[:max_depth]
|
|
53
|
-
page = get_page(link)
|
|
54
|
-
pq << page unless page.nil?
|
|
55
|
-
|
|
56
|
-
rescue => bang
|
|
57
|
-
puts bang
|
|
58
|
-
puts bang.backtrace
|
|
59
|
-
end
|
|
60
|
-
end
|
|
25
|
+
Watobo::Crawler::Status.inc_requests
|
|
26
|
+
|
|
27
|
+
sleep(@opts[:delay]/1000.0).round(3) if @opts[:delay] > 0
|
|
28
|
+
return nil if page.nil?
|
|
29
|
+
return PageBag.new( page, linkbag.depth+1 )
|
|
30
|
+
rescue => bang
|
|
31
|
+
puts bang #if $DEBUG
|
|
32
|
+
puts bang.backtrace if $DEBUG
|
|
33
|
+
end
|
|
34
|
+
return nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def run
|
|
38
|
+
@grab_thread = Thread.new(@link_queue, @page_queue){ |lq, pq|
|
|
39
|
+
loop do
|
|
40
|
+
begin
|
|
41
|
+
#link, referer, depth = lq.deq
|
|
42
|
+
link = lq.deq
|
|
43
|
+
next if link.depth > @opts[:max_depth]
|
|
44
|
+
page = get_page(link)
|
|
45
|
+
pq << page unless page.nil?
|
|
46
|
+
|
|
47
|
+
rescue => bang
|
|
48
|
+
puts bang
|
|
49
|
+
puts bang.backtrace
|
|
50
|
+
end
|
|
51
|
+
end
|
|
61
52
|
}
|
|
62
|
-
@grab_thread
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def initialize(link_queue, page_queue, opts = {} )
|
|
66
|
-
@link_queue = link_queue
|
|
67
|
-
@page_queue = page_queue
|
|
53
|
+
@grab_thread
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def initialize(link_queue, page_queue, opts = {} )
|
|
57
|
+
@link_queue = link_queue
|
|
58
|
+
@page_queue = page_queue
|
|
68
59
|
@opts = opts
|
|
69
60
|
@grab_thread = nil
|
|
70
|
-
|
|
71
|
-
begin
|
|
72
|
-
@agent = Crawler::Agent.new(@opts)
|
|
73
|
-
|
|
74
|
-
rescue => bang
|
|
75
|
-
puts bang
|
|
76
|
-
puts bang.backtrace
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
61
|
+
|
|
62
|
+
begin
|
|
63
|
+
@agent = Crawler::Agent.new(@opts)
|
|
64
|
+
|
|
65
|
+
rescue => bang
|
|
66
|
+
puts bang
|
|
67
|
+
puts bang.backtrace
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -1,82 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
1
|
+
module Watobo
|
|
2
|
+
module Crawler
|
|
3
|
+
module Status
|
|
4
|
+
include Watobo::Plugin::Crawler::Constants
|
|
9
5
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
end
|
|
78
|
-
s
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
6
|
+
@status_lock = Mutex.new
|
|
7
|
+
@request_count = 0
|
|
8
|
+
@engine_status = CRAWL_NONE
|
|
9
|
+
@page_size = 0
|
|
10
|
+
@link_size = 0
|
|
11
|
+
|
|
12
|
+
def self.reset
|
|
13
|
+
@request_count = 0
|
|
14
|
+
@engine_status = CRAWL_NONE
|
|
15
|
+
@page_size = 0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.page_size=(ps)
|
|
19
|
+
@status_lock.synchronize do
|
|
20
|
+
@page_size= ps
|
|
21
|
+
end
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.link_size=(ps)
|
|
26
|
+
@status_lock.synchronize do
|
|
27
|
+
@link_size= ps
|
|
28
|
+
end
|
|
29
|
+
true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.engine=(s)
|
|
33
|
+
@status_lock.synchronize do
|
|
34
|
+
@engine_status = s
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.engine
|
|
39
|
+
e = nil
|
|
40
|
+
@status_lock.synchronize do
|
|
41
|
+
e = @engine_status
|
|
42
|
+
end
|
|
43
|
+
e
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.inc_requests(i = 1)
|
|
47
|
+
@status_lock.synchronize do
|
|
48
|
+
@request_count += i
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.set(status)
|
|
53
|
+
@status_lock.synchronize do
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.get
|
|
59
|
+
s = {}
|
|
60
|
+
@status_lock.synchronize do
|
|
61
|
+
s = {
|
|
62
|
+
:engine_status => @engine_status,
|
|
63
|
+
:total_requests => @request_count,
|
|
64
|
+
:page_size => @page_size,
|
|
65
|
+
:link_size => @link_size
|
|
66
|
+
# :skipped_domains => 0
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
s
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
82
73
|
end
|
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# path ( Monkey Patched )
|
|
16
|
-
def path_mp
|
|
17
|
-
#p = self.path
|
|
18
|
-
self.path.gsub(/\/[^\/]*$/,'/')
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
end
|
|
1
|
+
module URI
|
|
2
|
+
def site
|
|
3
|
+
"#{self.host}:#{self.port}"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# path ( Monkey Patched )
|
|
7
|
+
def path_mp
|
|
8
|
+
#p = self.path
|
|
9
|
+
self.path.gsub(/\/[^\/]*$/,'/')
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -1,119 +1,109 @@
|
|
|
1
|
-
#.
|
|
2
|
-
# filefinder.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
|
|
2
|
+
module Watobo #:nodoc: all
|
|
12
3
|
module Plugin
|
|
13
4
|
module Filefinder
|
|
14
|
-
|
|
5
|
+
|
|
15
6
|
class Check < Watobo::ActiveCheck
|
|
16
7
|
attr_accessor :db_file
|
|
17
8
|
attr_accessor :path
|
|
18
|
-
attr_accessor :append_slash
|
|
19
|
-
|
|
9
|
+
attr_accessor :append_slash
|
|
10
|
+
|
|
20
11
|
@info.update(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
12
|
+
:check_name => 'File Finder', # name of check which briefly describes functionality, will be used for tree and progress views
|
|
13
|
+
:description => "Test list of file names.", # description of checkfunction
|
|
14
|
+
:author => "Andreas Schmidt", # author of check
|
|
15
|
+
:version => "1.0" # check version
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
@finding.update(
|
|
19
|
+
:threat => 'Hidden files may reveal sensitive information or can enhance the attack surface.', # thread of vulnerability, e.g. loss of information
|
|
20
|
+
:class => "Hidden-File", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
|
|
21
|
+
:type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
|
|
22
|
+
:rating => VULN_RATING_LOW
|
|
23
|
+
)
|
|
24
|
+
|
|
34
25
|
def add_extension(ext)
|
|
35
|
-
ext.gsub!(/^\.+/,"")
|
|
26
|
+
ext.gsub!(/^\.+/, "")
|
|
36
27
|
@extensions << ext
|
|
37
28
|
end
|
|
38
|
-
|
|
29
|
+
|
|
39
30
|
def set_extensions(extensions)
|
|
40
31
|
@extensions = extensions if extensions.is_a? Array
|
|
41
32
|
@extensions << nil
|
|
42
33
|
end
|
|
43
|
-
|
|
34
|
+
|
|
44
35
|
def initialize(project, file, prefs)
|
|
45
36
|
super(project, prefs)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
@path = nil
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@path = nil
|
|
49
40
|
@db_file = file
|
|
50
41
|
@prefs = prefs
|
|
51
|
-
@extensions = [
|
|
42
|
+
@extensions = [nil]
|
|
52
43
|
@append_slash = false
|
|
53
44
|
end
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
|
|
46
|
+
|
|
57
47
|
def reset()
|
|
58
48
|
# @catalog_checks.clear
|
|
59
49
|
end
|
|
60
|
-
|
|
50
|
+
|
|
61
51
|
def generateChecks(chat)
|
|
62
52
|
begin
|
|
63
53
|
puts "* generating checks for #{@db_file} ..."
|
|
64
54
|
return false unless File.exist?(@db_file)
|
|
65
|
-
|
|
66
|
-
content = File.readlines(@db_file)
|
|
67
|
-
|
|
55
|
+
|
|
56
|
+
content = File.readlines(@db_file)
|
|
57
|
+
|
|
68
58
|
content.each do |uri|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
end
|
|
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
|
-
|
|
59
|
+
# puts "+ #{uri}"
|
|
60
|
+
@extensions.each do |ext|
|
|
61
|
+
# puts " + #{ext}"
|
|
62
|
+
next if uri.strip =~ /^#/
|
|
63
|
+
# cleanup dir
|
|
64
|
+
uri.strip!
|
|
65
|
+
uri.gsub!(/^[\/\.]+/, '')
|
|
66
|
+
uri.gsub!(/\/$/, '')
|
|
67
|
+
next if uri.strip.empty?
|
|
68
|
+
|
|
69
|
+
checker = proc {
|
|
70
|
+
test_request = nil
|
|
71
|
+
test_response = nil
|
|
72
|
+
# !!! ATTENTION !!!
|
|
73
|
+
# MAKE COPY BEFORE MODIFIYING REQUEST
|
|
74
|
+
test = chat.copyRequest
|
|
75
|
+
new_uri = "#{uri}"
|
|
76
|
+
unless ext.nil? or ext.empty?
|
|
77
|
+
new_uri << ".#{ext}"
|
|
78
|
+
end
|
|
79
|
+
new_uri << "/" if @append_slash == true
|
|
80
|
+
# puts ">> #{new_uri}"
|
|
81
|
+
test.replaceFileExt(new_uri)
|
|
82
|
+
# puts test.url
|
|
83
|
+
status, test_request, test_response = fileExists?(test, @prefs)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if status == true
|
|
87
|
+
|
|
88
|
+
puts "FileFinder >> #{test.url}"
|
|
89
|
+
|
|
90
|
+
addFinding(test_request, test_response,
|
|
91
|
+
:test_item => new_uri,
|
|
92
|
+
# :proof_pattern => "#{Regexp.quote(uri)}",
|
|
93
|
+
:check_pattern => "#{Regexp.quote(new_uri)}",
|
|
94
|
+
:chat => chat,
|
|
95
|
+
:threat => "depends on the file ;)",
|
|
96
|
+
:title => "[#{new_uri}]"
|
|
97
|
+
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# notify(:db_finished)
|
|
103
|
+
[test_request, test_response]
|
|
104
|
+
}
|
|
105
|
+
yield checker
|
|
106
|
+
end
|
|
117
107
|
end
|
|
118
108
|
rescue => bang
|
|
119
109
|
puts "!error in module #{Module.nesting[0].name}"
|
|
@@ -121,27 +111,27 @@ module Watobo#:nodoc: all
|
|
|
121
111
|
end
|
|
122
112
|
end
|
|
123
113
|
end
|
|
124
|
-
|
|
114
|
+
|
|
125
115
|
class Filefinder < Watobo::Template::Plugin
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
|
|
117
|
+
include Watobo::Constants
|
|
128
118
|
class DBSelectFrame < FXVerticalFrame
|
|
129
|
-
|
|
119
|
+
|
|
130
120
|
def select_db(db_name)
|
|
131
121
|
@db_listbox.numItems.times do |i|
|
|
132
122
|
if db_name == @db_listbox.getItemData(i)
|
|
133
123
|
@db_listbox.currentItem = i
|
|
134
124
|
end
|
|
135
|
-
end
|
|
125
|
+
end
|
|
136
126
|
end
|
|
137
|
-
|
|
127
|
+
|
|
138
128
|
def get_db_name
|
|
139
129
|
i = @db_listbox.currentItem
|
|
140
130
|
db = ''
|
|
141
131
|
db = @db_listbox.getItemData(i) if i >= 0
|
|
142
132
|
db
|
|
143
133
|
end
|
|
144
|
-
|
|
134
|
+
|
|
145
135
|
def get_db_list
|
|
146
136
|
l = []
|
|
147
137
|
@db_listbox.numItems.times do |i|
|
|
@@ -149,163 +139,167 @@ module Watobo#:nodoc: all
|
|
|
149
139
|
end
|
|
150
140
|
l
|
|
151
141
|
end
|
|
152
|
-
|
|
142
|
+
|
|
153
143
|
def initialize(parent, db_list, opts)
|
|
154
144
|
super(parent, opts)
|
|
155
145
|
@db_list = []
|
|
156
146
|
db_list.each do |f|
|
|
157
147
|
@db_list << f if File.exist? f
|
|
158
148
|
end
|
|
159
|
-
|
|
160
|
-
FXLabel.new(self, "Each filename must be in a seperate line, e.g. DirBuster-DBs"
|
|
149
|
+
|
|
150
|
+
FXLabel.new(self, "Each filename must be in a seperate line, e.g. DirBuster-DBs")
|
|
161
151
|
frame = FXHorizontalFrame.new(self, :opts => LAYOUT_FILL_X)
|
|
162
|
-
|
|
152
|
+
|
|
163
153
|
@db_listbox = FXListBox.new(frame, :opts => LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK)
|
|
164
154
|
@db_list.each do |db|
|
|
165
155
|
item = @db_listbox.appendItem(db)
|
|
166
|
-
@db_listbox.setItemData(@db_listbox.numItems-1, db
|
|
156
|
+
@db_listbox.setItemData(@db_listbox.numItems-1, db)
|
|
167
157
|
end
|
|
168
158
|
@db_listbox.numVisible = @db_listbox.numItems
|
|
169
|
-
|
|
159
|
+
|
|
170
160
|
@add_db_btn = FXButton.new(frame, "add")
|
|
171
161
|
@add_db_btn.connect(SEL_COMMAND) { add_db }
|
|
172
162
|
end
|
|
173
|
-
|
|
163
|
+
|
|
174
164
|
private
|
|
175
|
-
|
|
165
|
+
|
|
176
166
|
def add_db
|
|
177
167
|
db_path = File.dirname(get_db_name)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
@db_listbox.setItemData(i, db
|
|
168
|
+
db = FXFileDialog.getOpenFilename(self, "Open DB", db_path, "All Files (*)")
|
|
169
|
+
unless db.empty?
|
|
170
|
+
item = @db_listbox.appendItem(db)
|
|
171
|
+
i= @db_listbox.numItems-1
|
|
172
|
+
@db_listbox.setItemData(i, db)
|
|
183
173
|
@db_listbox.currentItem = i
|
|
174
|
+
end
|
|
184
175
|
end
|
|
185
176
|
end
|
|
186
|
-
|
|
187
|
-
|
|
177
|
+
|
|
188
178
|
def updateView()
|
|
189
179
|
#@project = project
|
|
190
180
|
@sites_combo.clearItems()
|
|
191
181
|
@dir_combo.clearItems()
|
|
192
182
|
@dir_combo.disable
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
end
|
|
211
|
-
@dir_combo.setCurrentItem(0, true) if @dir_combo.numItems > 0
|
|
212
|
-
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
@sites_combo.appendItem("no site selected", nil)
|
|
186
|
+
Watobo::Chats.sites(:in_scope => Watobo::Scope.exist?).each do |site|
|
|
187
|
+
#puts "Site: #{site}"
|
|
188
|
+
@sites_combo.appendItem(site.slice(0..35), site)
|
|
189
|
+
end
|
|
190
|
+
@sites_combo.setCurrentItem(0) if @sites_combo.numItems > 0
|
|
191
|
+
ci = @sites_combo.currentItem
|
|
192
|
+
site = (ci >= 0) ? @sites_combo.getItemData(ci) : nil
|
|
193
|
+
@sites_combo.numVisible = @sites_combo.numItems
|
|
194
|
+
@sites_combo.numColumns = 35
|
|
195
|
+
|
|
196
|
+
if site
|
|
197
|
+
@dir_combo.enable
|
|
198
|
+
Watobo::Chats.dirs(@site) do |dir|
|
|
199
|
+
@dir_combo.appendItem(dir.slice(0..35), dir)
|
|
213
200
|
end
|
|
201
|
+
@dir_combo.setCurrentItem(0, true) if @dir_combo.numItems > 0
|
|
202
|
+
|
|
203
|
+
end
|
|
214
204
|
end
|
|
215
|
-
|
|
216
|
-
|
|
205
|
+
|
|
206
|
+
|
|
217
207
|
def initialize(owner, project)
|
|
218
|
-
super(owner, "File Finder", project, :opts => DECOR_ALL, :width=>800, :height=>600)
|
|
208
|
+
super(owner, "File Finder", project, :opts => DECOR_ALL, :width => 800, :height => 600)
|
|
219
209
|
load_icon(__FILE__)
|
|
220
|
-
|
|
210
|
+
|
|
221
211
|
@event_dispatcher_listeners = Hash.new
|
|
222
212
|
@scanner = nil
|
|
223
213
|
@plugin_name = "File-Finder"
|
|
224
214
|
@project = project
|
|
225
215
|
@path = Dir.getwd
|
|
226
|
-
|
|
227
|
-
|
|
216
|
+
|
|
217
|
+
|
|
228
218
|
@site = nil
|
|
229
219
|
@dir = nil
|
|
230
220
|
@db_list = []
|
|
231
221
|
@db_name = ""
|
|
232
222
|
@file_name = ""
|
|
233
|
-
|
|
223
|
+
|
|
234
224
|
config = load_config
|
|
235
225
|
|
|
236
|
-
|
|
226
|
+
|
|
237
227
|
if config.respond_to? :has_key?
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
228
|
+
if config.has_key? :db_list
|
|
229
|
+
config[:db_list].each do |db|
|
|
230
|
+
@db_list << db if File.exist? db
|
|
231
|
+
end
|
|
241
232
|
end
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
233
|
+
|
|
234
|
+
if config.has_key? :name
|
|
235
|
+
@db_list.each do |db|
|
|
236
|
+
@db_name = db if config[:name] == db
|
|
237
|
+
end
|
|
238
|
+
@file_name = config[:name] if @db_name.empty?
|
|
247
239
|
end
|
|
248
|
-
@file_name = config[:name] if @db_name.empty?
|
|
249
240
|
end
|
|
241
|
+
|
|
242
|
+
# load predefined dbs
|
|
243
|
+
db_path = File.expand_path(File.join(File.dirname(__FILE__), 'dbs'))
|
|
244
|
+
Dir.glob("#{db_path}/*").each do |db|
|
|
245
|
+
@db_list << db
|
|
250
246
|
end
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
begin
|
|
247
|
+
|
|
248
|
+
begin
|
|
254
249
|
hs_green = FXHiliteStyle.new
|
|
255
|
-
hs_green.normalForeColor = FXRGBA(255,255,255,255) #FXColor::Red
|
|
256
|
-
hs_green.normalBackColor = FXRGBA(0,255,0,1)
|
|
250
|
+
hs_green.normalForeColor = FXRGBA(255, 255, 255, 255) #FXColor::Red
|
|
251
|
+
hs_green.normalBackColor = FXRGBA(0, 255, 0, 1) # FXColor::White
|
|
257
252
|
hs_green.style = FXText::STYLE_BOLD
|
|
258
|
-
|
|
253
|
+
|
|
259
254
|
hs_red = FXHiliteStyle.new
|
|
260
|
-
hs_red.normalForeColor = FXRGBA(255,255,255,255) # FXColor::Red
|
|
261
|
-
hs_red.normalBackColor = FXRGBA(255,0,0,1)
|
|
255
|
+
hs_red.normalForeColor = FXRGBA(255, 255, 255, 255) # FXColor::Red
|
|
256
|
+
hs_red.normalBackColor = FXRGBA(255, 0, 0, 1) # FXColor::White
|
|
262
257
|
hs_red.style = FXText::STYLE_BOLD
|
|
263
|
-
|
|
264
|
-
|
|
258
|
+
|
|
259
|
+
|
|
265
260
|
path = Dir.getwd
|
|
266
|
-
|
|
261
|
+
|
|
267
262
|
mr_splitter = FXSplitter.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|SPLITTER_VERTICAL|SPLITTER_REVERSED|SPLITTER_TRACKING)
|
|
268
263
|
# top = FXHorizontalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_SIDE_BOTTOM)
|
|
269
|
-
top_frame = FXVerticalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y||LAYOUT_FIX_HEIGHT|LAYOUT_BOTTOM
|
|
264
|
+
top_frame = FXVerticalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y||LAYOUT_FIX_HEIGHT|LAYOUT_BOTTOM, :height => 500)
|
|
270
265
|
top_splitter = FXSplitter.new(top_frame, LAYOUT_FILL_X|SPLITTER_HORIZONTAL|LAYOUT_FILL_Y|SPLITTER_TRACKING)
|
|
271
|
-
log_frame = FXVerticalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_BOTTOM
|
|
272
|
-
|
|
266
|
+
log_frame = FXVerticalFrame.new(mr_splitter, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_BOTTOM, :height => 100)
|
|
267
|
+
|
|
273
268
|
@settings_tab = FXTabBook.new(top_splitter, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
274
|
-
|
|
269
|
+
FXTabItem.new(@settings_tab, "Settings", nil)
|
|
275
270
|
@settings_frame = FXVerticalFrame.new(@settings_tab, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
276
|
-
|
|
271
|
+
|
|
277
272
|
FXTabItem.new(@settings_tab, "Logging", nil)
|
|
278
273
|
@logging_frame = FXVerticalFrame.new(@settings_tab, :opts => LAYOUT_FILL_Y|LAYOUT_FILL_Y|FRAME_RAISED)
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
274
|
+
|
|
275
|
+
request_frame = FXVerticalFrame.new(top_splitter, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
276
|
+
@requestCombo = FXComboBox.new(request_frame, 5, nil, 0,
|
|
282
277
|
COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
283
278
|
#@filterCombo.width =200
|
|
284
|
-
|
|
279
|
+
|
|
285
280
|
@requestCombo.numVisible = 0
|
|
286
281
|
@requestCombo.numColumns = 50
|
|
287
282
|
@requestCombo.editable = false
|
|
288
283
|
@requestCombo.connect(SEL_COMMAND, method(:onSelectRequest))
|
|
289
|
-
|
|
290
|
-
log_text_frame = FXVerticalFrame.new(request_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding=>0)
|
|
284
|
+
|
|
285
|
+
log_text_frame = FXVerticalFrame.new(request_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
291
286
|
@request_editor = RequestEditor.new(log_text_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
287
|
+
|
|
288
|
+
# @scope_only_cb = FXCheckButton.new(@settings_frame, "target scope only", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
289
|
+
# @scope_only_cb.setCheck(false)
|
|
290
|
+
# @scope_only_cb.connect(SEL_COMMAND) { updateView() }
|
|
291
|
+
|
|
297
292
|
FXLabel.new(@settings_frame, "Select Site:")
|
|
298
293
|
@sites_combo = FXComboBox.new(@settings_frame, 5, nil, 0,
|
|
299
294
|
COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
300
295
|
#@filterCombo.width =200
|
|
301
|
-
|
|
296
|
+
|
|
302
297
|
@sites_combo.numVisible = 20
|
|
303
298
|
@sites_combo.numColumns = 35
|
|
304
299
|
@sites_combo.editable = false
|
|
305
300
|
@sites_combo.connect(SEL_COMMAND, method(:onSiteSelect))
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
301
|
+
|
|
302
|
+
|
|
309
303
|
FXLabel.new(@settings_frame, "Root Directory:")
|
|
310
304
|
@dir_combo = FXComboBox.new(@settings_frame, 5, nil, 0,
|
|
311
305
|
COMBOBOX_STATIC|FRAME_SUNKEN|FRAME_THICK|LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
|
@@ -313,43 +307,43 @@ module Watobo#:nodoc: all
|
|
|
313
307
|
@dir_combo.numColumns = 35
|
|
314
308
|
@dir_combo.editable = false
|
|
315
309
|
@dir_combo.connect(SEL_COMMAND, method(:onDirSelect))
|
|
316
|
-
|
|
310
|
+
|
|
317
311
|
@test_all_dirs = FXCheckButton.new(@settings_frame, "test all sub-directories", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_LEFT)
|
|
318
312
|
@test_all_dirs.setCheck(false)
|
|
319
|
-
|
|
320
|
-
|
|
313
|
+
|
|
314
|
+
|
|
321
315
|
@finder_tab = FXTabBook.new(@settings_frame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
|
|
322
|
-
|
|
316
|
+
|
|
323
317
|
FXTabItem.new(@finder_tab, "Filename", nil)
|
|
324
318
|
frame = FXVerticalFrame.new(@finder_tab, :opts => LAYOUT_FILL_X|FRAME_RAISED)
|
|
325
319
|
@search_name_dt = FXDataTarget.new(@file_name)
|
|
326
|
-
|
|
320
|
+
|
|
327
321
|
@dbfile_text = FXTextField.new(frame, 30,
|
|
328
322
|
:target => @search_name_dt, :selector => FXDataTarget::ID_VALUE,
|
|
329
323
|
:opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_X)
|
|
330
324
|
@dbfile_text.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
331
|
-
|
|
332
325
|
|
|
333
|
-
|
|
326
|
+
|
|
327
|
+
FXTabItem.new(@finder_tab, "Database", nil)
|
|
334
328
|
@db_select_frame = DBSelectFrame.new(@finder_tab, @db_list, :opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X)
|
|
335
|
-
|
|
329
|
+
|
|
336
330
|
unless @db_name.empty?
|
|
337
331
|
@db_select_frame.select_db @db_name
|
|
338
332
|
@finder_tab.current = 1
|
|
339
333
|
end
|
|
340
|
-
|
|
334
|
+
|
|
341
335
|
@fmode_dt = FXDataTarget.new(0)
|
|
342
336
|
group_box = FXGroupBox.new(@settings_frame, "Mode", LAYOUT_SIDE_TOP|FRAME_GROOVE|LAYOUT_FILL_X, 0, 0, 0, 0)
|
|
343
337
|
mode_frame = FXVerticalFrame.new(group_box, :opts => LAYOUT_FILL_X)
|
|
344
338
|
@append_slash_cb = FXCheckButton.new(mode_frame, "append /", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP|LAYOUT_FILL_Y)
|
|
345
|
-
|
|
339
|
+
|
|
346
340
|
@append_extensions_cb = FXCheckButton.new(mode_frame, "append extensions", nil, 0, ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP|LAYOUT_FILL_Y)
|
|
347
341
|
frame = FXVerticalFrame.new(mode_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
348
342
|
@extensions_text = FXText.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|TEXT_WORDWRAP)
|
|
349
|
-
ext = "bak;php;asp;aspx;tgz;tar.gz;gz;tmp;temp;old;_"
|
|
350
|
-
|
|
343
|
+
ext = "bak;php;asp;aspx;tgz;tar.gz;gz;tmp;temp;old;_"
|
|
344
|
+
|
|
351
345
|
@extensions_text.setText(ext)
|
|
352
|
-
|
|
346
|
+
|
|
353
347
|
frame = @logging_frame
|
|
354
348
|
@logScanChats = FXCheckButton.new(frame, "enable", nil, 0, JUSTIFY_LEFT|JUSTIFY_TOP|ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP)
|
|
355
349
|
@logScanChats.checkState = false
|
|
@@ -360,43 +354,43 @@ module Watobo#:nodoc: all
|
|
|
360
354
|
@scanlog_name_text.backColor = FXColor::White
|
|
361
355
|
else
|
|
362
356
|
@scanlog_name_text.enabled = false
|
|
363
|
-
@scanlog_name_text.backColor = @scanlog_name_text.parent.backColor
|
|
357
|
+
@scanlog_name_text.backColor = @scanlog_name_text.parent.backColor
|
|
364
358
|
end
|
|
365
359
|
end
|
|
366
360
|
|
|
367
361
|
@scanlog_name_dt = FXDataTarget.new('')
|
|
368
|
-
|
|
369
|
-
@scanlog_dir_label = FXLabel.new(frame, "Scan Name:"
|
|
370
|
-
scanlog_frame = FXHorizontalFrame.new(frame
|
|
362
|
+
# @scanlog_name_dt.value = @project.scanLogDirectory() if File.exist?(@project.scanLogDirectory())
|
|
363
|
+
@scanlog_dir_label = FXLabel.new(frame, "Scan Name:")
|
|
364
|
+
scanlog_frame = FXHorizontalFrame.new(frame, :opts => LAYOUT_FILL_X|LAYOUT_SIDE_TOP)
|
|
371
365
|
@scanlog_name_text = FXTextField.new(scanlog_frame, 20,
|
|
372
|
-
|
|
373
|
-
|
|
366
|
+
:target => @scanlog_name_dt, :selector => FXDataTarget::ID_VALUE,
|
|
367
|
+
:opts => TEXTFIELD_NORMAL|LAYOUT_FILL_COLUMN|LAYOUT_FILL_X)
|
|
374
368
|
@scanlog_name_text.handle(self, FXSEL(SEL_UPDATE, 0), nil)
|
|
375
369
|
unless @logScanChats.checked?
|
|
376
370
|
@scanlog_name_text.enabled = false
|
|
377
371
|
@scanlog_name_text.backColor = @scanlog_name_text.parent.backColor
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
|
|
381
375
|
@pbar = FXProgressBar.new(@settings_frame, nil, 0, LAYOUT_FILL_X|FRAME_SUNKEN|FRAME_THICK|PROGRESSBAR_HORIZONTAL)
|
|
382
376
|
@pbar.progress = 0
|
|
383
377
|
@pbar.total = 0
|
|
384
378
|
@pbar.barColor=0
|
|
385
379
|
@pbar.barColor = 'grey' #FXRGB(255,0,0)
|
|
386
|
-
|
|
380
|
+
|
|
387
381
|
@speed = FXLabel.new(@settings_frame, "Checks per second: -")
|
|
388
382
|
@speed.disable
|
|
389
|
-
|
|
383
|
+
|
|
390
384
|
@start_button = FXButton.new(@settings_frame, "start")
|
|
391
385
|
@start_button.connect(SEL_COMMAND, method(:start))
|
|
392
386
|
@start_button.disable
|
|
393
|
-
|
|
387
|
+
|
|
394
388
|
log_frame_header = FXHorizontalFrame.new(log_frame, :opts => LAYOUT_FILL_X)
|
|
395
|
-
FXLabel.new(log_frame_header, "Logs:"
|
|
396
|
-
|
|
397
|
-
log_text_frame = FXVerticalFrame.new(log_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding=>0)
|
|
389
|
+
FXLabel.new(log_frame_header, "Logs:")
|
|
390
|
+
|
|
391
|
+
log_text_frame = FXVerticalFrame.new(log_frame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, :padding => 0)
|
|
398
392
|
@log_viewer = LogViewer.new(log_text_frame, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
|
399
|
-
|
|
393
|
+
|
|
400
394
|
updateView()
|
|
401
395
|
start_update_timer()
|
|
402
396
|
rescue => bang
|
|
@@ -404,39 +398,38 @@ module Watobo#:nodoc: all
|
|
|
404
398
|
puts bang.backtrace if $DEBUG
|
|
405
399
|
end
|
|
406
400
|
end
|
|
407
|
-
|
|
401
|
+
|
|
408
402
|
def create
|
|
409
403
|
super
|
|
410
|
-
|
|
404
|
+
|
|
411
405
|
@log_viewer.purge_logs
|
|
412
406
|
@request_editor.setText('')
|
|
413
407
|
@requestCombo.clearItems()
|
|
414
408
|
@start_button.text = "Start"
|
|
415
|
-
|
|
409
|
+
|
|
416
410
|
updateView()
|
|
417
|
-
|
|
411
|
+
# Create the windows
|
|
418
412
|
show(PLACEMENT_SCREEN) # Make the main window appear
|
|
419
413
|
disableOptions()
|
|
420
414
|
end
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
415
|
+
|
|
416
|
+
|
|
424
417
|
private
|
|
425
|
-
|
|
418
|
+
|
|
426
419
|
def config
|
|
427
420
|
name = @search_name_dt.value
|
|
428
421
|
db_list = @db_select_frame.get_db_list
|
|
429
422
|
if @finder_tab.current == 1
|
|
430
|
-
name = @db_select_frame.get_db_name
|
|
423
|
+
name = @db_select_frame.get_db_name
|
|
431
424
|
end
|
|
432
|
-
|
|
425
|
+
|
|
433
426
|
c={
|
|
434
|
-
|
|
435
|
-
|
|
427
|
+
:db_list => db_list,
|
|
428
|
+
:name => name
|
|
436
429
|
}
|
|
437
|
-
|
|
430
|
+
|
|
438
431
|
end
|
|
439
|
-
|
|
432
|
+
|
|
440
433
|
def onSelectRequest(sender, sel, item)
|
|
441
434
|
begin
|
|
442
435
|
chat = @requestCombo.getItemData(@requestCombo.currentItem)
|
|
@@ -446,12 +439,12 @@ module Watobo#:nodoc: all
|
|
|
446
439
|
puts bang
|
|
447
440
|
end
|
|
448
441
|
end
|
|
449
|
-
|
|
442
|
+
|
|
450
443
|
def updateRequestCombo(chat_list)
|
|
451
444
|
@requestCombo.clearItems()
|
|
452
445
|
chat_list.each do |chat|
|
|
453
446
|
text = "[#{chat.id}] #{chat.request.url.to_s}"
|
|
454
|
-
@requestCombo.appendItem(text.slice(0..60), chat)
|
|
447
|
+
@requestCombo.appendItem(text.slice(0..60), chat)
|
|
455
448
|
end
|
|
456
449
|
if @requestCombo.numItems > 0 then
|
|
457
450
|
if @requestCombo.numItems < 10 then
|
|
@@ -462,47 +455,47 @@ module Watobo#:nodoc: all
|
|
|
462
455
|
@requestCombo.setCurrentItem(0, true)
|
|
463
456
|
chat = @requestCombo.getItemData(0)
|
|
464
457
|
end
|
|
465
|
-
|
|
458
|
+
|
|
466
459
|
end
|
|
467
|
-
|
|
468
|
-
|
|
460
|
+
|
|
461
|
+
def updateRequestEditor(chat=nil)
|
|
469
462
|
@request_editor.setText('')
|
|
470
463
|
return if chat.nil?
|
|
471
464
|
#chat = createChat(site, dir)
|
|
472
465
|
#@request_box.setText(chat)
|
|
473
466
|
request = chat.copyRequest
|
|
474
|
-
|
|
475
|
-
@request_editor.setText(request.join.gsub(/\r/,""))
|
|
467
|
+
# request.replaceFileExt('')
|
|
468
|
+
@request_editor.setText(request.join.gsub(/\r/, ""))
|
|
476
469
|
end
|
|
477
|
-
|
|
470
|
+
|
|
478
471
|
def createChat()
|
|
479
472
|
request = @request_editor.parseRequest()
|
|
480
473
|
chat = Watobo::Chat.new(request, [], :id => 0)
|
|
481
|
-
end
|
|
482
|
-
|
|
483
|
-
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
def onSiteSelect(sender, sel, item)
|
|
484
477
|
ci = @sites_combo.currentItem
|
|
485
478
|
@request_editor.setText('')
|
|
486
479
|
@requestCombo.clearItems()
|
|
487
|
-
|
|
480
|
+
|
|
488
481
|
@dir_combo.clearItems()
|
|
489
482
|
@dir = ""
|
|
490
|
-
|
|
491
|
-
if ci > 0 then
|
|
483
|
+
|
|
484
|
+
if ci > 0 then
|
|
492
485
|
@site = @sites_combo.getItemData(ci)
|
|
493
486
|
if @site
|
|
494
487
|
@dir_combo.appendItem("/", nil)
|
|
495
|
-
|
|
488
|
+
|
|
496
489
|
chats = Watobo::Chats.select(@site, :method => "GET")
|
|
497
490
|
updateRequestCombo(chats)
|
|
498
491
|
updateRequestEditor(chats.first)
|
|
499
|
-
if @project then
|
|
492
|
+
if @project then
|
|
500
493
|
Watobo::Chats.dirs(@site) do |dir|
|
|
501
494
|
text = "/" + dir.slice(0..35)
|
|
502
495
|
text.gsub!(/\/+/, '/')
|
|
503
496
|
@dir_combo.appendItem(text, dir)
|
|
504
497
|
end
|
|
505
|
-
@dir_combo.setCurrentItem(0, true) if @dir_combo.numItems > 0
|
|
498
|
+
@dir_combo.setCurrentItem(0, true) if @dir_combo.numItems > 0
|
|
506
499
|
end
|
|
507
500
|
end
|
|
508
501
|
enableOptions()
|
|
@@ -515,7 +508,7 @@ module Watobo#:nodoc: all
|
|
|
515
508
|
@start_button.disable
|
|
516
509
|
end
|
|
517
510
|
end
|
|
518
|
-
|
|
511
|
+
|
|
519
512
|
def disableOptions()
|
|
520
513
|
# @use_ssl.setCheck(false)
|
|
521
514
|
# @use_ssl.disable
|
|
@@ -525,70 +518,70 @@ module Watobo#:nodoc: all
|
|
|
525
518
|
@dir_combo.disable
|
|
526
519
|
#@run_passive_checks.disable
|
|
527
520
|
@request_editor.enabled = false
|
|
528
|
-
@request_editor.backColor = FXColor::LightGrey
|
|
521
|
+
@request_editor.backColor = FXColor::LightGrey
|
|
529
522
|
end
|
|
530
|
-
|
|
531
|
-
def enableOptions()
|
|
523
|
+
|
|
524
|
+
def enableOptions()
|
|
532
525
|
# @use_ssl.enable
|
|
533
526
|
@test_all_dirs.enable
|
|
534
527
|
@dir_combo.enable
|
|
535
528
|
@request_editor.enabled = true
|
|
536
|
-
@request_editor.backColor = FXColor::White
|
|
529
|
+
@request_editor.backColor = FXColor::White
|
|
537
530
|
#@run_passive_checks.enable
|
|
538
531
|
end
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
ci = @dir_combo.currentItem
|
|
544
|
-
|
|
545
|
-
if ci > 0
|
|
532
|
+
|
|
533
|
+
def onDirSelect(sender, sel, item)
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
ci = @dir_combo.currentItem
|
|
537
|
+
|
|
538
|
+
if ci > 0 then
|
|
546
539
|
@dir = @dir_combo.getItemData(ci)
|
|
547
540
|
else
|
|
548
541
|
@dir = ""
|
|
549
542
|
end
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
543
|
+
chats = Watobo::Chats.select(@site, :method => "GET", :dir => @dir)
|
|
544
|
+
updateRequestCombo(chats)
|
|
545
|
+
updateRequestEditor(chats.first)
|
|
553
546
|
end
|
|
554
|
-
|
|
555
|
-
|
|
547
|
+
|
|
548
|
+
|
|
556
549
|
def start_update_timer
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
550
|
+
Watobo.save_thread {
|
|
551
|
+
unless @scanner.nil?
|
|
552
|
+
sum = @scanner.sum_progress
|
|
553
|
+
|
|
554
|
+
@speed.text = "Checks per second: #{sum - @pbar.progress}"
|
|
555
|
+
@pbar.progress = sum
|
|
556
|
+
|
|
557
|
+
if @scanner.finished?
|
|
558
|
+
msg = "Scan Finished!"
|
|
559
|
+
@log_viewer.log(LOG_INFO, msg)
|
|
560
|
+
Watobo.log(msg, :sender => "Catalog")
|
|
561
|
+
@scanner = nil
|
|
562
|
+
reset_pbar()
|
|
563
|
+
@start_button.text = "Start"
|
|
564
|
+
@speed.text = "Checks per second: -"
|
|
565
|
+
@speed.disable
|
|
566
|
+
end
|
|
573
567
|
end
|
|
574
|
-
end
|
|
575
568
|
}
|
|
576
569
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
570
|
+
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
|
|
581
574
|
def hide()
|
|
582
575
|
@scanner.cancel() if @scanner
|
|
583
|
-
|
|
576
|
+
super
|
|
584
577
|
end
|
|
585
|
-
|
|
578
|
+
|
|
586
579
|
def reset_pbar
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
580
|
+
@pbar.progress = 0
|
|
581
|
+
@pbar.total = 0
|
|
582
|
+
@pbar.barColor = 'grey' #FXRGB(255,0,0)
|
|
590
583
|
end
|
|
591
|
-
|
|
584
|
+
|
|
592
585
|
def cancel_scanner
|
|
593
586
|
return false if @scanner.nil?
|
|
594
587
|
@scanner.cancel()
|
|
@@ -596,10 +589,10 @@ module Watobo#:nodoc: all
|
|
|
596
589
|
@speed = FXLabel.new(@settings_frame, "Requests per second: -")
|
|
597
590
|
reset_pbar
|
|
598
591
|
m = "Scan canceled by user!"
|
|
599
|
-
@log_viewer.log(LOG_INFO,m)
|
|
592
|
+
@log_viewer.log(LOG_INFO, m)
|
|
600
593
|
Watobo.log(">> #{m}", :sender => self.class.to_s)
|
|
601
594
|
end
|
|
602
|
-
|
|
595
|
+
|
|
603
596
|
def start(sender, sel, item)
|
|
604
597
|
if @start_button.text =~ /cancel/i then
|
|
605
598
|
cancel_scanner
|
|
@@ -607,7 +600,7 @@ module Watobo#:nodoc: all
|
|
|
607
600
|
end
|
|
608
601
|
@start_button.text = "Cancel"
|
|
609
602
|
@speed.enable
|
|
610
|
-
|
|
603
|
+
|
|
611
604
|
chatlist = []
|
|
612
605
|
checklist = []
|
|
613
606
|
#config = { :db_file => @dbfile_dt.value }
|
|
@@ -618,43 +611,43 @@ module Watobo#:nodoc: all
|
|
|
618
611
|
else
|
|
619
612
|
name = @db_select_frame.get_db_name
|
|
620
613
|
end
|
|
621
|
-
|
|
622
|
-
|
|
614
|
+
|
|
615
|
+
|
|
623
616
|
@check = Check.new(@project, name, @project.getScanPreferences())
|
|
624
|
-
|
|
617
|
+
|
|
625
618
|
if @append_extensions_cb.checked?
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
619
|
+
extensions = @extensions_text.text.split(/(;|\n)/).select { |x| !x.strip.empty? }
|
|
620
|
+
|
|
621
|
+
@check.set_extensions(extensions)
|
|
629
622
|
end
|
|
630
|
-
|
|
623
|
+
|
|
631
624
|
@check.append_slash = @append_slash_cb.checked?
|
|
632
|
-
|
|
633
|
-
|
|
625
|
+
|
|
626
|
+
|
|
634
627
|
@check.path = @path
|
|
635
|
-
|
|
628
|
+
|
|
636
629
|
checklist.push @check
|
|
637
630
|
@check.resetCounters()
|
|
638
|
-
|
|
639
|
-
|
|
631
|
+
|
|
632
|
+
|
|
640
633
|
@progress_window = Watobo::Gui::ProgressWindow.new(self)
|
|
641
|
-
|
|
642
|
-
|
|
634
|
+
|
|
635
|
+
|
|
643
636
|
@progress_window.show(PLACEMENT_SCREEN)
|
|
644
|
-
|
|
637
|
+
t = Thread.new {
|
|
645
638
|
begin
|
|
646
639
|
c=1
|
|
647
640
|
if @test_all_dirs.checked? then
|
|
648
641
|
c = 0
|
|
649
642
|
Watobo::Chats.dirs(@site, :base_dir => @dir, :include_subdirs => @test_all_dirs.checked?) { c += 1 }
|
|
650
|
-
@progress_window.update_progress(
|
|
643
|
+
@progress_window.update_progress(:title => "File Finder Plugin", :total => c, :job => @dir)
|
|
651
644
|
Watobo::Chats.dirs(@site, :base_dir => @dir, :include_subdirs => @test_all_dirs.checked?) do |dir|
|
|
652
|
-
m = "running checks on #{dir}"
|
|
653
|
-
@log_viewer.log(LOG_INFO,m)
|
|
654
|
-
|
|
655
|
-
|
|
645
|
+
m = "running checks on #{dir}"
|
|
646
|
+
@log_viewer.log(LOG_INFO, m)
|
|
647
|
+
Watobo.log(">> #{m}", :sender => self.class.to_s)
|
|
648
|
+
|
|
656
649
|
chat = createChat()
|
|
657
|
-
|
|
650
|
+
|
|
658
651
|
chat.request.replaceFileExt('')
|
|
659
652
|
chat.request.setDir(dir)
|
|
660
653
|
chatlist.push chat
|
|
@@ -664,8 +657,8 @@ module Watobo#:nodoc: all
|
|
|
664
657
|
end
|
|
665
658
|
else
|
|
666
659
|
notify(:update_progress, :total => c, :job => @dir)
|
|
667
|
-
m = "running checks on #{@dir}"
|
|
668
|
-
@log_viewer.log(LOG_INFO,m)
|
|
660
|
+
m = "running checks on #{@dir}"
|
|
661
|
+
@log_viewer.log(LOG_INFO, m)
|
|
669
662
|
Watobo.log(">> #{m}", :sender => self.class.to_s)
|
|
670
663
|
chat = createChat()
|
|
671
664
|
chatlist.push chat
|
|
@@ -679,49 +672,49 @@ module Watobo#:nodoc: all
|
|
|
679
672
|
@progress_window.hide
|
|
680
673
|
end
|
|
681
674
|
}
|
|
682
|
-
|
|
683
|
-
|
|
675
|
+
|
|
676
|
+
|
|
684
677
|
t.join
|
|
685
|
-
|
|
678
|
+
|
|
686
679
|
scan_prefs = Watobo.project.getScanPreferences
|
|
687
680
|
if @logScanChats.checked?
|
|
688
681
|
scan_prefs[:scanlog_name] = @scanlog_name_dt.value unless @scanlog_name_dt.value.empty?
|
|
689
682
|
end
|
|
690
|
-
|
|
683
|
+
|
|
691
684
|
@scanner = Watobo::Scanner3.new(chatlist, checklist, @project.passive_checks, scan_prefs)
|
|
692
685
|
@pbar.total = @scanner.sum_total
|
|
693
686
|
@pbar.progress = 0
|
|
694
|
-
@pbar.barColor = 'red'
|
|
695
|
-
|
|
687
|
+
@pbar.barColor = 'red'
|
|
688
|
+
|
|
696
689
|
speed = 0
|
|
697
690
|
lasttime = 0
|
|
698
|
-
|
|
699
|
-
|
|
691
|
+
|
|
692
|
+
|
|
700
693
|
m= "Total Requests: #{@check.numChecks}"
|
|
701
|
-
@log_viewer.log(LOG_INFO,m)
|
|
702
|
-
|
|
694
|
+
@log_viewer.log(LOG_INFO, m)
|
|
695
|
+
|
|
703
696
|
|
|
704
697
|
begin
|
|
705
698
|
m = "start scanning..."
|
|
706
|
-
@log_viewer.log(LOG_INFO,m)
|
|
699
|
+
@log_viewer.log(LOG_INFO, m)
|
|
707
700
|
long_log = ["Scan started"]
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
end
|
|
713
|
-
Watobo.log(long_log, :sender => self.class.to_s)
|
|
714
|
-
scan_prefs = Watobo::Conf::Scanner.to_h
|
|
715
|
-
scan_prefs[:run_passive_checks] = false
|
|
716
|
-
@scanner.run(scan_prefs)
|
|
717
|
-
|
|
718
|
-
rescue => bang
|
|
719
|
-
puts bang
|
|
720
|
-
puts bang.backtrace if $DEBUG
|
|
701
|
+
long_log << "Source: #{name}"
|
|
702
|
+
long_log << "Target Dirs:"
|
|
703
|
+
chatlist.each do |c|
|
|
704
|
+
long_log << c.request.dir
|
|
721
705
|
end
|
|
706
|
+
Watobo.log(long_log, :sender => self.class.to_s)
|
|
707
|
+
scan_prefs = Watobo::Conf::Scanner.to_h
|
|
708
|
+
scan_prefs[:run_passive_checks] = false
|
|
709
|
+
@scanner.run(scan_prefs)
|
|
710
|
+
|
|
711
|
+
rescue => bang
|
|
712
|
+
puts bang
|
|
713
|
+
puts bang.backtrace if $DEBUG
|
|
714
|
+
end
|
|
722
715
|
|
|
723
716
|
end
|
|
724
|
-
|
|
717
|
+
|
|
725
718
|
end
|
|
726
719
|
end
|
|
727
720
|
end
|