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,170 +1,161 @@
1
- #.
2
- # siebel_apps.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 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
2
+ module Watobo#:nodoc: all
3
+ module Modules
4
+ module Active
5
+ module Siebel
6
+
7
+ class Siebel_apps < Watobo::ActiveCheck
8
+ check_group = File.dirname(File.expand_path(__FILE__)).split("/").last.capitalize!
9
+ @@tested_directories = Hash.new
10
+
11
+ @info.update(
12
+ :check_name => 'Siebel Applications', # name of check which briefly describes functionality, will be used for tree and progress views
13
+ :description => "Enumerate Siebel Applications And Default Files, e.g. base.txt", # description of checkfunction
14
+ :author => "Andreas Schmidt", # author of check
15
+ :version => "1.0", # check version
16
+ :check_group => check_group
17
+ )
18
+
19
+ @finding.update(
20
+ :threat => 'Information', # thread of vulnerability, e.g. loss of information
21
+ :class => "Siebel: Default Applications", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
22
+ :type => FINDING_TYPE_INFO # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
23
+ )
24
+
25
+ def initialize(project, prefs={})
26
+
27
+ super(project, prefs)
28
+
29
+ @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 )
30
+ @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 )
31
+
32
+
33
+ end
34
+
35
+ def reset()
36
+ @@tested_directories.clear
37
+
38
+ end
39
+
40
+
41
+ def generateChecks(chat)
42
+
43
+ begin
44
+ path = chat.request.dir
45
+ # puts "!!!!#{self}: #{path}"
46
+ unless @@tested_directories.has_key?(path)
47
+ @@tested_directories[path] = true
48
+
49
+ @apps.each do |app|
50
+ @langs.each do |lang|
51
+
52
+
53
+ checker = proc{
54
+ begin
55
+ app_dir = "#{app}_#{lang}"
56
+ #puts app_dir
57
+ test_request = nil
58
+ test_response = nil
59
+ test = chat.copyRequest
60
+ test.appendDir app_dir
61
+
62
+ status, test_request, test_response = fileExists?(test, :default => true)
63
+
64
+ if status == true
65
+
66
+ # test_chat = Chat.new(test,test_response, :id => chat.id)
67
+
68
+ addFinding( test_request,test_response,
69
+ :test_item => chat.request.url.to_s,
70
+ :check_pattern => "#{app_dir}",
71
+ :proof_pattern => "#{test_response.status}",
72
+ :chat => chat,
73
+ :title => "#{app_dir}"
74
+ )
75
+
76
+ # check for _stats.swe
77
+ stats_test = chat.copyRequest
78
+ stats_test.replaceFileExt("_stats.swe")
79
+ status, stats_request, stats_response = fileExists?( stats_test, :default => true)
80
+
81
+ if status == true and stats_response.has_body?
82
+ addFinding( stats_request,stats_response,
83
+ :test_item => stats_request.url.to_s,
84
+ :check_pattern => "#{app_dir}",
85
+ :proof_pattern => "#{stats_response.status}",
86
+ :chat => chat,
87
+ :title => "#{app_dir}",
88
+ :check_name => "Siebel Stats Page",
89
+ :class => "Siebel: Stats Page"
90
+ )
91
+ end
92
+
93
+ # check for base.txt
94
+ base_test = chat.copyRequest
95
+ base_test.appendDir app_dir
96
+ base_test.replaceFileExt("base.txt")
97
+ # puts base_test.url
98
+ status, base_request, base_response = fileExists?(base_test, :default => true)
99
+
100
+ if status == true and base_response.has_body?
101
+ version = nil
102
+ if base_response.body.strip =~ /^([0-9.]*) /
103
+ version = $1
104
+ end
105
+ addFinding( base_request,base_response,
106
+ :test_item => base_request.url.to_s,
107
+ :check_pattern => "base.txt",
108
+ :proof_pattern => "#{base_response.status}",
109
+ :chat => chat,
110
+ :title => "#{app_dir}",
111
+ :check_name => "Siebel Version #{version}",
112
+ :class => "Siebel: Version #{version}"
113
+ )
114
+ end
115
+
116
+ # check for About_Siebel.htm and siebindex.htm
117
+ %w( About_Siebel.htm help/siebindex.htm siebindex.htm ).each do |df|
118
+ default_test = chat.copyRequest
119
+ default_test.appendDir app_dir
120
+ default_test.replaceFileExt(df)
121
+ status, default_request, default_response = fileExists?(default_test, :default => true)
122
+
123
+ if status == true
124
+ addFinding( default_request,default_response,
125
+ :test_item => "#{default_request.url.to_s}",
126
+ :check_pattern => "#{df}",
127
+ :proof_pattern => "#{default_response.status}",
128
+ :chat => chat,
129
+ :title => "#{df}",
130
+ #:check_name => "Siebel Version #{version}",
131
+ :class => "Siebel: Default Files"
132
+ )
133
+ end
134
+ end
135
+
136
+ end
137
+ rescue => bang
138
+ puts bang
139
+ puts bang.backtrace
140
+ end
141
+ [ test_request, test_response ]
142
+ }
143
+ yield checker
144
+ end
145
+ end
146
+ end
147
+
148
+ rescue => bang
149
+ puts bang
150
+ puts "ERROR!! #{Module.nesting[0].name}"
151
+ raise
152
+
153
+ end
154
+ end
155
+
156
+ end
157
+ # --> eo namespace
158
+ end
159
+ end
160
+ end
161
+ end
@@ -1,12 +1,3 @@
1
- #.
2
- # sql_boolean.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
  require 'digest/md5'
11
2
  require 'digest/sha1'
12
3
 
@@ -0,0 +1,198 @@
1
+ require 'digest/md5'
2
+ require 'digest/sha1'
3
+
4
+ # @private
5
+ module Watobo#:nodoc: all
6
+ module Modules
7
+ module Active
8
+ module Sqlinjection
9
+
10
+
11
+ class Sql_numerical < Watobo::ActiveCheck
12
+
13
+ @info.update(
14
+ :check_name => 'Numerical SQL-Injection', # name of check which briefly describes functionality, will be used for tree and progress views
15
+ :check_group => AC_GROUP_SQL,
16
+ :description => "Checks numerical parameter values for SQL-Injection flaws.", # description of checkfunction
17
+ :author => "Andreas Schmidt", # author of check
18
+ :version => "0.9" # check version
19
+ )
20
+
21
+ threat =<<'EOF'
22
+ SQL Injection is an attack technique used to exploit applications that construct SQL statements from user-supplied input.
23
+ When successful, the attacker is able to change the logic of SQL statements executed against the database.
24
+ Structured Query Language (SQL) is a specialized programming language for sending queries to databases.
25
+ The SQL programming language is both an ANSI and an ISO standard, though many database products supporting SQL do so with
26
+ proprietary extensions to the standard language. Applications often use user-supplied data to create SQL statements.
27
+ If an application fails to properly construct SQL statements it is possible for an attacker to alter the statement structure
28
+ and execute unplanned and potentially hostile commands. When such commands are executed, they do so under the context of the user
29
+ specified by the application executing the statement. This capability allows attackers to gain control of all database resources
30
+ accessible by that user, up to and including the ability to execute commands on the hosting system.
31
+
32
+ Source: http://projects.webappsec.org/SQL-Injection
33
+ EOF
34
+
35
+ measure = "All user input must be escaped and/or filtered thoroughly before the sql statement is put together. Additionally prepared statements should be used."
36
+
37
+ @finding.update(
38
+ :threat => threat, # thread of vulnerability, e.g. loss of information
39
+ :class => "SQL-Injection", # vulnerability class, e.g. Stored XSS, SQL-Injection, ...
40
+ :type => FINDING_TYPE_VULN, # FINDING_TYPE_HINT, FINDING_TYPE_INFO, FINDING_TYPE_VULN
41
+ :rating => VULN_RATING_CRITICAL,
42
+ :measure => measure
43
+ )
44
+
45
+ def initialize(project, prefs={})
46
+ super(project, prefs)
47
+
48
+
49
+ end
50
+
51
+ def generateChecks(chat)
52
+
53
+ #
54
+ # Check GET-Parameters
55
+ #
56
+ begin
57
+ urlParmNames(chat).each do |parm|
58
+ vint = nil
59
+ # first check if parameter is integer value
60
+ value = chat.request.get_parm_value(parm)
61
+ if value.strip =~ /^\d+$/ then
62
+ # puts "*!* #"
63
+ vint = value.to_i
64
+ end
65
+
66
+ if vint then
67
+ #puts "* found integer get parameter #{parm}"
68
+ checker = proc {
69
+ begin
70
+ test_request = nil
71
+ test_response = nil
72
+
73
+ # first do request double time to check if hashes are the same
74
+ test = chat.copyRequest
75
+ test_request,test_response = doRequest(test,:default => true)
76
+ # hash_1 = Digest::MD5.hexdigest(test_response.body.join)
77
+ hash_1 = Watobo::Utils.responseHash(test_request, test_response)
78
+ test = chat.copyRequest
79
+ test_request,test_response = doRequest(test,:default => true)
80
+ hash_2 = Watobo::Utils.responseHash(test_request, test_response)
81
+ #hash_2 = Digest::MD5.hexdigest(test_response.body.join)
82
+
83
+ test = chat.copyRequest
84
+ # also need to check if altered parm will change response
85
+ new_value = "#{vint+1}"
86
+ test.replace_get_parm(parm,new_value)
87
+ test_request,test_response = doRequest(test,:default => true)
88
+ hash_3 = Watobo::Utils.responseHash(test_request, test_response)
89
+ # puts "Hash 1: #{hash_1}"
90
+ # puts "Hash 2: #{hash_2}"
91
+ # puts "Hash 3: #{hash_3}"
92
+ # if hash_1 == hash_2 then
93
+ if hash_1 == hash_2 and hash_1 != hash_3 then # same hashes? now we can start the test
94
+ test = chat.copyRequest
95
+ # first add one to the original value and append "-1"
96
+ new_value = "#{vint+1}-1"
97
+ test.replace_get_parm(parm,new_value)
98
+ test_request,test_response = doRequest(test,:default => true)
99
+
100
+ hash_test = Watobo::Utils.responseHash(test_request, test_response)
101
+ if hash_test == hash_1 then
102
+ path = "/" + test_request.path
103
+ # test_chat = Chat.new(test,test_response, :id => chat.id)
104
+ addFinding(test_request, test_response,
105
+ :check_pattern => "#{parm}",
106
+ :chat => chat,
107
+ :title => "[#{parm}] - #{path}"
108
+ )
109
+
110
+ end
111
+
112
+ end
113
+ rescue => bang
114
+ puts bang
115
+ raise
116
+ end
117
+ [ test_request, test_response ]
118
+ }
119
+ yield checker
120
+
121
+ end
122
+
123
+ end
124
+
125
+ postParmNames(chat).each do |parm|
126
+ vint = nil
127
+ # first check if parameter is integer value
128
+ value = chat.request.post_parm_value(parm)
129
+ if value.strip =~ /^\d+$/ then
130
+ vint = value.to_i
131
+ end
132
+
133
+ if vint then
134
+ checker = proc {
135
+ test_request = nil
136
+ test_response = nil
137
+ #puts "* found integer post parameter #{parm}"
138
+ # first do request double time to check if hashes are the same
139
+ test = chat.copyRequest
140
+ test_request,test_response = doRequest(test, :default => true)
141
+ hash_1 = Watobo::Utils.responseHash(test_request, test_response)
142
+ hash_ref = Watobo::Utils.responseHash(test_request, test_response)
143
+ test = chat.copyRequest
144
+ test_request,test_response = doRequest(test, :default => true)
145
+ hash_2 = Watobo::Utils.responseHash(test_request, test_response)
146
+ # also need to check if altered parm will change response
147
+ test = chat.copyRequest
148
+ new_value = "#{vint+1}"
149
+ test.replace_get_parm(parm,new_value)
150
+ test_request,test_response = doRequest(test,:default => true)
151
+ hash_3 = Watobo::Utils.responseHash(test_request, test_response)
152
+ # puts
153
+ # puts "#{value}, #{new_value}, #{parm}"
154
+ # puts "Hash 1: #{hash_1}"
155
+ # puts "Hash 2: #{hash_2}"
156
+ # puts "Hash 3: #{hash_3}"
157
+
158
+ # if hash_1 == hash_2 then
159
+ if hash_1 == hash_2 and hash_1 != hash_3 then # same hashes? now we can start the test
160
+ test = chat.copyRequest
161
+ # first add one to the original value and append "-1"
162
+ new_value = "#{vint+1}-1"
163
+ test.replace_post_parm(parm,new_value)
164
+ test_request,test_response = doRequest(test, :default => true)
165
+
166
+ hash_test = Watobo::Utils.responseHash(test_request, test_response)
167
+ # puts "Hash Test: #{hash_test}"
168
+ if hash_test == hash_ref then
169
+ # test_chat = Chat.new(test, test_response, :id => chat.id)
170
+ path = "/" + test_request.path
171
+ addFinding(test_request, test_response,
172
+ :check_pattern => "#{parm}",
173
+ :chat => chat,
174
+ :title => "[#{parm}] - #{path}"
175
+ )
176
+
177
+
178
+ end
179
+ end
180
+ [ test_request, test_response ]
181
+ }
182
+ yield checker
183
+ end
184
+ end
185
+
186
+ rescue => bang
187
+ puts bang
188
+ puts "ERROR!! #{Module.nesting[0].name}"
189
+ raise
190
+ end
191
+ end
192
+
193
+ end
194
+ # --> eo namespace
195
+ end
196
+ end
197
+ end
198
+ end