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,108 +1,99 @@
1
- #.
2
- # interceptor.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
- INTERCEPT_NONE = 0x00
14
- INTERCEPT_REQUEST = 0x01
15
- INTERCEPT_RESPONSE = 0x02
16
- INTERCEPT_BOTH = 0x03
17
-
18
- REWRITE_NONE = 0x00
19
- REWRITE_REQUEST = 0x01
20
- REWRITE_RESPONSE = 0x02
21
- REWRITE_BOTH = 0x04
22
-
23
- INTERCEPT_DEFAULT_PORT = 8081
24
-
25
- MODE_REGULAR = 0x01
26
- MODE_TRANSPARENT = 0x02
27
-
28
- @proxy_mode ||= MODE_REGULAR
29
- @intercept_mode ||= INTERCEPT_NONE
30
- @rewrite_mode ||= REWRITE_NONE
31
-
32
- @proxy = nil
33
- #@proxy_mode = Watobo::Conf::Interceptor.proxy_mode if Watobo::Conf::Interceptor.respond_to? :proxy_mode
34
- def self.proxy_mode
35
- @proxy_mode
36
- end
37
-
38
- def self.proxy_mode=(mode)
39
- @proxy_mode = mode
40
- end
41
-
42
- def self.rewrite_mode
43
- @rewrite_mode
44
- end
45
-
46
- def self.rewrite_mode=(mode)
47
- @rewrite_mode = mode
48
- end
49
-
50
- def self.intercept_mode
51
- @intercept_mode
52
- end
53
-
54
- def self.intercept_mode=(mode)
55
- @intercept_mode = mode
56
- end
57
-
58
- def self.transparent?
59
- return true if ( @proxy_mode & MODE_TRANSPARENT ) > 0
60
- return false
61
- end
62
-
63
- def self.intercept_requests?
64
- return true if ( @intercept_mode & INTERCEPT_REQUEST ) > 0
65
- return false
66
- end
67
-
68
- def self.intercept_responses?
69
- return true if ( @intercept_mode & INTERCEPT_RESPONSE ) > 0
70
- return false
71
- end
72
-
73
- def self.rewrite_requests?
74
- return true if ( @rewrite_mode & REWRITE_REQUEST ) > 0
75
- return false
76
- end
77
-
78
- def self.rewrite_responses?
79
- return true if ( @rewrite_mode & REWRITE_RESPONSE ) > 0
80
- return false
81
- end
82
-
83
- def self.active?
84
- return false if @proxy.nil?
85
- return true
86
- end
87
-
88
- def self.start
89
- # @proxy = Watobo::InterceptProxy.new()
90
-
91
- @proxy = Watobo::Interceptor::Proxy.start()
92
- puts "DEBUG: Proxy running" if $DEBUG
93
- # puts "* set www_auth for interceptor"
94
- # puts YAML.dump(@project.settings[:www_auth])
95
- #@proxy.www_auth = Watobo.project.settings[:www_auth] unless Watobo.project.nil?
96
- end
97
-
98
- def self.proxy
99
- @proxy
100
- end
101
-
102
- def self.stop
103
- @proxy.stop
104
- @proxy = nil
105
- end
106
-
107
- end
108
- end
2
+ module Watobo#:nodoc: all
3
+ module Interceptor
4
+ INTERCEPT_NONE = 0x00
5
+ INTERCEPT_REQUEST = 0x01
6
+ INTERCEPT_RESPONSE = 0x02
7
+ INTERCEPT_BOTH = 0x03
8
+
9
+ REWRITE_NONE = 0x00
10
+ REWRITE_REQUEST = 0x01
11
+ REWRITE_RESPONSE = 0x02
12
+ REWRITE_BOTH = 0x04
13
+
14
+ INTERCEPT_DEFAULT_PORT = 8081
15
+
16
+ MODE_REGULAR = 0x01
17
+ MODE_TRANSPARENT = 0x02
18
+
19
+ @proxy_mode ||= MODE_REGULAR
20
+ @intercept_mode ||= INTERCEPT_NONE
21
+ @rewrite_mode ||= REWRITE_NONE
22
+
23
+ @proxy = nil
24
+ #@proxy_mode = Watobo::Conf::Interceptor.proxy_mode if Watobo::Conf::Interceptor.respond_to? :proxy_mode
25
+ def self.proxy_mode
26
+ @proxy_mode
27
+ end
28
+
29
+ def self.proxy_mode=(mode)
30
+ @proxy_mode = mode
31
+ end
32
+
33
+ def self.rewrite_mode
34
+ @rewrite_mode
35
+ end
36
+
37
+ def self.rewrite_mode=(mode)
38
+ @rewrite_mode = mode
39
+ end
40
+
41
+ def self.intercept_mode
42
+ @intercept_mode
43
+ end
44
+
45
+ def self.intercept_mode=(mode)
46
+ @intercept_mode = mode
47
+ end
48
+
49
+ def self.transparent?
50
+ return true if ( @proxy_mode & MODE_TRANSPARENT ) > 0
51
+ return false
52
+ end
53
+
54
+ def self.intercept_requests?
55
+ return true if ( @intercept_mode & INTERCEPT_REQUEST ) > 0
56
+ return false
57
+ end
58
+
59
+ def self.intercept_responses?
60
+ return true if ( @intercept_mode & INTERCEPT_RESPONSE ) > 0
61
+ return false
62
+ end
63
+
64
+ def self.rewrite_requests?
65
+ return true if ( @rewrite_mode & REWRITE_REQUEST ) > 0
66
+ return false
67
+ end
68
+
69
+ def self.rewrite_responses?
70
+ return true if ( @rewrite_mode & REWRITE_RESPONSE ) > 0
71
+ return false
72
+ end
73
+
74
+ def self.active?
75
+ return false if @proxy.nil?
76
+ return true
77
+ end
78
+
79
+ def self.start
80
+ # @proxy = Watobo::InterceptProxy.new()
81
+
82
+ @proxy = Watobo::Interceptor::Proxy.start()
83
+ puts "DEBUG: Proxy running" if $DEBUG
84
+ # puts "* set www_auth for interceptor"
85
+ # puts YAML.dump(@project.settings[:www_auth])
86
+ #@proxy.www_auth = Watobo.project.settings[:www_auth] unless Watobo.project.nil?
87
+ end
88
+
89
+ def self.proxy
90
+ @proxy
91
+ end
92
+
93
+ def self.stop
94
+ @proxy.stop
95
+ @proxy = nil
96
+ end
97
+
98
+ end
99
+ end
@@ -1,15 +1,6 @@
1
- #.
2
- # min_class.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 MinClass
13
-
14
- end
2
+ module Watobo#:nodoc: all
3
+ class MinClass
4
+
5
+ end
15
6
  end
@@ -1,180 +1,171 @@
1
- #.
2
- # netfilter_queue.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 NFQueue
13
- @ssl_requests = Hash.new
14
- @cert_list = Hash.new
15
-
16
- @netqueue_lock = Mutex.new
17
- @t_nfqueue = nil
18
-
19
- @nfq_present = false
20
-
21
- begin
22
- require "nfqueue"
23
- @nfq_present = true
24
- rescue LoadError
25
- puts "NFQUEUE not available on this system"
26
- end
27
-
28
- def self.get_ip_string(raw_addr)
29
- begin
30
- ip = ""
31
- raw_addr.length.times do |i|
32
- ip << "." unless ip.empty?
33
- ip << raw_addr[i].ord.to_s
34
- end
35
- rescue => bang
36
- puts bang
37
- puts bang.backtrace
38
- end
39
- ip
40
- end
41
-
42
- def self.stop
43
- @t_nfqueue.kill if @t_nfqueue.respond_to? :kill
44
- end
45
-
46
- def self.start
47
- # @t_nfqueue.raise unless @t_nfqueue.nil?
48
- puts @t_nfqueue.status if @t_nfqueue.respond_to? :status
49
-
50
- puts "starting netfilter_queue ..."
51
- @t_nfqueue = Thread.new{
52
- begin
53
- Netfilter::Queue.create(0) do |p|
54
- puts ">> Netfilter Packet #" + p.id.to_s
55
- # $stdout.flush
56
- puts p.data.class
57
- raw_src = p.data[12..15]
58
- raw_dst = p.data[16..19]
59
- src_port = p.data[20..21].unpack("H4")[0].hex
60
- dst_port = p.data[22..24].unpack("H4")[0].hex
61
- # if p.data.length > 47
62
- # flags = p.data[47].unpack("H*")[0].hex
63
- # puts flags.to_s
64
- # if flags == 2
65
- puts "ADD SSL REQUEST"
66
- puts "#{get_ip_string(raw_src)}:#{src_port} -> #{get_ip_string(raw_dst)}:#{dst_port}"
67
- @netqueue_lock.synchronize do
68
- if add_ssl_request(get_ip_string(raw_src), src_port, get_ip_string(raw_dst), dst_port)
69
- puts "OK"
70
- end
71
- end
72
- #end
73
- #end
74
- Netfilter::Packet::ACCEPT
75
- end
76
- rescue => bang
77
- puts bang
78
- puts bang.backtrace
79
- # retry
80
- rescue Netfilter::QueueError
81
- puts "NetfilterERROR"
82
- exit
83
- end
84
- }
85
-
86
- @t_nfqueue
87
- end
88
-
89
- def self.add_ssl_request(c_host, c_port, s_host, s_port)
90
- ck = "#{c_host}:#{c_port}"
91
- sk = "#{s_host}:#{s_port}"
92
-
93
- begin
94
-
95
- unless @cert_list.has_key? sk
96
- if cert = acquire_cert(s_host,s_port)
97
- @ssl_requests[ck] = sk
98
- @cert_list[sk] = cert
99
- else
100
- return false
101
- end
102
- else
103
- @ssl_requests[ck] = sk
104
- end
105
-
106
- return true
107
- rescue => bang
108
- puts bang
109
- puts bang.backtrace
110
- end
111
- return false
112
-
113
- end
114
-
115
- def self.get_connection_info(c_host,c_port)
116
- begin
117
- ck = "#{c_host}:#{c_port}"
118
- target_site = nil
119
- cert = nil
120
- @netqueue_lock.synchronize do
121
- if @ssl_requests.has_key? ck
122
- target_site = @ssl_requests[ck]
123
- cert = @cert_list[target_site] if @cert_list.has_key? target_site
124
- end
125
- end
126
- return target_site, cert
127
- rescue => bang
128
- puts bang
129
- puts bang.backtrace
130
- end
131
- return nil, nil
132
- end
133
-
134
- def self.acquire_cert(host, port)
135
- puts "* acquire cert ... #{host}:#{port}"
136
- begin
137
- tcp_socket = TCPSocket.new( host, port )
138
- tcp_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
139
- tcp_socket.sync = true
140
- ctx = OpenSSL::SSL::SSLContext.new()
141
-
142
- ctx.tmp_dh_callback = proc { |*args|
143
- OpenSSL::PKey::DH.new(128)
144
- }
145
-
146
- socket = OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx)
147
-
148
- socket.connect
149
- #socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
150
- sk = "#{host}:#{port}"
151
- cert = socket.peer_cert
152
- @cert_list[sk] = cert
153
- puts "PEER CERT SUBJECT: #{cert.subject}"
154
- # puts cert.subject.methods.sort
155
- return cert
156
-
157
- rescue => bang
158
- puts bang
159
- puts bang.backtrace
160
- end
161
- return nil
162
- end
163
-
164
- end
165
- end
166
-
167
- if $0 == __FILE__
168
- inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..","..","..", "lib")) # this is the same as rubygems would do
169
- $: << inc_path
170
-
171
- require 'watobo'
172
- require 'nfqueue'
173
-
174
- Watobo::Interceptor.proxy_mode = Watobo::Interceptor::MODE_TRANSPARENT
175
- @iproxy = Watobo::InterceptProxy.new()
176
- @iproxy.run
177
- while 1
178
- sleep 1
179
- end
180
- end
2
+ module Watobo#:nodoc: all
3
+ module NFQueue
4
+ @ssl_requests = Hash.new
5
+ @cert_list = Hash.new
6
+
7
+ @netqueue_lock = Mutex.new
8
+ @t_nfqueue = nil
9
+
10
+ @nfq_present = false
11
+
12
+ begin
13
+ require "nfqueue"
14
+ @nfq_present = true
15
+ rescue LoadError
16
+ puts "NFQUEUE not available on this system"
17
+ end
18
+
19
+ def self.get_ip_string(raw_addr)
20
+ begin
21
+ ip = ""
22
+ raw_addr.length.times do |i|
23
+ ip << "." unless ip.empty?
24
+ ip << raw_addr[i].ord.to_s
25
+ end
26
+ rescue => bang
27
+ puts bang
28
+ puts bang.backtrace
29
+ end
30
+ ip
31
+ end
32
+
33
+ def self.stop
34
+ @t_nfqueue.kill if @t_nfqueue.respond_to? :kill
35
+ end
36
+
37
+ def self.start
38
+ # @t_nfqueue.raise unless @t_nfqueue.nil?
39
+ puts @t_nfqueue.status if @t_nfqueue.respond_to? :status
40
+
41
+ puts "starting netfilter_queue ..."
42
+ @t_nfqueue = Thread.new{
43
+ begin
44
+ Netfilter::Queue.create(0) do |p|
45
+ puts ">> Netfilter Packet #" + p.id.to_s
46
+ # $stdout.flush
47
+ puts p.data.class
48
+ raw_src = p.data[12..15]
49
+ raw_dst = p.data[16..19]
50
+ src_port = p.data[20..21].unpack("H4")[0].hex
51
+ dst_port = p.data[22..24].unpack("H4")[0].hex
52
+ # if p.data.length > 47
53
+ # flags = p.data[47].unpack("H*")[0].hex
54
+ # puts flags.to_s
55
+ # if flags == 2
56
+ puts "ADD SSL REQUEST"
57
+ puts "#{get_ip_string(raw_src)}:#{src_port} -> #{get_ip_string(raw_dst)}:#{dst_port}"
58
+ @netqueue_lock.synchronize do
59
+ if add_ssl_request(get_ip_string(raw_src), src_port, get_ip_string(raw_dst), dst_port)
60
+ puts "OK"
61
+ end
62
+ end
63
+ #end
64
+ #end
65
+ Netfilter::Packet::ACCEPT
66
+ end
67
+ rescue => bang
68
+ puts bang
69
+ puts bang.backtrace
70
+ # retry
71
+ rescue Netfilter::QueueError
72
+ puts "NetfilterERROR"
73
+ exit
74
+ end
75
+ }
76
+
77
+ @t_nfqueue
78
+ end
79
+
80
+ def self.add_ssl_request(c_host, c_port, s_host, s_port)
81
+ ck = "#{c_host}:#{c_port}"
82
+ sk = "#{s_host}:#{s_port}"
83
+
84
+ begin
85
+
86
+ unless @cert_list.has_key? sk
87
+ if cert = acquire_cert(s_host,s_port)
88
+ @ssl_requests[ck] = sk
89
+ @cert_list[sk] = cert
90
+ else
91
+ return false
92
+ end
93
+ else
94
+ @ssl_requests[ck] = sk
95
+ end
96
+
97
+ return true
98
+ rescue => bang
99
+ puts bang
100
+ puts bang.backtrace
101
+ end
102
+ return false
103
+
104
+ end
105
+
106
+ def self.get_connection_info(c_host,c_port)
107
+ begin
108
+ ck = "#{c_host}:#{c_port}"
109
+ target_site = nil
110
+ cert = nil
111
+ @netqueue_lock.synchronize do
112
+ if @ssl_requests.has_key? ck
113
+ target_site = @ssl_requests[ck]
114
+ cert = @cert_list[target_site] if @cert_list.has_key? target_site
115
+ end
116
+ end
117
+ return target_site, cert
118
+ rescue => bang
119
+ puts bang
120
+ puts bang.backtrace
121
+ end
122
+ return nil, nil
123
+ end
124
+
125
+ def self.acquire_cert(host, port)
126
+ puts "* acquire cert ... #{host}:#{port}"
127
+ begin
128
+ tcp_socket = TCPSocket.new( host, port )
129
+ tcp_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
130
+ tcp_socket.sync = true
131
+ ctx = OpenSSL::SSL::SSLContext.new()
132
+
133
+ ctx.tmp_dh_callback = proc { |*args|
134
+ OpenSSL::PKey::DH.new(128)
135
+ }
136
+
137
+ socket = OpenSSL::SSL::SSLSocket.new(tcp_socket, ctx)
138
+
139
+ socket.connect
140
+ #socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
141
+ sk = "#{host}:#{port}"
142
+ cert = socket.peer_cert
143
+ @cert_list[sk] = cert
144
+ puts "PEER CERT SUBJECT: #{cert.subject}"
145
+ # puts cert.subject.methods.sort
146
+ return cert
147
+
148
+ rescue => bang
149
+ puts bang
150
+ puts bang.backtrace
151
+ end
152
+ return nil
153
+ end
154
+
155
+ end
156
+ end
157
+
158
+ if $0 == __FILE__
159
+ inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..","..","..", "lib")) # this is the same as rubygems would do
160
+ $: << inc_path
161
+
162
+ require 'watobo'
163
+ require 'nfqueue'
164
+
165
+ Watobo::Interceptor.proxy_mode = Watobo::Interceptor::MODE_TRANSPARENT
166
+ @iproxy = Watobo::InterceptProxy.new()
167
+ @iproxy.run
168
+ while 1
169
+ sleep 1
170
+ end
171
+ end