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,88 +1,79 @@
1
- #.
2
- # ott_cache.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
- class OTTCache
13
- @otts = {}
14
- @otts_lock = Mutex.new
15
-
16
- attr :tokens
17
-
18
- def initialize()
19
- @tokens = {}
20
- @tokens_lock = Mutex.new
21
- end
22
-
23
- def self.acquire(request)
24
- urh = request.uniq_hash
25
- unless @otts.has_key? urh
26
- @otts[urh] = OTTCache.new()
27
- end
28
- @otts[urh]
29
- end
30
-
31
-
32
- def self.patterns(&block)
33
-
34
- Watobo::Conf::OttCache.patterns.each do |p|
35
- yield p if block_given?
36
- end
37
- YAML.load(YAML.dump(Watobo::Conf::OttCache.patterns))
38
-
39
- end
40
-
41
-
42
- def update_tokens(response)
43
-
44
- begin
45
- # site = request.site
46
- @tokens_lock.synchronize do
47
- response.each do |line|
48
- # puts line
49
- self.class.patterns do |pat|
50
- puts pat if $DEBUG
51
- if line =~ /#{pat}/i then
52
- token_key = Regexp.quote($1.upcase)
53
- token_value = $2
54
- #print "U"
55
- puts "GOT NEW TOKEN (#{token_key}): #{token_value}" if $DEBUG
56
- # @session[:valid_csrf_tokens][site] = Hash.new if @session[:valid_csrf_tokens][site].nil?
57
- # @session[:valid_csrf_tokens][site][token_key] = token_value
58
- @tokens[token_key] = token_value
59
- end
60
- end
61
-
62
- end
63
- end
64
- rescue => bang
65
- puts bang
66
- if $DEBUG
67
- puts bang.backtrace
68
- puts "= Request"
69
- puts request
70
- puts "= Response"
71
- puts response
72
- puts "==="
73
- end
74
-
75
- end
76
- # }
77
- end
78
-
79
- # target could be a Watobo::Chat or a Watobo::Request object
80
- def self.set_chat_ids(target, ott_chat_ids)
81
- r = target
82
- r = target.request if target.respond_to? :request
83
- @otts_lock.synchronize do
84
- Watobo::Conf::OttCache.request_ids[r.uniq_hash] = ott_chat_ids
85
- end
2
+ module Watobo#:nodoc: all
3
+ class OTTCache
4
+ @otts = {}
5
+ @otts_lock = Mutex.new
6
+
7
+ attr :tokens
8
+
9
+ def initialize()
10
+ @tokens = {}
11
+ @tokens_lock = Mutex.new
12
+ end
13
+
14
+ def self.acquire(request)
15
+ urh = request.uniq_hash
16
+ unless @otts.has_key? urh
17
+ @otts[urh] = OTTCache.new()
18
+ end
19
+ @otts[urh]
20
+ end
21
+
22
+
23
+ def self.patterns(&block)
24
+
25
+ Watobo::Conf::OttCache.patterns.each do |p|
26
+ yield p if block_given?
27
+ end
28
+ YAML.load(YAML.dump(Watobo::Conf::OttCache.patterns))
29
+
30
+ end
31
+
32
+
33
+ def update_tokens(response)
34
+
35
+ begin
36
+ # site = request.site
37
+ @tokens_lock.synchronize do
38
+ response.each do |line|
39
+ # puts line
40
+ self.class.patterns do |pat|
41
+ puts pat if $DEBUG
42
+ if line =~ /#{pat}/i then
43
+ token_key = Regexp.quote($1.upcase)
44
+ token_value = $2
45
+ #print "U"
46
+ puts "GOT NEW TOKEN (#{token_key}): #{token_value}" if $DEBUG
47
+ # @session[:valid_csrf_tokens][site] = Hash.new if @session[:valid_csrf_tokens][site].nil?
48
+ # @session[:valid_csrf_tokens][site][token_key] = token_value
49
+ @tokens[token_key] = token_value
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ rescue => bang
56
+ puts bang
57
+ if $DEBUG
58
+ puts bang.backtrace
59
+ puts "= Request"
60
+ puts request
61
+ puts "= Response"
62
+ puts response
63
+ puts "==="
64
+ end
65
+
66
+ end
67
+ # }
68
+ end
69
+
70
+ # target could be a Watobo::Chat or a Watobo::Request object
71
+ def self.set_chat_ids(target, ott_chat_ids)
72
+ r = target
73
+ r = target.request if target.respond_to? :request
74
+ @otts_lock.synchronize do
75
+ Watobo::Conf::OttCache.request_ids[r.uniq_hash] = ott_chat_ids
76
+ end
86
77
  end
87
78
 
88
79
  def self.requests(target, &block)
@@ -93,68 +84,68 @@ module Watobo#:nodoc: all
93
84
  ott_requests << ott_request
94
85
  end
95
86
  ott_requests
96
- end
97
-
98
- # returns an array of Watobo::Requests which are necessary
99
- # to update the token
100
- def self.chats(target, &block)
87
+ end
88
+
89
+ # returns an array of Watobo::Requests which are necessary
90
+ # to update the token
91
+ def self.chats(target, &block)
101
92
  ott_chats = []
102
- return ott_chats if target.nil?
93
+ return ott_chats if target.nil?
103
94
  request = target.respond_to?(:request) ? target.request : target
104
95
  urh = request.uniq_hash
105
-
106
- @otts_lock.synchronize do
107
- return ott_chats unless Watobo::Conf::OttCache.request_ids.has_key? urh
108
- Watobo::Conf::OttCache.request_ids[urh].each do |id|
109
- #puts "* [OTT] get chat for id #{id}"
96
+
97
+ @otts_lock.synchronize do
98
+ return ott_chats unless Watobo::Conf::OttCache.request_ids.has_key? urh
99
+ Watobo::Conf::OttCache.request_ids[urh].each do |id|
100
+ #puts "* [OTT] get chat for id #{id}"
110
101
  chat = Watobo::Chats.get_by_id(id)
111
102
  unless chat.nil?
112
- #ottr = chat.copyRequest
103
+ #ottr = chat.copyRequest
113
104
  ott_chats << chat
114
105
  yield chat if block_given?
115
- end
116
- end
117
- end
118
- ott_chats
119
- end
120
-
121
-
122
- # update tokens for a specific request
123
- def update_request(request)
124
- #urh = target_request.uniq_hash
125
- #return false unless @tokens.has_key? urh
126
- @tokens_lock.synchronize do
127
- request.map!{ |line|
128
- res = line
129
- self.class.patterns do |pat|
130
- begin
131
- if line =~ /#{pat}/i then
132
- key = Regexp.quote($1.upcase)
133
- old_value = $2
134
- if @tokens.has_key?(key) then
135
- res = line.gsub!(/#{Regexp.quote(old_value)}/, @tokens[key])
136
- if res.nil? then
137
- res = line
138
- puts "!!!could not update token (#{key})"
139
- end
140
- else
141
- if $DEBUG
142
- puts "[OTT] nothing to update?"
143
- puts @tokens.to_yaml
144
- puts request
145
- end
146
- end
147
- end
148
- rescue => bang
149
- puts bang
150
- puts bang.backtrace if $DEBUG
151
- # puts @session.to_yaml
152
- end
153
- end
154
- res
155
- }
156
- end
157
- # end
158
- end
159
- end
106
+ end
107
+ end
108
+ end
109
+ ott_chats
110
+ end
111
+
112
+
113
+ # update tokens for a specific request
114
+ def update_request(request)
115
+ #urh = target_request.uniq_hash
116
+ #return false unless @tokens.has_key? urh
117
+ @tokens_lock.synchronize do
118
+ request.map!{ |line|
119
+ res = line
120
+ self.class.patterns do |pat|
121
+ begin
122
+ if line =~ /#{pat}/i then
123
+ key = Regexp.quote($1.upcase)
124
+ old_value = $2
125
+ if @tokens.has_key?(key) then
126
+ res = line.gsub!(/#{Regexp.quote(old_value)}/, @tokens[key])
127
+ if res.nil? then
128
+ res = line
129
+ puts "!!!could not update token (#{key})"
130
+ end
131
+ else
132
+ if $DEBUG
133
+ puts "[OTT] nothing to update?"
134
+ puts @tokens.to_yaml
135
+ puts request
136
+ end
137
+ end
138
+ end
139
+ rescue => bang
140
+ puts bang
141
+ puts bang.backtrace if $DEBUG
142
+ # puts @session.to_yaml
143
+ end
144
+ end
145
+ res
146
+ }
147
+ end
148
+ # end
149
+ end
150
+ end
160
151
  end
@@ -1,56 +1,47 @@
1
- #.
2
- # parameter.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
- =begin
13
-
14
- possible locations
15
- - url
16
- - header
17
- - cookie
18
- - data (body)
19
-
20
- =end
21
- class Parameter
22
- attr :location
23
- attr :name
24
- attr_accessor :value
25
-
26
- def initialize(prefs)
27
- @location = nil
28
- @name = prefs[:name]
2
+ module Watobo#:nodoc: all
3
+ =begin
4
+
5
+ possible locations
6
+ - url
7
+ - header
8
+ - cookie
9
+ - data (body)
10
+
11
+ =end
12
+ class Parameter
13
+ attr :location
14
+ attr :name
15
+ attr_accessor :value
16
+
17
+ def initialize(prefs)
18
+ @location = nil
19
+ @name = prefs[:name]
29
20
  @value = prefs[:value]
30
- @prefs = prefs
31
- end
32
- end
33
-
34
- class WWWFormParameter < Parameter
35
- def initialize(prefs)
36
- super prefs
37
- @location = :data
38
- end
39
- end
40
-
41
-
42
- class UrlParameter < Parameter
43
- def initialize(prefs)
44
- super prefs
45
- @location = :url
46
- end
47
- end
48
-
49
- class CookieParameter < Parameter
50
- def initialize(prefs)
51
- super prefs
52
- @location = :cookie
53
- end
21
+ @prefs = prefs
22
+ end
23
+ end
24
+
25
+ class WWWFormParameter < Parameter
26
+ def initialize(prefs)
27
+ super prefs
28
+ @location = :data
29
+ end
30
+ end
31
+
32
+
33
+ class UrlParameter < Parameter
34
+ def initialize(prefs)
35
+ super prefs
36
+ @location = :url
37
+ end
38
+ end
39
+
40
+ class CookieParameter < Parameter
41
+ def initialize(prefs)
42
+ super prefs
43
+ @location = :cookie
44
+ end
54
45
  end
55
46
 
56
47
  class JSONParameter < Parameter
@@ -69,5 +60,5 @@ module Watobo#:nodoc: all
69
60
  @parent = prefs.has_key?(:parent) ? prefs[:parent] : ""
70
61
  @namespace = prefs.has_key?(:namespace) ? prefs[:namespace] : nil
71
62
  end
72
- end
63
+ end
73
64
  end
@@ -1,122 +1,123 @@
1
- #.
2
- # passive_check.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
- class PassiveCheck
13
- include Watobo::Constants
14
- extend Watobo::Subscriber
15
-
16
- @@lock = Mutex.new
17
- attr :info
18
-
19
-
20
- def addFinding(details)
21
- t = Time.now
22
-
23
- now = t.strftime("%m/%d/%Y@%H:%M:%S")
24
- @@lock.synchronize{
25
-
26
- new_details = Hash.new
27
- new_details.update(@finding)
28
- new_details.update(details)
29
-
30
- new_details[:tstamp] = now
31
-
32
- unless new_details.has_key?(:fid)
2
+ module Watobo #:nodoc: all
3
+ class PassiveCheck
4
+ include Watobo::Constants
5
+ extend Watobo::Subscriber
6
+
7
+ @@lock = Mutex.new
8
+ attr :info
9
+
10
+
11
+ def addFinding(details)
12
+ t = Time.now
13
+
14
+ now = t.strftime("%m/%d/%Y@%H:%M:%S")
15
+ @@lock.synchronize {
16
+
17
+ new_details = Hash.new
18
+ new_details.update(@finding)
19
+ new_details.update(details)
20
+
21
+ new_details[:tstamp] = now
22
+
23
+ unless new_details.has_key?(:fid)
33
24
 
34
25
  id_string = ''
35
26
 
36
27
  id_string << new_details[:chat].request.url.to_s if new_details[:chat]
37
28
  id_string << new_details[:class] if new_details[:class]
38
- id_string << new_details[:title] if new_details[:title]
39
- id_string << new_details[:unique] if new_details[:unique]
29
+ id_string << new_details[:title] if new_details[:title]
30
+ id_string << new_details[:unique] if new_details[:unique]
40
31
 
41
32
  if id_string.empty? then
42
33
  id_string = rand(10000)
43
34
  end
44
35
  #puts "Finding #{id_string}"
45
36
  new_details[:fid] = Digest::MD5.hexdigest(id_string)
46
- end
37
+ end
47
38
 
48
- new_details[:module] = self.class.to_s
39
+ new_details[:module] = self.class.to_s
49
40
 
50
- if details[:debug] == true then
51
- puts "---"
52
- puts new_details[:class]
53
- puts new_details[:title]
54
- puts "---"
55
- end
56
- request = new_details[:chat].request
57
- response = new_details[:chat].response
58
- new_details[:chat_id] = new_details[:chat].id
59
- new_details.delete(:chat)
60
-
61
- new_finding = Watobo::Finding.new(request, response, new_details)
62
-
63
- Watobo::Findings.add new_finding
64
-
65
- #@project.addFinding(new_finding)
66
- # notify(:new_finding, new_finding)
67
- }
68
- end
69
-
70
- def enabled?
71
- @enabled
72
- end
73
-
74
- def enabled=(status)
75
- @enabled = status
76
- end
77
-
78
- def enable
79
- @enabled = true
80
- end
81
-
82
- def disable
83
- @enable = false
84
- end
85
-
86
- def do_test(chat)
87
- raise "function do_test not defined"
88
- end
89
- def initialize(project)
90
- @project = project
91
- @enabled = true
41
+ if details[:debug] == true then
42
+ puts "---"
43
+ puts new_details[:class]
44
+ puts new_details[:title]
45
+ puts "---"
46
+ end
47
+ request = new_details[:chat].request
48
+ response = new_details[:chat].response
49
+ new_details[:chat_id] = new_details[:chat].id
50
+
51
+ # shorten pattern here because of crash in FXRex:match with large patterns
52
+ unless new_details[:proof_pattern].nil?
53
+ new_details[:proof_pattern] = new_details[:proof_pattern].length > 128 ? new_details[:proof_pattern][0..127] : new_details[:proof_pattern]
54
+ end
55
+ unless new_details[:check_pattern].nil?
56
+ new_details[:check_pattern] = new_details[:check_pattern].length > 128 ? new_details[:check_pattern][0..127] : new_details[:check_pattern]
57
+ end
58
+
59
+ new_details.delete(:chat)
60
+
61
+ new_finding = Watobo::Finding.new(request, response, new_details)
62
+
63
+ Watobo::Findings.add new_finding
64
+
65
+ #@project.addFinding(new_finding)
66
+ # notify(:new_finding, new_finding)
67
+ }
68
+ end
69
+
70
+ def enabled?
71
+ @enabled
72
+ end
73
+
74
+ def enabled=(status)
75
+ @enabled = status
76
+ end
77
+
78
+ def enable
79
+ @enabled = true
80
+ end
81
+
82
+ def disable
83
+ @enable = false
84
+ end
85
+
86
+ def do_test(chat)
87
+ raise "function do_test not defined"
88
+ end
89
+
90
+ def initialize(project)
91
+ @project = project
92
+ @enabled = true
92
93
 
93
94
  #@event_dispatcher_listeners = Hash.new
94
95
 
95
- @info = {
96
- :check_name => '', # name of check which briefly describes functionality, will be used for tree and progress views
97
- :check_group => '', # groupname of check, will be used to group checks, e.g. :Generic, SAP, :Enumeration
98
- :description => '', # description of checkfunction
96
+ @info = {
97
+ :check_name => '', # name of check which briefly describes functionality, will be used for tree and progress views
98
+ :check_group => '', # groupname of check, will be used to group checks, e.g. :Generic, SAP, :Enumeration
99
+ :description => '', # description of checkfunction
99
100
  :author => "not modified", # author of check
100
- :version => "unversioned", # check version
101
- :target => nil # reserved
102
- }
103
-
104
- @finding = {
105
- :title => 'untitled', # [String] title name, used for finding tree
106
- :check_pattern => nil, # [String] regex of vulnerability check if possible, will be used for highlighting
107
- :proof_pattern => nil, # [String] regex of finding proof if possible, will be used for highlighting
108
- :threat => '', # thread of vulnerability, e.g. loss of information
109
- :measure => '', # measure
110
- :class => "undefined",# [String] vulnerability class, e.g. Stored XSS, SQL-Injection, ...
111
- :subclass => nil, # reserved
112
- :type => FINDING_TYPE_UNDEFINED, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
113
- :chat => nil, # related chat must be linked
114
- :rating=> VULN_RATING_UNDEFINED, #
115
- :cvss => "n/a", # CVSS Base Vector
116
- :icon => nil, # Icon Type
117
- :timestamp => nil # timestamp
118
- }
119
-
120
- end
101
+ :version => "unversioned", # check version
102
+ :target => nil # reserved
103
+ }
104
+
105
+ @finding = {
106
+ :title => 'untitled', # [String] title name, used for finding tree
107
+ :check_pattern => nil, # [String] regex of vulnerability check if possible, will be used for highlighting
108
+ :proof_pattern => nil, # [String] regex of finding proof if possible, will be used for highlighting
109
+ :threat => '', # threat of vulnerability, e.g. loss of information
110
+ :measure => '', # measure
111
+ :class => "undefined", # [String] vulnerability class, e.g. Stored XSS, SQL-Injection, ...
112
+ :subclass => nil, # reserved
113
+ :type => FINDING_TYPE_UNDEFINED, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
114
+ :chat => nil, # related chat must be linked
115
+ :rating => VULN_RATING_UNDEFINED, #
116
+ :cvss => "n/a", # CVSS Base Vector
117
+ :icon => nil, # Icon Type
118
+ :timestamp => nil # timestamp
119
+ }
120
+
121
121
  end
122
+ end
122
123
  end