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.
Files changed (283) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +46 -1
  3. data/bin/nfq_server.rb +0 -9
  4. data/bin/watobo_gui.rb +3 -13
  5. data/custom-views/prettify-json.rb +9 -18
  6. data/icons/watobo.ico +0 -0
  7. data/icons/watobo.ico.old +0 -0
  8. data/lib/watobo.rb +10 -19
  9. data/lib/watobo/adapters.rb +5 -14
  10. data/lib/watobo/adapters/data_store.rb +50 -59
  11. data/lib/watobo/adapters/file/file_store.rb +287 -296
  12. data/lib/watobo/adapters/file/marshal_store.rb +293 -296
  13. data/lib/watobo/adapters/session_store.rb +5 -14
  14. data/lib/watobo/ca.rb +1 -10
  15. data/lib/watobo/config.rb +197 -206
  16. data/lib/watobo/constants.rb +0 -9
  17. data/lib/watobo/core.rb +3 -12
  18. data/lib/watobo/core/active_check.rb +72 -135
  19. data/lib/watobo/core/active_checks.rb +49 -58
  20. data/lib/watobo/core/ca.rb +369 -389
  21. data/lib/watobo/core/cert_store.rb +34 -43
  22. data/lib/watobo/core/chat.rb +92 -101
  23. data/lib/watobo/core/chats.rb +271 -280
  24. data/lib/watobo/core/client_cert_store.rb +106 -35
  25. data/lib/watobo/core/conversation.rb +48 -57
  26. data/lib/watobo/core/cookie.rb +23 -32
  27. data/lib/watobo/core/egress_handlers.rb +98 -0
  28. data/lib/watobo/core/finding.rb +66 -75
  29. data/lib/watobo/core/findings.rb +107 -114
  30. data/lib/watobo/core/forwarding_proxy.rb +13 -22
  31. data/lib/watobo/core/fuzz_gen.rb +0 -9
  32. data/lib/watobo/core/intercept_carver.rb +166 -177
  33. data/lib/watobo/core/intercept_filter.rb +235 -244
  34. data/lib/watobo/core/interceptor.rb +98 -107
  35. data/lib/watobo/core/min_class.rb +4 -13
  36. data/lib/watobo/core/netfilter_queue.rb +170 -179
  37. data/lib/watobo/core/ott_cache.rb +132 -141
  38. data/lib/watobo/core/parameter.rb +43 -52
  39. data/lib/watobo/core/passive_check.rb +103 -102
  40. data/lib/watobo/core/passive_checks.rb +48 -57
  41. data/lib/watobo/core/passive_scanner.rb +54 -55
  42. data/lib/watobo/core/plugin.rb +11 -20
  43. data/lib/watobo/core/project.rb +3 -9
  44. data/lib/watobo/core/proxy.rb +43 -52
  45. data/lib/watobo/core/request.rb +125 -123
  46. data/lib/watobo/core/response.rb +44 -53
  47. data/lib/watobo/core/scanner.rb +0 -9
  48. data/lib/watobo/core/scanner3.rb +405 -414
  49. data/lib/watobo/core/scope.rb +83 -92
  50. data/lib/watobo/core/session.rb +1043 -1026
  51. data/lib/watobo/core/sid_cache.rb +98 -107
  52. data/lib/watobo/core/subscriber.rb +25 -34
  53. data/lib/watobo/defaults.rb +21 -30
  54. data/lib/watobo/external/diff/lcs.rb +0 -9
  55. data/lib/watobo/external/diff/lcs/array.rb +0 -9
  56. data/lib/watobo/external/diff/lcs/block.rb +0 -9
  57. data/lib/watobo/external/diff/lcs/callbacks.rb +0 -9
  58. data/lib/watobo/external/diff/lcs/change.rb +0 -9
  59. data/lib/watobo/external/diff/lcs/hunk.rb +0 -9
  60. data/lib/watobo/external/diff/lcs/ldiff.rb +0 -9
  61. data/lib/watobo/external/diff/lcs/string.rb +0 -9
  62. data/lib/watobo/externals.rb +6 -15
  63. data/lib/watobo/framework.rb +4 -13
  64. data/lib/watobo/framework/create_project.rb +60 -69
  65. data/lib/watobo/framework/init.rb +0 -9
  66. data/lib/watobo/framework/init_modules.rb +0 -9
  67. data/lib/watobo/framework/license_text.rb +28 -37
  68. data/lib/watobo/framework/load_chat.rb +13 -22
  69. data/lib/watobo/gui.rb +132 -123
  70. data/lib/watobo/gui/about_watobo.rb +0 -9
  71. data/lib/watobo/gui/browser_preview.rb +0 -9
  72. data/lib/watobo/gui/certificate_dialog.rb +0 -9
  73. data/lib/watobo/gui/chat_diff.rb +0 -9
  74. data/lib/watobo/gui/chatviewer_frame.rb +73 -72
  75. data/lib/watobo/gui/checkboxtree.rb +0 -9
  76. data/lib/watobo/gui/checks_policy_frame.rb +0 -9
  77. data/lib/watobo/gui/client_cert_dialog.rb +96 -87
  78. data/lib/watobo/gui/confirm_scan_dialog.rb +0 -9
  79. data/lib/watobo/gui/conversation_table.rb +158 -164
  80. data/lib/watobo/gui/conversation_table_ctrl.rb +207 -216
  81. data/lib/watobo/gui/conversation_table_ctrl2.rb +373 -382
  82. data/lib/watobo/gui/csrf_token_dialog.rb +0 -9
  83. data/lib/watobo/gui/custom_viewer.rb +374 -383
  84. data/lib/watobo/gui/dashboard.rb +296 -303
  85. data/lib/watobo/gui/define_scope_frame.rb +0 -9
  86. data/lib/watobo/gui/differ_frame.rb +215 -224
  87. data/lib/watobo/gui/edit_comment.rb +0 -9
  88. data/lib/watobo/gui/edit_scope_dialog.rb +0 -9
  89. data/lib/watobo/gui/export_dialog.rb +104 -113
  90. data/lib/watobo/gui/finding_info.rb +0 -9
  91. data/lib/watobo/gui/findings_tree.rb +210 -217
  92. data/lib/watobo/gui/full_scan_dialog.rb +0 -9
  93. data/lib/watobo/gui/fuzzer_gui.rb +1295 -1313
  94. data/lib/watobo/gui/fxsave_thread.rb +14 -0
  95. data/lib/watobo/gui/goto_url_dialog.rb +70 -79
  96. data/lib/watobo/gui/hex_viewer.rb +0 -9
  97. data/lib/watobo/gui/html_viewer.rb +287 -296
  98. data/lib/watobo/gui/intercept_filter_dialog.rb +188 -197
  99. data/lib/watobo/gui/interceptor_gui.rb +1041 -1051
  100. data/lib/watobo/gui/interceptor_settings_dialog.rb +0 -9
  101. data/lib/watobo/gui/json_viewer.rb +287 -0
  102. data/lib/watobo/gui/list_box.rb +101 -110
  103. data/lib/watobo/gui/log_file_viewer.rb +32 -41
  104. data/lib/watobo/gui/log_viewer.rb +83 -88
  105. data/lib/watobo/gui/login_wizzard.rb +0 -9
  106. data/lib/watobo/gui/main_window.rb +587 -618
  107. data/lib/watobo/gui/manual_request_editor.rb +620 -565
  108. data/lib/watobo/gui/master_pw_dialog.rb +0 -9
  109. data/lib/watobo/gui/mixins/gui_settings.rb +29 -38
  110. data/lib/watobo/gui/page_tree.rb +217 -226
  111. data/lib/watobo/gui/password_policy_dialog.rb +0 -9
  112. data/lib/watobo/gui/plugin_board.rb +0 -9
  113. data/lib/watobo/gui/preferences_dialog.rb +0 -9
  114. data/lib/watobo/gui/progress_window.rb +17 -27
  115. data/lib/watobo/gui/project_wizzard.rb +0 -9
  116. data/lib/watobo/gui/proxy_dialog.rb +1 -10
  117. data/lib/watobo/gui/quick_scan_dialog.rb +0 -9
  118. data/lib/watobo/gui/request_builder_frame.rb +102 -111
  119. data/lib/watobo/gui/request_editor.rb +181 -137
  120. data/lib/watobo/gui/rewrite_filters_dialog.rb +394 -403
  121. data/lib/watobo/gui/rewrite_rules_dialog.rb +372 -381
  122. data/lib/watobo/gui/save_chat_dialog.rb +140 -149
  123. data/lib/watobo/gui/scanner_settings_dialog.rb +0 -9
  124. data/lib/watobo/gui/select_chat_dialog.rb +0 -9
  125. data/lib/watobo/gui/session_management_dialog.rb +0 -9
  126. data/lib/watobo/gui/sites_tree.rb +0 -9
  127. data/lib/watobo/gui/status_bar.rb +0 -9
  128. data/lib/watobo/gui/table_editor.rb +0 -9
  129. data/lib/watobo/gui/tagless_viewer.rb +0 -9
  130. data/lib/watobo/gui/templates/plugin.rb +0 -9
  131. data/lib/watobo/gui/templates/plugin2.rb +92 -100
  132. data/lib/watobo/gui/templates/plugin_base.rb +144 -153
  133. data/lib/watobo/gui/text_viewer.rb +0 -9
  134. data/lib/watobo/gui/transcoder_window.rb +0 -9
  135. data/lib/watobo/gui/utils/gui_utils.rb +0 -9
  136. data/lib/watobo/gui/utils/init_icons.rb +86 -95
  137. data/lib/watobo/gui/utils/load_icons.rb +33 -42
  138. data/lib/watobo/gui/utils/load_plugins.rb +116 -119
  139. data/lib/watobo/gui/utils/master_password.rb +68 -77
  140. data/lib/watobo/gui/utils/save_default_settings.rb +113 -122
  141. data/lib/watobo/gui/utils/save_project_settings.rb +0 -9
  142. data/lib/watobo/gui/utils/save_proxy_settings.rb +41 -50
  143. data/lib/watobo/gui/utils/save_scanner_settings.rb +18 -27
  144. data/lib/watobo/gui/utils/session_history.rb +112 -121
  145. data/lib/watobo/gui/workspace_dialog.rb +0 -9
  146. data/lib/watobo/gui/www_auth_dialog.rb +0 -9
  147. data/lib/watobo/gui/xml_viewer_frame.rb +0 -9
  148. data/lib/watobo/http.rb +4 -13
  149. data/lib/watobo/http/cookies/cookies.rb +26 -35
  150. data/lib/watobo/http/data/data.rb +45 -54
  151. data/lib/watobo/http/data/json.rb +47 -55
  152. data/lib/watobo/http/url/url.rb +38 -47
  153. data/lib/watobo/http/xml/xml.rb +124 -130
  154. data/lib/watobo/interceptor.rb +3 -12
  155. data/lib/watobo/interceptor/proxy.rb +742 -739
  156. data/lib/watobo/interceptor/transparent.rb +22 -24
  157. data/lib/watobo/mixins.rb +10 -19
  158. data/lib/watobo/mixins/check_info.rb +27 -36
  159. data/lib/watobo/mixins/httpparser.rb +613 -637
  160. data/lib/watobo/mixins/request_parser.rb +88 -97
  161. data/lib/watobo/mixins/shapers.rb +515 -529
  162. data/lib/watobo/mixins/transcoders.rb +3 -11
  163. data/lib/watobo/parser.rb +1 -10
  164. data/lib/watobo/parser/html.rb +83 -92
  165. data/lib/watobo/patch_fxruby_setfocus.rb +26 -0
  166. data/lib/watobo/sockets.rb +3 -12
  167. data/lib/watobo/sockets/agent.rb +828 -837
  168. data/lib/watobo/sockets/client_socket.rb +308 -312
  169. data/lib/watobo/sockets/connection.rb +401 -410
  170. data/lib/watobo/sockets/http_socket.rb +11 -13
  171. data/lib/watobo/sockets/ntlm_auth.rb +129 -138
  172. data/lib/watobo/utils.rb +10 -19
  173. data/lib/watobo/utils/check_regex.rb +0 -9
  174. data/lib/watobo/utils/copy_object.rb +0 -9
  175. data/lib/watobo/utils/crypto.rb +0 -9
  176. data/lib/watobo/utils/expand_range.rb +23 -32
  177. data/lib/watobo/utils/export_xml.rb +97 -106
  178. data/lib/watobo/utils/file_management.rb +9 -11
  179. data/lib/watobo/utils/hexprint.rb +9 -18
  180. data/lib/watobo/utils/load_chat.rb +0 -9
  181. data/lib/watobo/utils/load_icon.rb +0 -9
  182. data/lib/watobo/utils/ntlm.rb +866 -875
  183. data/lib/watobo/utils/print_debug.rb +12 -21
  184. data/lib/watobo/utils/response_builder.rb +90 -99
  185. data/lib/watobo/utils/response_hash.rb +0 -9
  186. data/lib/watobo/utils/secure_eval.rb +0 -9
  187. data/lib/watobo/utils/strings.rb +10 -19
  188. data/lib/watobo/utils/text2request.rb +0 -9
  189. data/lib/watobo/utils/url.rb +23 -32
  190. data/lib/watobo/utils/utf16.rb +11 -20
  191. data/modules/active/Apache/mod_status.rb +0 -9
  192. data/modules/active/Apache/multiview.rb +151 -160
  193. data/modules/active/Flash/crossdomain.rb +0 -9
  194. data/modules/active/JWT/jwt_oauth2_none.rb +111 -0
  195. data/modules/active/cq5/cq5_default_selectors.rb +106 -115
  196. data/modules/active/cq5/cqp_user_enumeration.rb +125 -134
  197. data/modules/active/directories/dirwalker.rb +0 -9
  198. data/modules/active/discovery/fileextensions.rb +0 -9
  199. data/modules/active/discovery/http_methods.rb +0 -9
  200. data/modules/active/discovery/jsmapfiles.rb +79 -0
  201. data/modules/active/domino/domino_db.rb +68 -76
  202. data/modules/active/dotNET/custom_errors.rb +102 -111
  203. data/modules/active/dotNET/dotnet_files.rb +90 -99
  204. data/modules/active/fileinclusion/lfi_simple.rb +0 -9
  205. data/modules/active/jboss/jboss_basic.rb +0 -9
  206. data/modules/active/sap/business_objects.rb +51 -60
  207. data/modules/active/sap/its_commands.rb +0 -9
  208. data/modules/active/sap/its_service_parameter.rb +0 -9
  209. data/modules/active/sap/its_services.rb +0 -9
  210. data/modules/active/sap/its_xss.rb +0 -9
  211. data/modules/active/shell_shock/shell_shock.rb +139 -148
  212. data/modules/active/siebel/siebel_apps.rb +160 -169
  213. data/modules/active/sqlinjection/sql_boolean.rb +0 -9
  214. data/modules/active/sqlinjection/sql_numerical.rb +198 -0
  215. data/modules/active/sqlinjection/sqli_error.rb +0 -9
  216. data/modules/active/sqlinjection/sqli_timing.rb +220 -229
  217. data/modules/active/struts2/default_handler_ognl.rb +106 -115
  218. data/modules/active/struts2/include_params_ognl.rb +105 -114
  219. data/modules/active/xml/xml_xxe.rb +112 -123
  220. data/modules/active/xss/xss_ng.rb +214 -223
  221. data/modules/active/xss/xss_simple.rb +0 -9
  222. data/modules/passive/ajax.rb +68 -77
  223. data/modules/passive/autocomplete.rb +56 -65
  224. data/modules/passive/cookie_options.rb +0 -9
  225. data/modules/passive/cookie_xss.rb +0 -9
  226. data/modules/passive/detect_code.rb +0 -9
  227. data/modules/passive/detect_fileupload.rb +0 -9
  228. data/modules/passive/detect_infrastructure.rb +0 -9
  229. data/modules/passive/detect_one_time_tokens.rb +0 -9
  230. data/modules/passive/dirindexing.rb +0 -9
  231. data/modules/passive/disclosure_domino.rb +55 -64
  232. data/modules/passive/disclosure_emails.rb +0 -9
  233. data/modules/passive/disclosure_ipaddr.rb +55 -53
  234. data/modules/passive/filename_as_parameter.rb +0 -9
  235. data/modules/passive/form_spotter.rb +0 -9
  236. data/modules/passive/hidden_fields.rb +50 -59
  237. data/modules/passive/hotspots.rb +0 -9
  238. data/modules/passive/in_script_parameter.rb +0 -9
  239. data/modules/passive/json_web_token.rb +93 -0
  240. data/modules/passive/multiple_server_headers.rb +0 -9
  241. data/modules/passive/possible_login.rb +0 -9
  242. data/modules/passive/redirect_url.rb +0 -9
  243. data/modules/passive/redirectionz.rb +0 -9
  244. data/modules/passive/sap-headers.rb +56 -65
  245. data/modules/passive/xss_dom.rb +0 -9
  246. data/plugins/aem/aem.rb +11 -20
  247. data/plugins/aem/gui/main.rb +118 -127
  248. data/plugins/aem/gui/tree_view.rb +171 -180
  249. data/plugins/aem/lib/agent.rb +130 -138
  250. data/plugins/aem/lib/dispatcher.rb +45 -51
  251. data/plugins/aem/lib/engine.rb +177 -186
  252. data/plugins/catalog/catalog.rb +345 -355
  253. data/plugins/crawler/crawler.rb +4 -13
  254. data/plugins/crawler/gui.rb +5 -14
  255. data/plugins/crawler/gui/auth_frame.rb +270 -279
  256. data/plugins/crawler/gui/crawler_gui.rb +271 -276
  257. data/plugins/crawler/gui/general_settings_frame.rb +96 -105
  258. data/plugins/crawler/gui/hooks_frame.rb +80 -89
  259. data/plugins/crawler/gui/scope_frame.rb +50 -59
  260. data/plugins/crawler/gui/settings_tabbook.rb +38 -47
  261. data/plugins/crawler/gui/status_frame.rb +59 -68
  262. data/plugins/crawler/lib/bags.rb +18 -27
  263. data/plugins/crawler/lib/constants.rb +11 -20
  264. data/plugins/crawler/lib/engine.rb +488 -497
  265. data/plugins/crawler/lib/grabber.rb +68 -77
  266. data/plugins/crawler/lib/status.rb +71 -80
  267. data/plugins/crawler/lib/uri_mp.rb +12 -21
  268. data/plugins/filefinder/filefinder.rb +326 -333
  269. data/plugins/sqlmap/bin/test.rb +78 -87
  270. data/plugins/sqlmap/gui.rb +4 -13
  271. data/plugins/sqlmap/gui/main.rb +218 -227
  272. data/plugins/sqlmap/gui/options_frame.rb +97 -106
  273. data/plugins/sqlmap/lib/sqlmap_ctrl.rb +90 -100
  274. data/plugins/sqlmap/sqlmap.rb +2 -11
  275. data/plugins/sslchecker/cli/sslchecker_cli.rb +0 -9
  276. data/plugins/sslchecker/gui/cipher_table.rb +246 -254
  277. data/plugins/sslchecker/gui/gui.rb +258 -264
  278. data/plugins/sslchecker/gui/sslchecker.rb +4 -13
  279. data/plugins/sslchecker/lib/check.rb +127 -133
  280. data/plugins/wshell/gui/main.rb +119 -117
  281. data/plugins/wshell/lib/core.rb +38 -88
  282. data/plugins/wshell/wshell.rb +11 -20
  283. metadata +170 -164
@@ -1,120 +1,113 @@
1
- #.
2
- # findings.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 Findings
13
- @findings = {}
14
- @findings_lock = Mutex.new
15
- @event_dispatcher_listeners = Hash.new
16
- def self.subscribe(event, &callback)
17
- (@event_dispatcher_listeners[event] ||= []) << callback
18
- end
19
-
20
- def self.clearEvents(event)
21
- @event_dispatcher_listeners[event] ||= []
22
- @event_dispatcher_listeners[event].clear
23
- end
24
-
25
- def self.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
2
+ module Watobo#:nodoc: all
3
+ module Findings
4
+ @findings = {}
5
+ @findings_lock = Mutex.new
6
+ @event_dispatcher_listeners = Hash.new
7
+ def self.subscribe(event, &callback)
8
+ (@event_dispatcher_listeners[event] ||= []) << callback
9
+ end
10
+
11
+ def self.clearEvents(event)
12
+ @event_dispatcher_listeners[event] ||= []
13
+ @event_dispatcher_listeners[event].clear
14
+ end
15
+
16
+ def self.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
31
22
  end
32
23
 
33
24
  def self.length
34
25
  @findings.length
35
- end
36
-
37
- def self.reset
38
- @findings = {}
39
- @event_dispatcher_listeners = Hash.new
40
- end
41
-
42
- def self.exist?(finding)
43
- @findings.has_key?(finding.details[:fid])
44
- end
45
-
46
- def self.set(finding, prefs)
47
- @findings_lock.synchronize do
48
- if @findings.has_key? finding.fid
49
- @findings[finding.fid].details.update prefs
50
- Watobo::DataStore.update_finding(finding)
51
- return true
52
- end
53
- return false
54
- end
55
- end
56
-
57
- def self.unset_false_positive(finding)
58
- @findings_lock.synchronize do
59
- if @findings.has_key? finding.fid
60
- @findings[finding.fid].unset_false_positive
61
- Watobo::DataStore.update_finding(finding)
62
- return true
63
- end
64
- return false
65
- end
66
- end
67
-
68
- def self.set_false_positive(finding)
69
- @findings_lock.synchronize do
70
- if @findings.has_key? finding.fid
71
- @findings[finding.fid].set_false_positive
72
- Watobo::DataStore.update_finding(finding)
73
- return true
74
- end
75
- return false
76
- end
77
- end
78
-
79
- def self.each(&block)
80
- if block_given?
81
- @findings_lock.synchronize do
82
- @findings.map{|f| yield f }
83
- end
84
- end
85
- end
86
-
87
- def self.delete(finding)
88
- @findings_lock.synchronize do
89
- Watobo::DataStore.delete_finding(finding)
90
- @findings.delete finding.fid
91
- end
92
- end
93
-
94
- def self.add(finding, opts={})
95
- @findings_lock.synchronize do
96
- options = {
97
- :notify => true,
98
- :save_finding => true
99
- }
100
- options.update opts
101
- puts "[Project] add finding #{finding.fid}" if $DEBUG
102
-
103
- unless @findings.has_key?(finding.fid)
104
- begin
105
- @findings[finding.fid] = finding
106
- notify(:new, finding) if options[:notify] == true
107
-
108
- Watobo::DataStore.add_finding(finding) if options[:save_finding] == true
109
- rescue => bang
110
- puts "!!!ERROR: #{Module.nesting[0].name}"
111
- puts bang
112
- puts bang.backtrace if $DEBUG
113
- end
114
- end
115
- end
116
-
117
- end
118
-
119
- end
26
+ end
27
+
28
+ def self.reset
29
+ @findings = {}
30
+ @event_dispatcher_listeners = Hash.new
31
+ end
32
+
33
+ def self.exist?(finding)
34
+ @findings.has_key?(finding.details[:fid])
35
+ end
36
+
37
+ def self.set(finding, prefs)
38
+ @findings_lock.synchronize do
39
+ if @findings.has_key? finding.fid
40
+ @findings[finding.fid].details.update prefs
41
+ Watobo::DataStore.update_finding(finding)
42
+ return true
43
+ end
44
+ return false
45
+ end
46
+ end
47
+
48
+ def self.unset_false_positive(finding)
49
+ @findings_lock.synchronize do
50
+ if @findings.has_key? finding.fid
51
+ @findings[finding.fid].unset_false_positive
52
+ Watobo::DataStore.update_finding(finding)
53
+ return true
54
+ end
55
+ return false
56
+ end
57
+ end
58
+
59
+ def self.set_false_positive(finding)
60
+ @findings_lock.synchronize do
61
+ if @findings.has_key? finding.fid
62
+ @findings[finding.fid].set_false_positive
63
+ Watobo::DataStore.update_finding(finding)
64
+ return true
65
+ end
66
+ return false
67
+ end
68
+ end
69
+
70
+ def self.each(&block)
71
+ if block_given?
72
+ @findings_lock.synchronize do
73
+ @findings.map{|f| yield f }
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.delete(finding)
79
+ @findings_lock.synchronize do
80
+ Watobo::DataStore.delete_finding(finding)
81
+ @findings.delete finding.fid
82
+ end
83
+ end
84
+
85
+ def self.add(finding, opts={})
86
+ @findings_lock.synchronize do
87
+ options = {
88
+ :notify => true,
89
+ :save_finding => true
90
+ }
91
+ options.update opts
92
+ puts "[Project] add finding #{finding.fid}" if $DEBUG
93
+
94
+
95
+ # only add finding if it (its fid) doesn't already exist
96
+ unless @findings.has_key?(finding.fid)
97
+ begin
98
+ @findings[finding.fid] = finding
99
+ notify(:new, finding) if options[:notify] == true
100
+
101
+ Watobo::DataStore.add_finding(finding) if options[:save_finding] == true
102
+ rescue => bang
103
+ puts "!!!ERROR: #{Module.nesting[0].name}"
104
+ puts bang
105
+ puts bang.backtrace if $DEBUG
106
+ end
107
+ end
108
+ end
109
+
110
+ end
111
+
112
+ end
120
113
  end
@@ -1,18 +1,9 @@
1
- #.
2
- # forwarding_proxy.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 ForwardingProxy
13
-
4
+
14
5
 
15
- def self.get(site=nil)
6
+ def self.get(site=nil)
16
7
  begin
17
8
  fp = Watobo::Conf::ForwardingProxy.to_h
18
9
 
@@ -21,7 +12,7 @@ module Watobo#:nodoc: all
21
12
  name = Watobo::Conf::ForwardingProxy.default_proxy
22
13
  proxy = fp[name]
23
14
  return Watobo::Proxy.new(proxy)
24
- end
15
+ end
25
16
 
26
17
  fp.each do |pn, ps|
27
18
  # ignore old style proxy
@@ -37,13 +28,13 @@ module Watobo#:nodoc: all
37
28
  return proxy
38
29
  end
39
30
  end
40
- end
41
-
42
- rescue => bang
43
- puts bang
44
- puts bang.backtrace
45
- end
46
- return nil
47
- end
48
- end
31
+ end
32
+
33
+ rescue => bang
34
+ puts bang
35
+ puts bang.backtrace
36
+ end
37
+ return nil
38
+ end
39
+ end
49
40
  end
@@ -1,12 +1,3 @@
1
- #.
2
- # fuzz_gen.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
2
  module Watobo#:nodoc: all
12
3
 
@@ -1,179 +1,168 @@
1
- #.
2
- # intercept_carver.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 Interceptor
13
- class CarverRule
14
- def action_name
15
- action.to_s
16
- end
17
-
18
- def location_name
19
- location.to_s
20
- end
21
-
22
- def pattern_name
23
- Regexp.quote pattern
24
- end
25
-
26
- def filter_name
27
- # return "NA" if filter.nil?
28
- return filter.class.to_s
29
- end
30
-
31
- def set_filter(filter_chain)
32
- puts "* set filter_chain"
33
- puts filter_chain.class
34
- @settings[:filter] = filter_chain
35
- end
36
-
37
- def filters
38
- return [] unless filter.respond_to? :list
39
- filter.list
40
- end
41
-
42
- def content_name
43
- content
44
- end
45
-
46
-
47
- # rewrite options
48
- # item
49
- # location
50
- # pattern
51
- # content
52
- def rewrite(item, l, p, c)
53
- res = false
54
- case l
55
- when :replace_all
56
- if File.exist? c
57
- begin
58
- item.replace Watobo::Utils.string2response(File.open(c,"rb").read)
59
- rescue => bang
60
- puts bang
61
- puts bang.backtrace
62
- end
63
- else
64
- puts "Could not find file > #{c}"
65
- end
66
-
67
- when :body
68
- if item.respond_to? :body
69
- if p.upcase == :ALL
70
- res = item.replace_body(c)
71
- else
72
- puts "* rewrite body ..."
73
- res = item.rewrite_body(p,c)
74
- end
75
- end
76
- when :http_parm
77
- 1
78
- when :cookie
79
- 1
80
- when :url
81
- if item.respond_to? :url
82
- item.first.gsub!(/#{p}/, c)
83
- end
84
- when :header
85
- puts "REPLACE HEADER"
86
- item.each_with_index do |line, index|
87
- if line =~ /#{p}/
88
- item[index] = "#{c.strip}\r\n"
89
- end
90
- break if line.strip.empty?
91
- end
92
- res = item
93
- end
94
- res
95
- end
96
-
97
- def apply(item, flags)
98
- begin
99
- unless filter.nil?
100
- return false unless filter.match?(item, flags)
101
- end
102
- res = case action
103
- when :flag
104
- puts "set flag >> #{content} (#{content.class})"
105
- flags << :request
106
- true
107
- when :inject
108
- inject_content(item, location, pattern, content)
109
- when :rewrite
110
- puts "REWRITE"
111
- puts "Location: #{location}"
112
- puts "Pattern: #{pattern}"
113
- puts "Content: #{content}"
114
- rewrite(item, location, pattern, content)
115
- else
116
- true
117
- end
118
- return res
119
- rescue => bang
120
- puts bang
121
- puts bang.backtrace
122
- end
123
- end
124
-
125
- def initialize(parms)
126
- @settings = Hash.new
127
- [:action, :location, :pattern, :content, :filter].each do |k|
128
- @settings[k] = parms[k]
129
- end
130
-
131
- end
132
-
133
- private
134
-
135
- def method_missing(name, *args, &block)
136
- # puts "* instance method missing (#{name})"
137
- @settings.has_key? name.to_sym || super
138
- @settings[name.to_sym]
139
- end
140
- end
141
-
142
- class Carver
143
- @rules = []
144
-
145
- def self.rules
146
- @rules
147
- end
148
-
149
- def self.shape(response, flags)
150
- puts "Shape, Baby shape, ..."
151
-
152
- @rules.each do |r|
153
- res = r.apply( response, flags )
154
- puts "#{r.action_name} (#{r.action.class}) >> #{res.class}"
155
- end
156
- end
157
-
158
- def self.set_carving_rules(rules)
159
- @rules = rules
160
- end
161
-
162
- def self.add_rule(rule)
163
- @rules << rule if rule.respond_to? :apply
164
- end
165
-
166
- def self.clear_rules
167
- @rules.clear
168
- end
169
- end
170
-
171
- class RequestCarver < Carver
172
- @rules = []
173
- end
174
-
175
- class ResponseCarver < Carver
176
- @rules = []
177
- end
178
- end
2
+ module Watobo#:nodoc: all
3
+ module Interceptor
4
+ class CarverRule
5
+ def action_name
6
+ action.to_s
7
+ end
8
+
9
+ def location_name
10
+ location.to_s
11
+ end
12
+
13
+ def pattern_name
14
+ Regexp.quote pattern
15
+ end
16
+
17
+ def filter_name
18
+ # return "NA" if filter.nil?
19
+ return filter.class.to_s
20
+ end
21
+
22
+ def set_filter(filter_chain)
23
+ puts "* set filter_chain"
24
+ puts filter_chain.class
25
+ @settings[:filter] = filter_chain
26
+ end
27
+
28
+ def filters
29
+ return [] unless filter.respond_to? :list
30
+ filter.list
31
+ end
32
+
33
+ def content_name
34
+ content
35
+ end
36
+
37
+
38
+ # rewrite options
39
+ # item
40
+ # location
41
+ # pattern
42
+ # content
43
+ def rewrite(item, l, p, c)
44
+ res = false
45
+ case l
46
+ when :replace_all
47
+ if File.exist? c
48
+ begin
49
+ item.replace Watobo::Utils.string2response(File.open(c,"rb").read)
50
+ rescue => bang
51
+ puts bang
52
+ puts bang.backtrace
53
+ end
54
+ else
55
+ puts "Could not find file > #{c}"
56
+ end
57
+
58
+ when :body
59
+ if item.respond_to? :body
60
+ if p.upcase == :ALL
61
+ res = item.replace_body(c)
62
+ else
63
+ puts "* rewrite body ..."
64
+ res = item.rewrite_body(p,c)
65
+ end
66
+ end
67
+ when :http_parm
68
+ 1
69
+ when :cookie
70
+ 1
71
+ when :url
72
+ if item.respond_to? :url
73
+ item.first.gsub!(/#{p}/, c)
74
+ end
75
+ when :header
76
+ puts "REPLACE HEADER"
77
+ item.each_with_index do |line, index|
78
+ if line =~ /#{p}/
79
+ item[index] = "#{c.strip}\r\n"
80
+ end
81
+ break if line.strip.empty?
82
+ end
83
+ res = item
84
+ end
85
+ res
86
+ end
87
+
88
+ def apply(item, flags)
89
+ begin
90
+ unless filter.nil?
91
+ return false unless filter.match?(item, flags)
92
+ end
93
+ res = case action
94
+ when :flag
95
+ puts "set flag >> #{content} (#{content.class})"
96
+ flags << :request
97
+ true
98
+ when :inject
99
+ inject_content(item, location, pattern, content)
100
+ when :rewrite
101
+ puts "REWRITE"
102
+ puts "Location: #{location}"
103
+ puts "Pattern: #{pattern}"
104
+ # puts "Content: #{content}"
105
+ rewrite(item, location, pattern, content)
106
+ else
107
+ true
108
+ end
109
+ return res
110
+ rescue => bang
111
+ puts bang
112
+ puts bang.backtrace
113
+ end
114
+ end
115
+
116
+ def initialize(parms)
117
+ @settings = Hash.new
118
+ [:action, :location, :pattern, :content, :filter].each do |k|
119
+ @settings[k] = parms[k]
120
+ end
121
+
122
+ end
123
+
124
+ private
125
+
126
+ def method_missing(name, *args, &block)
127
+ # puts "* instance method missing (#{name})"
128
+ @settings.has_key? name.to_sym || super
129
+ @settings[name.to_sym]
130
+ end
131
+ end
132
+
133
+ class Carver
134
+ @rules = []
135
+
136
+ def self.rules
137
+ @rules
138
+ end
139
+
140
+ def self.shape(response, flags)
141
+ @rules.each do |r|
142
+ res = r.apply( response, flags )
143
+ puts "[rewrite] #{r.action_name} (#{r.action.class}) >> #{res.class}"
144
+ end
145
+ end
146
+
147
+ def self.set_carving_rules(rules)
148
+ @rules = rules
149
+ end
150
+
151
+ def self.add_rule(rule)
152
+ @rules << rule if rule.respond_to? :apply
153
+ end
154
+
155
+ def self.clear_rules
156
+ @rules.clear
157
+ end
158
+ end
159
+
160
+ class RequestCarver < Carver
161
+ @rules = []
162
+ end
163
+
164
+ class ResponseCarver < Carver
165
+ @rules = []
166
+ end
167
+ end
179
168
  end