watobo 0.9.21 → 0.9.23

Sign up to get free protection for your applications and to get access to all the features.
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,14 +1,5 @@
1
- #.
2
- # client_socket.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 HTTPSocket
13
4
  class ClientSocket
14
5
  attr_accessor :port
@@ -16,6 +7,7 @@ module Watobo#:nodoc: all
16
7
  attr_accessor :host
17
8
  attr_accessor :site
18
9
  attr_accessor :ssl
10
+
19
11
  def write(data)
20
12
  @socket.write data
21
13
  @socket.flush
@@ -27,16 +19,16 @@ module Watobo#:nodoc: all
27
19
 
28
20
  def close
29
21
  begin
30
- #if socket.class.to_s =~ /SSLSocket/
22
+ #if socket.class.to_s =~ /SSLSocket/
31
23
  if @socket.respond_to? :shutdown
32
24
  @socket.shutdown(Socket::SHUT_RDWR)
33
25
  end
34
26
  # finally close it
35
27
  if @socket.respond_to? :close
36
- @socket.close
28
+ @socket.close
37
29
  elsif @socket.respond_to? :sysclose
38
30
  socket.io.shutdown(Socket::SHUT_RDWR)
39
- @socket.sysclose
31
+ @socket.sysclose
40
32
  end
41
33
  return true
42
34
  rescue => bang
@@ -69,15 +61,15 @@ module Watobo#:nodoc: all
69
61
  begin
70
62
  unless @initial_request.nil?
71
63
  request = @initial_request.copy
72
-
73
- #puts "\n>> Request RAW:"
74
- #puts request
75
- #puts "\n>> Request RAW (HEX):"
76
- #puts request.join.unpack("H*")[0]
77
-
64
+
65
+ #puts "\n>> Request RAW:"
66
+ #puts request
67
+ #puts "\n>> Request RAW (HEX):"
68
+ #puts request.join.unpack("H*")[0]
69
+
78
70
  @initial_request = nil
79
71
  clean_request request
80
- return request
72
+ return request
81
73
  end
82
74
 
83
75
  request = read_header
@@ -87,24 +79,24 @@ module Watobo#:nodoc: all
87
79
  @persistent = !request.connection_close?
88
80
 
89
81
  clen = request.content_length
90
- if clen > 0 then
82
+ if clen > 0 then
91
83
  body = ""
92
84
  Watobo::HTTPSocket.read_body(@socket) do |data|
93
85
  body << data
94
86
  break if body.length == clen
95
87
  end
96
-
97
- puts "* CLEN = #{clen} - read body (#{body.length})"
98
- request << body
88
+
89
+ puts "* CLEN = #{clen} - read body (#{body.length})"
90
+ request << body
99
91
  end
100
92
  rescue => bang
101
93
  puts bang
102
94
  end
103
-
95
+
104
96
  puts "\n>> Request RAW:"
105
97
  puts request
106
98
  puts "\n>> Request RAW (HEX):"
107
- puts request.unpack("H*")[0]
99
+ # puts request.unpack("H*")[0]
108
100
 
109
101
  clean_request request
110
102
 
@@ -125,7 +117,7 @@ module Watobo#:nodoc: all
125
117
  @initial_request = req
126
118
  @persistent = false
127
119
 
128
- # TODO: Fake Certs Should be global accessable
120
+ # TODO: Fake Certs Should be global accessable
129
121
 
130
122
  end
131
123
 
@@ -137,6 +129,8 @@ module Watobo#:nodoc: all
137
129
  ra = socket.remote_address
138
130
  cport = ra.ip_port
139
131
  caddr = ra.ip_address
132
+ #puts cport
133
+ #puts caddr
140
134
 
141
135
  optval = [1, 500_000].pack("I_2")
142
136
  # socket.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, optval
@@ -149,8 +143,9 @@ module Watobo#:nodoc: all
149
143
 
150
144
  if Watobo::Interceptor::Proxy.transparent?
151
145
 
152
- ci = Watobo::Interceptor::Transparent.info({ 'host' => caddr, 'port' => cport } )
153
- unless ci['target'].empty? or ci['cn'].empty?
146
+
147
+ ci = Watobo::Interceptor::Transparent.info({'host' => caddr, 'port' => cport})
148
+ unless ci.nil? or ci['target'].empty? or ci['cn'].empty?
154
149
  puts "SSL-REQUEST FROM #{caddr}:#{cport}"
155
150
 
156
151
  ctx = Watobo::CertStore.acquire_ssl_ctx ci['target'], ci['cn']
@@ -171,9 +166,6 @@ module Watobo#:nodoc: all
171
166
  puts bang.backtrace
172
167
  return nil, session
173
168
  end
174
- else
175
- puts ci['host']
176
- puts ci['cn']
177
169
  end
178
170
  end
179
171
 
@@ -187,13 +179,15 @@ module Watobo#:nodoc: all
187
179
  return nil
188
180
  end
189
181
 
182
+ return nil if request.empty?
183
+
190
184
  if Watobo::Interceptor::Proxy.transparent?
191
185
  #puts "> get hostname ..."
192
186
  thn = nil
193
187
  request.each do |l|
194
188
  if l =~ /^Host: (.*)/
195
- thn = $1.strip
196
- # puts ">> #{thn}"
189
+ thn = $1.strip
190
+ # puts ">> #{thn}"
197
191
  end
198
192
  end
199
193
  # puts session.class
@@ -201,45 +195,44 @@ module Watobo#:nodoc: all
201
195
  # puts request.first
202
196
  # puts ">>"
203
197
  if session.is_a? OpenSSL::SSL::SSLSocket
204
- request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i,"\\1 https://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
198
+ request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i, "\\1 https://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
205
199
  else
206
- request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i,"\\1 http://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
200
+ request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i, "\\1 http://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
207
201
  end
208
- #puts request.first
202
+ #puts request.first
209
203
  end
210
204
 
211
205
  if request.first =~ /^CONNECT (.*):(\d{1,5}) HTTP\/1\./ then
212
206
  target = $1
213
207
  tport = $2
214
208
  # puts request.first
215
- #print "\n* CONNECT: #{method} #{target} on port #{tport}\n"
209
+ # print "\n* CONNECT: #{target} on port #{tport}\n"
216
210
  site = "#{target}:#{tport}"
217
211
  #puts "CONNECT #{site}"
218
212
 
219
213
  socket.print "HTTP/1.0 200 Connection established\r\n" +
220
- #"Proxy-connection: Keep-alive\r\n" +
221
- "Proxy-agent: WATOBO-Proxy/1.1\r\n" +
222
- "\r\n"
214
+ #"Proxy-connection: Keep-alive\r\n" +
215
+ "Proxy-agent: WATOBO-Proxy/1.1\r\n" +
216
+ "\r\n"
223
217
  bscount = 0 # bad handshake counter
224
218
  # puts "* wait for ssl handshake ..."
225
219
  begin
226
- # site = "#{target}:#{tport}"
227
220
  unless @fake_certs.has_key? site
228
221
  puts "CREATE NEW CERTIFICATE FOR >> #{site} <<"
229
222
  cn = Watobo::HTTPSocket.get_ssl_cert_cn(target, tport)
230
223
  puts "CN=#{cn}"
231
224
 
232
225
  cert = {
233
- :hostname => cn,
234
- :type => 'server',
235
- :user => 'watobo',
236
- :email => 'root@localhost',
226
+ :hostname => cn,
227
+ :type => 'server',
228
+ :user => 'watobo',
229
+ :email => 'root@localhost',
237
230
  }
238
231
 
239
232
  cert_file, key_file = Watobo::CA.create_cert cert
240
233
  @fake_certs[site] = {
241
- :cert => OpenSSL::X509::Certificate.new(File.read(cert_file)),
242
- :key => OpenSSL::PKey::RSA.new(File.read(key_file))
234
+ :cert => OpenSSL::X509::Certificate.new(File.read(cert_file)),
235
+ :key => OpenSSL::PKey::RSA.new(File.read(key_file))
243
236
  }
244
237
  end
245
238
  ctx = OpenSSL::SSL::SSLContext.new()
@@ -257,7 +250,7 @@ module Watobo#:nodoc: all
257
250
  ctx.timeout = 10
258
251
 
259
252
  ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx)
260
- ssl_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
253
+ ssl_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
261
254
  # ssl_socket.sync_close = true
262
255
  ssl_socket.sync = true
263
256
  # puts ssl_socket.methods.sort
@@ -287,12 +280,12 @@ module Watobo#:nodoc: all
287
280
  end
288
281
 
289
282
  else
290
- # puts "* create request object"
283
+ # puts "* create request object"
291
284
  request = Watobo::Request.new(request)
292
- site = request.site
293
- #puts request
285
+ site = request.site
286
+ #puts request
294
287
  end
295
-
288
+
296
289
  #puts "CLIENT REQUEST:"
297
290
  #puts request
298
291
 
@@ -300,14 +293,14 @@ module Watobo#:nodoc: all
300
293
 
301
294
  unless request.nil?
302
295
  clen = request.content_length
303
- if clen > 0 then
296
+ if clen > 0 then
304
297
  body = ""
305
298
  Watobo::HTTPSocket.read_body(session) do |data|
306
299
  body << data
307
300
  break if body.length == clen
308
301
  end
309
-
310
- request << body unless body.empty?
302
+
303
+ request << body unless body.empty?
311
304
  end
312
305
  connection = ClientSocket.new(session, request)
313
306
  else
@@ -342,115 +335,118 @@ module Watobo#:nodoc: all
342
335
  request.remove_header "^If\-"
343
336
  request.remove_header "^Expect.*continue"
344
337
 
345
- # request.remove_header("^Accept-Encoding")
338
+ request.unzip!
339
+
340
+ # request.remove_header("^Accept-Encoding")
346
341
  end
347
342
 
348
343
  end
349
344
 
350
- class ClientSocket_ORIG
351
- attr_accessor :port
352
- attr_accessor :address
353
- attr_accessor :host
354
- attr_accessor :site
355
- attr_accessor :ssl
356
- def write(data)
345
+ class ClientSocket_ORIG
346
+ attr_accessor :port
347
+ attr_accessor :address
348
+ attr_accessor :host
349
+ attr_accessor :site
350
+ attr_accessor :ssl
351
+
352
+ def write(data)
357
353
  @socket.write data
358
- @socket.flush
354
+ @socket.flush
359
355
  end
360
356
 
361
357
  def flush
362
358
  @socket.flush
363
- end
359
+ end
364
360
 
365
- def close
366
- begin
367
- #if socket.class.to_s =~ /SSLSocket/
368
- if @socket.respond_to? :shutdown
369
- @socket.shutdown(Socket::SHUT_RDWR)
361
+ def close
362
+ begin
363
+ #if socket.class.to_s =~ /SSLSocket/
364
+ if @socket.respond_to? :shutdown
365
+ @socket.shutdown(Socket::SHUT_RDWR)
370
366
  end
371
367
  # finally close it
372
- if @socket.respond_to? :close
373
- @socket.close
368
+ if @socket.respond_to? :close
369
+ @socket.close
374
370
  elsif @socket.respond_to? :sysclose
375
371
  socket.io.shutdown(Socket::SHUT_RDWR)
376
- @socket.sysclose
377
- end
378
- return true
379
- rescue => bang
380
- puts bang
381
- puts bang.backtrace if $DEBUG
382
- end
383
- false
384
- end
385
-
386
- def read_header
387
- request = []
388
- Watobo::HTTPSocket.read_client_header(@socket) do |line|
389
- request << line
390
- end
391
-
392
- return nil if request.empty?
393
- unless request.first =~ /(^[^[:space:]]{1,}) http/
394
- request.first.gsub!(/(^[^[:space:]]{1,})( )(\/.*)/, "\\1 https://#{@site}\\3")
395
- end
396
-
397
- Watobo::Request.new(request)
398
- end
399
-
400
- def ssl?
401
- @ssl == true
402
- end
403
-
404
- def request
405
- begin
406
- unless @initial_request.nil?
407
- request = @initial_request.copy
408
- @initial_request = nil
409
- return request
372
+ @socket.sysclose
373
+ end
374
+ return true
375
+ rescue => bang
376
+ puts bang
377
+ puts bang.backtrace if $DEBUG
378
+ end
379
+ false
380
+ end
381
+
382
+ def read_header
383
+ request = []
384
+ Watobo::HTTPSocket.read_client_header(@socket) do |line|
385
+ request << line
386
+ end
387
+
388
+ return nil if request.empty?
389
+ unless request.first =~ /(^[^[:space:]]{1,}) http/
390
+ request.first.gsub!(/(^[^[:space:]]{1,})( )(\/.*)/, "\\1 https://#{@site}\\3")
391
+ end
392
+
393
+ Watobo::Request.new(request)
394
+ end
395
+
396
+ def ssl?
397
+ @ssl == true
398
+ end
399
+
400
+ def request
401
+ begin
402
+ unless @initial_request.nil?
403
+ request = @initial_request.copy
404
+ @initial_request = nil
405
+ return request
410
406
  end
411
407
 
412
408
  request = read_header
413
409
 
414
- return nil if request.nil?
415
-
416
- clen = request.content_length
417
- if clen > 0 then
418
- body = ""
419
- Watobo::HTTPSocket.read_body(@socket) do |data|
420
- body += data
421
- break if body.length == clen
422
- end
423
- request << body
424
- end
425
- rescue => bang
426
- puts bang
410
+ return nil if request.nil?
411
+
412
+ clen = request.content_length
413
+ if clen > 0 then
414
+ body = ""
415
+ Watobo::HTTPSocket.read_body(@socket) do |data|
416
+ body += data
417
+ break if body.length == clen
418
+ end
419
+ request << body
420
+ end
421
+ rescue => bang
422
+ puts bang
427
423
  end
428
424
 
429
- puts request
430
-
431
- request
432
- end
433
-
434
- def initialize(socket, req=nil)
435
- @socket = socket
436
- @port = nil
437
- @address = nil
438
- @host = nil
439
- @site = nil
440
- @ssl = false
441
- @initial_request = req
442
-
443
- # TODO: Fake Certs Should be global accessable
444
-
445
- end
446
-
447
- def self.connect(socket)
448
- request = []
449
- @fake_certs ||= {}
450
- @dh_key ||= Watobo::CA.dh_key
451
-
452
- ra = socket.remote_address
453
- cport = ra.ip_port
425
+ puts request
426
+
427
+ request
428
+ end
429
+
430
+ def initialize(socket, req=nil)
431
+ @socket = socket
432
+ @port = nil
433
+ @address = nil
434
+ @host = nil
435
+ @site = nil
436
+ @ssl = false
437
+ @initial_request = req
438
+
439
+ # TODO: Fake Certs Should be global accessable
440
+
441
+ end
442
+
443
+ def self.connect(socket)
444
+ request = []
445
+ @fake_certs ||= {}
446
+ @dh_key ||= Watobo::CA.dh_key
447
+
448
+ ra = socket.remote_address
449
+ cport = ra.ip_port
454
450
  caddr = ra.ip_address
455
451
 
456
452
  optval = [1, 500_000].pack("I_2")
@@ -458,177 +454,177 @@ module Watobo#:nodoc: all
458
454
  #socket.setsockopt Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, optval
459
455
  socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
460
456
  #socket.setsockopt Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1
461
- socket.sync = true
462
-
463
- session = socket
464
-
465
- if Watobo::Interceptor::Proxy.transparent?
466
-
467
- ci = Watobo::Interceptor::Transparent.info({ 'host' => caddr, 'port' => cport } )
468
- unless ci['target'].empty? or ci['cn'].empty?
469
- puts "SSL-REQUEST FROM #{caddr}:#{cport}"
470
-
471
- ctx = Watobo::CertStore.acquire_ssl_ctx ci['target'], ci['cn']
472
-
473
- begin
474
- ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx)
475
- #ssl_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
476
- # ssl_socket.sync_close = true
477
- ssl_socket.sync = true
478
- # puts ssl_socket.methods.sort
479
- session = ssl_socket.accept
480
- rescue OpenSSL::SSL::SSLError => e
481
- puts ">> SSLError"
482
- puts e
483
- return nil, session
484
- rescue => bang
485
- puts bang
486
- puts bang.backtrace
487
- return nil, session
488
- end
489
- else
490
- puts ci['host']
491
- puts ci['cn']
492
- end
493
- end
494
-
495
- begin
496
- Watobo::HTTPSocket.read_header(session) do |line|
497
- request << line
457
+ socket.sync = true
458
+
459
+ session = socket
460
+
461
+ if Watobo::Interceptor::Proxy.transparent?
462
+
463
+ ci = Watobo::Interceptor::Transparent.info({'host' => caddr, 'port' => cport})
464
+ unless ci['target'].empty? or ci['cn'].empty?
465
+ puts "SSL-REQUEST FROM #{caddr}:#{cport}"
466
+
467
+ ctx = Watobo::CertStore.acquire_ssl_ctx ci['target'], ci['cn']
468
+
469
+ begin
470
+ ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx)
471
+ #ssl_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
472
+ # ssl_socket.sync_close = true
473
+ ssl_socket.sync = true
474
+ # puts ssl_socket.methods.sort
475
+ session = ssl_socket.accept
476
+ rescue OpenSSL::SSL::SSLError => e
477
+ puts ">> SSLError"
478
+ puts e
479
+ return nil, session
480
+ rescue => bang
481
+ puts bang
482
+ puts bang.backtrace
483
+ return nil, session
484
+ end
485
+ else
486
+ puts ci['host']
487
+ puts ci['cn']
488
+ end
489
+ end
490
+
491
+ begin
492
+ Watobo::HTTPSocket.read_header(session) do |line|
493
+ request << line
498
494
  end
499
495
  rescue => bang
500
496
  puts bang
501
497
  puts bang.backtrace if $DEBUG
502
498
  return nil
503
- end
504
-
505
- if Watobo::Interceptor::Proxy.transparent?
506
- #puts "> get hostname ..."
507
- thn = nil
508
- request.each do |l|
509
- if l =~ /^Host: (.*)/
510
- thn = $1.strip
511
- # puts ">> #{thn}"
512
- end
513
- end
514
- # puts session.class
515
- # puts "* fix request line ..."
516
- # puts request.first
517
- # puts ">>"
518
- if session.is_a? OpenSSL::SSL::SSLSocket
519
- request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i,"\\1 https://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
520
- else
521
- request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i,"\\1 http://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
522
- end
523
- #puts request.first
524
- end
525
-
526
- if request.first =~ /^CONNECT (.*):(\d{1,5}) HTTP\/1\./ then
527
- target = $1
528
- tport = $2
529
- # puts request.first
530
- #print "\n* CONNECT: #{method} #{target} on port #{tport}\n"
531
- site = "#{target}:#{tport}"
532
- #puts "CONNECT #{site}"
533
-
534
- socket.print "HTTP/1.0 200 Connection established\r\n" +
535
- #"Proxy-connection: Keep-alive\r\n" +
536
- "Proxy-agent: WATOBO-Proxy/1.1\r\n" +
537
- "\r\n"
538
- bscount = 0 # bad handshake counter
539
- # puts "* wait for ssl handshake ..."
540
- begin
541
- # site = "#{target}:#{tport}"
542
- unless @fake_certs.has_key? site
543
- puts "CREATE NEW CERTIFICATE FOR >> #{site} <<"
544
- cn = Watobo::HTTPSocket.get_ssl_cert_cn(target, tport)
545
- puts "CN=#{cn}"
546
-
547
- cert = {
548
- :hostname => cn,
549
- :type => 'server',
550
- :user => 'watobo',
551
- :email => 'root@localhost',
552
- }
553
-
554
- cert_file, key_file = Watobo::CA.create_cert cert
555
- @fake_certs[site] = {
556
- :cert => OpenSSL::X509::Certificate.new(File.read(cert_file)),
557
- :key => OpenSSL::PKey::RSA.new(File.read(key_file))
558
- }
559
- end
560
- ctx = OpenSSL::SSL::SSLContext.new()
561
-
562
- #ctx.cert = @cert
563
- ctx.cert = @fake_certs[site][:cert]
564
- # @ctx.key = OpenSSL::PKey::DSA.new(File.read(key_file))
565
- #ctx.key = @key
566
- ctx.key = @fake_certs[site][:key]
567
- ctx.tmp_dh_callback = proc { |*args|
568
- @dh_key
569
- }
570
-
571
- ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
572
- ctx.timeout = 10
573
-
574
- ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx)
575
- ssl_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
576
- # ssl_socket.sync_close = true
577
- ssl_socket.sync = true
578
- # puts ssl_socket.methods.sort
579
-
580
- ssl_session = ssl_socket.accept
581
- rescue => bang
582
- puts bang
583
- puts bang.backtrace if $DEBUG
584
-
585
- return nil
586
-
587
- end
588
- session = ssl_session
589
- request = nil
590
- else
591
- # puts "* create request object"
592
- request = Watobo::Request.new(request)
593
- site = request.site
594
- #puts request
595
- end
596
-
597
- begin
598
-
599
- unless request.nil?
600
- clen = request.content_length
601
- if clen > 0 then
602
- body = ""
603
- Watobo::HTTPSocket.read_body(session) do |data|
604
- body += data
605
- break if body.length == clen
606
- end
607
- request << body unless body.empty?
608
- end
609
- connection = ClientSocket.new(session, request)
610
- else
611
- connection = ClientSocket.new(session)
612
- end
613
-
614
- connection.ssl = true if session.class.to_s =~ /ssl/i
615
-
616
- # ra = session.remote_address
617
- # connection.port = ra.ip_port
618
- # connection.address = ra.ip_address
619
- # connection.site = site
620
-
621
- connection.port = cport
622
- connection.address = caddr
623
- connection.site = site
624
- rescue => bang
625
- puts bang
626
- puts bang.backtrace
627
- end
628
- connection
629
- end
630
-
499
+ end
500
+
501
+ if Watobo::Interceptor::Proxy.transparent?
502
+ #puts "> get hostname ..."
503
+ thn = nil
504
+ request.each do |l|
505
+ if l =~ /^Host: (.*)/
506
+ thn = $1.strip
507
+ # puts ">> #{thn}"
508
+ end
509
+ end
510
+ # puts session.class
511
+ # puts "* fix request line ..."
512
+ # puts request.first
513
+ # puts ">>"
514
+ if session.is_a? OpenSSL::SSL::SSLSocket
515
+ request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i, "\\1 https://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
516
+ else
517
+ request.first.gsub!(/(^[^[:space:]]{1,}) (.*) (HTTP.*)/i, "\\1 http://#{thn}\\2 \\3") unless request.first =~ /^[^[:space:]]{1,} http/
518
+ end
519
+ #puts request.first
520
+ end
521
+
522
+ if request.first =~ /^CONNECT (.*):(\d{1,5}) HTTP\/1\./ then
523
+ target = $1
524
+ tport = $2
525
+ # puts request.first
526
+ #print "\n* CONNECT: #{method} #{target} on port #{tport}\n"
527
+ site = "#{target}:#{tport}"
528
+ #puts "CONNECT #{site}"
529
+
530
+ socket.print "HTTP/1.0 200 Connection established\r\n" +
531
+ #"Proxy-connection: Keep-alive\r\n" +
532
+ "Proxy-agent: WATOBO-Proxy/1.1\r\n" +
533
+ "\r\n"
534
+ bscount = 0 # bad handshake counter
535
+ # puts "* wait for ssl handshake ..."
536
+ begin
537
+ # site = "#{target}:#{tport}"
538
+ unless @fake_certs.has_key? site
539
+ puts "CREATE NEW CERTIFICATE FOR >> #{site} <<"
540
+ cn = Watobo::HTTPSocket.get_ssl_cert_cn(target, tport)
541
+ puts "CN=#{cn}"
542
+
543
+ cert = {
544
+ :hostname => cn,
545
+ :type => 'server',
546
+ :user => 'watobo',
547
+ :email => 'root@localhost',
548
+ }
549
+
550
+ cert_file, key_file = Watobo::CA.create_cert cert
551
+ @fake_certs[site] = {
552
+ :cert => OpenSSL::X509::Certificate.new(File.read(cert_file)),
553
+ :key => OpenSSL::PKey::RSA.new(File.read(key_file))
554
+ }
555
+ end
556
+ ctx = OpenSSL::SSL::SSLContext.new()
557
+
558
+ #ctx.cert = @cert
559
+ ctx.cert = @fake_certs[site][:cert]
560
+ # @ctx.key = OpenSSL::PKey::DSA.new(File.read(key_file))
561
+ #ctx.key = @key
562
+ ctx.key = @fake_certs[site][:key]
563
+ ctx.tmp_dh_callback = proc { |*args|
564
+ @dh_key
565
+ }
566
+
567
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
568
+ ctx.timeout = 10
569
+
570
+ ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ctx)
571
+ ssl_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
572
+ # ssl_socket.sync_close = true
573
+ ssl_socket.sync = true
574
+ # puts ssl_socket.methods.sort
575
+
576
+ ssl_session = ssl_socket.accept
577
+ rescue => bang
578
+ puts bang
579
+ puts bang.backtrace if $DEBUG
580
+
581
+ return nil
582
+
583
+ end
584
+ session = ssl_session
585
+ request = nil
586
+ else
587
+ # puts "* create request object"
588
+ request = Watobo::Request.new(request)
589
+ site = request.site
590
+ #puts request
591
+ end
592
+
593
+ begin
594
+
595
+ unless request.nil?
596
+ clen = request.content_length
597
+ if clen > 0 then
598
+ body = ""
599
+ Watobo::HTTPSocket.read_body(session) do |data|
600
+ body += data
601
+ break if body.length == clen
602
+ end
603
+ request << body unless body.empty?
604
+ end
605
+ connection = ClientSocket.new(session, request)
606
+ else
607
+ connection = ClientSocket.new(session)
608
+ end
609
+
610
+ connection.ssl = true if session.class.to_s =~ /ssl/i
611
+
612
+ # ra = session.remote_address
613
+ # connection.port = ra.ip_port
614
+ # connection.address = ra.ip_address
615
+ # connection.site = site
616
+
617
+ connection.port = cport
618
+ connection.address = caddr
619
+ connection.site = site
620
+ rescue => bang
621
+ puts bang
622
+ puts bang.backtrace
623
+ end
624
+ connection
625
+ end
626
+
631
627
  end
632
628
 
633
- end
634
- end
629
+ end
630
+ end