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
@@ -1,24 +1,12 @@
1
- # .
1
+ #.
2
2
  # filefinder.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
- # .
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
+
22
10
  # @private
23
11
  module Watobo#:nodoc: all
24
12
  module Plugin
@@ -73,8 +61,9 @@ module Watobo#:nodoc: all
73
61
  def generateChecks(chat)
74
62
  begin
75
63
  puts "* generating checks for #{@db_file} ..."
76
- content = [ @db_file ]
77
- content = File.open(@db_file) if File.exist?(@db_file)
64
+ return false unless File.exist?(@db_file)
65
+
66
+ content = File.readlines(@db_file)
78
67
 
79
68
  content.each do |uri|
80
69
  # puts "+ #{uri}"
@@ -634,7 +623,8 @@ module Watobo#:nodoc: all
634
623
  @check = Check.new(@project, name, @project.getScanPreferences())
635
624
 
636
625
  if @append_extensions_cb.checked?
637
- extensions = @extensions_text.text.split(/(;|\n)/).select {|x| x !~ /(\n|;)/ }
626
+ extensions = @extensions_text.text.split(/(;|\n)/).select {|x| !x.strip.empty? }
627
+
638
628
  @check.set_extensions(extensions)
639
629
  end
640
630
 
@@ -1,102 +1,90 @@
1
- # .
1
+ #.
2
2
  # test.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
- inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..","..", "lib"))
23
- $: << inc_path
24
-
25
- require 'watobo'
26
- require 'fox16'
27
-
28
- include Fox
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
29
9
 
10
+ inc_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..","..", "lib"))
11
+ $: << inc_path
12
+
13
+ require 'watobo'
14
+ require 'fox16'
15
+
16
+ include Fox
17
+
30
18
  # @private
31
- module Watobo#:nodoc: all
32
- module Gui
33
- @application = FXApp.new('SQLmap', 'Plugin Test')
34
-
35
- %w( load_icons gui_utils load_plugins session_history save_default_settings master_password session_history save_project_settings save_proxy_settings ).each do |l|
36
- f = File.join("watobo","gui","utils", l)
37
- puts "SQLMap >> Loading #{f}"
38
- require f
39
-
40
- end
41
-
42
- require 'watobo/gui/utils/init_icons'
43
-
44
- gui_path = File.expand_path(File.join(File.dirname(__FILE__),"..", "..", "..", "lib","watobo", "gui"))
45
-
46
- Dir.glob("#{gui_path}/*.rb").each do |cf|
47
- next if File.basename(cf) == 'main_window.rb' # skip main_window here, because it must be loaded last
48
- f = File.join("watobo","gui", File.basename(cf))
49
- puts "Loading >> #{f}"
50
- require f
51
- end
52
-
53
- puts "Loading plugin templates ..."
54
- require 'watobo/gui/templates/plugin'
55
- require 'watobo/gui/templates/plugin2'
56
-
57
-
58
- require File.join(File.expand_path(File.dirname(__FILE__)), "..","sqlmap")
59
-
60
- gui_path = File.join(File.expand_path(File.dirname(__FILE__)),"..", "gui")
61
- puts "="
62
-
63
- %w( main options_frame).each do |l|
64
- puts "Loading >> #{l}"
65
- require File.join(gui_path, l + ".rb")
66
- end
67
-
68
- class TestGui < FXMainWindow
69
-
70
- def initialize(app)
71
- # Call base class initializer first
72
- super(app, "Test Application", :width => 800, :height => 600)
73
- frame = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
74
-
75
- button = FXButton.new(frame, "Open Plugin",:opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
76
- button.connect(SEL_COMMAND) {
77
- dlg = Watobo::Plugin::Sqlmap::Gui.new(self)
78
- if dlg.execute != 0
79
- puts dlg.to_h.to_yaml
80
- end
81
- }
82
- end
83
- # Create and show the main window
84
- def create
85
- super # Create the windows
86
- show(PLACEMENT_SCREEN) # Make the main window appear
87
- dlg = Watobo::Plugin::Sqlmap::Gui.new(self)
88
- #dlg.set_tab_index 2
89
- #prefs = { :form_auth_url => "http://www.google.com" }
90
- #dlg.settings.auth.set prefs
91
-
92
- if dlg.execute != 0
93
- puts dlg.details.to_yaml
94
- end
95
- end
96
- end
97
- # application = FXApp.new('LayoutTester', 'FoxTest')
98
- TestGui.new(@application)
99
- @application.create
100
- @application.run
101
- end
19
+ module Watobo#:nodoc: all
20
+ module Gui
21
+ @application = FXApp.new('SQLmap', 'Plugin Test')
22
+
23
+ %w( load_icons gui_utils load_plugins session_history save_default_settings master_password session_history save_project_settings save_proxy_settings ).each do |l|
24
+ f = File.join("watobo","gui","utils", l)
25
+ puts "SQLMap >> Loading #{f}"
26
+ require f
27
+
28
+ end
29
+
30
+ require 'watobo/gui/utils/init_icons'
31
+
32
+ gui_path = File.expand_path(File.join(File.dirname(__FILE__),"..", "..", "..", "lib","watobo", "gui"))
33
+
34
+ Dir.glob("#{gui_path}/*.rb").each do |cf|
35
+ next if File.basename(cf) == 'main_window.rb' # skip main_window here, because it must be loaded last
36
+ f = File.join("watobo","gui", File.basename(cf))
37
+ puts "Loading >> #{f}"
38
+ require f
39
+ end
40
+
41
+ puts "Loading plugin templates ..."
42
+ require 'watobo/gui/templates/plugin'
43
+ require 'watobo/gui/templates/plugin2'
44
+
45
+
46
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..","sqlmap")
47
+
48
+ gui_path = File.join(File.expand_path(File.dirname(__FILE__)),"..", "gui")
49
+ puts "="
50
+
51
+ %w( main options_frame).each do |l|
52
+ puts "Loading >> #{l}"
53
+ require File.join(gui_path, l + ".rb")
54
+ end
55
+
56
+ class TestGui < FXMainWindow
57
+
58
+ def initialize(app)
59
+ # Call base class initializer first
60
+ super(app, "Test Application", :width => 800, :height => 600)
61
+ frame = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_GROOVE)
62
+
63
+ button = FXButton.new(frame, "Open Plugin",:opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,:padLeft => 10, :padRight => 10, :padTop => 5, :padBottom => 5)
64
+ button.connect(SEL_COMMAND) {
65
+ dlg = Watobo::Plugin::Sqlmap::Gui.new(self)
66
+ if dlg.execute != 0
67
+ puts dlg.to_h.to_yaml
68
+ end
69
+ }
70
+ end
71
+ # Create and show the main window
72
+ def create
73
+ super # Create the windows
74
+ show(PLACEMENT_SCREEN) # Make the main window appear
75
+ dlg = Watobo::Plugin::Sqlmap::Gui.new(self)
76
+ #dlg.set_tab_index 2
77
+ #prefs = { :form_auth_url => "http://www.google.com" }
78
+ #dlg.settings.auth.set prefs
79
+
80
+ if dlg.execute != 0
81
+ puts dlg.details.to_yaml
82
+ end
83
+ end
84
+ end
85
+ # application = FXApp.new('LayoutTester', 'FoxTest')
86
+ TestGui.new(@application)
87
+ @application.create
88
+ @application.run
89
+ end
102
90
  end
@@ -1,26 +1,14 @@
1
- # .
1
+ #.
2
2
  # gui.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
- require_relative 'sqlmap'
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
23
9
 
24
- %w( main options_frame ).each do |l|
25
- require_relative File.join('gui', l )
26
- end
10
+ require_relative 'sqlmap'
11
+
12
+ %w( main options_frame ).each do |l|
13
+ require_relative File.join('gui', l )
14
+ end
@@ -1,240 +1,228 @@
1
- # .
1
+ #.
2
2
  # main.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 Plugin
25
- class Sqlmap
26
- class SettingsTabBook < FXTabBook
27
- attr :general
28
- def initialize(owner)
29
- #@tab = FXTabBook.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
30
- super(owner, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
31
- FXTabItem.new(self, "General", nil)
32
- @general = OptionsFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
33
-
34
- # FXTabItem.new(self, "Advanced", nil)
35
- # frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
36
- # FXTabItem.new(self, "Log", nil)
37
- # frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK|FRAME_RAISED)
38
- # @log_viewer = Watobo::Gui::LogViewer.new(frame, :append, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN)
39
- end
40
- end
41
-
42
- class Gui < Watobo::Plugin2
43
- icon_file "sqlmap.ico"
44
-
45
- include Watobo::Constants
46
- include Responder
47
- # include Watobo::Plugin::Crawler::Constants
48
- def updateView
49
-
50
- end
51
-
52
- def initialize(owner, project=nil, chat=nil)
53
- super(owner, "SQLMap", project, :opts => DECOR_ALL, :width=>800, :height=>600)
54
- @plugin_name = "SQLMap"
55
-
56
- FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
57
-
58
- main = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
59
- matrix = FXMatrix.new(main, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
60
- FXLabel.new(matrix, "sqlmap path:")
61
- # frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
62
- # FXLabel.new(frame, "http://")
63
- @binary_path_txt = FXTextField.new(matrix, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
64
- bin_path = Watobo::Plugin::Sqlmap.binary_path
65
- bin_path ="not defined" if bin_path.empty?
66
- @binary_path_txt.text = bin_path
67
-
68
- @change_btn = FXButton.new(matrix, "...", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
69
- @change_btn.enable
70
-
71
- @change_btn.connect(SEL_COMMAND){
72
- open_path = nil
73
- unless @binary_path_txt.text.empty?
74
- dir_name = File.dirname(@binary_path_txt.text)
75
- unless dir_name.empty?
76
- open_path = dir_name unless File.exist? dir_name
77
- end
78
- end
79
- bin_path_old = @binary_path_txt.text
80
- bin_path = FXFileDialog.getOpenFilename(self, "Select SQLmap Path", open_path)
81
- unless bin_path.empty?
82
- @binary_path_txt.text = bin_path
83
- else
84
- @binary_path_txt.text = bin_path_old
85
-
86
- end
87
- if File.exist? @binary_path_txt.text
88
- Watobo::Plugin::Sqlmap.set_binary_path bin_path
89
- @accept_btn.enable
90
- else
91
- Watobo::Plugin::Sqlmap.set_binary_path ''
92
- @accept_btn.disable
93
- end
94
- }
95
-
96
- FXLabel.new(matrix, "temp directory:")
97
- # frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
98
- # FXLabel.new(frame, "http://")
99
- @output_path_txt = FXTextField.new(matrix, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
100
- @output_path_txt.text = Watobo::Plugin::Sqlmap.tmp_dir
101
-
102
- @output_path_btn = FXButton.new(matrix, "...", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
103
- @output_path_btn.enable
104
-
105
- @output_path_btn.connect(SEL_COMMAND){
106
- output_path = FXFileDialog.getOpenDirectory(self, "Select Temp Directory", Watobo::Plugin::Sqlmap.tmp_dir)
107
-
108
- #puts ">> #{output_path}"
109
- unless output_path.empty?
110
- @output_path_txt.text = output_path
111
- Watobo::Plugin::Sqlmap.set_tmp_dir output_path
112
- end
113
- }
114
-
115
- @settings_tab = SettingsTabBook.new(main)
116
-
117
- unless chat.nil?
118
- @settings_tab.general.request = chat.request
119
- end
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
120
9
 
121
- # @log_viewer = @settings_tabbook.log_viewer
122
-
123
- buttons = FXHorizontalFrame.new(main, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,
124
- :padLeft => 40, :padRight => 40, :padTop => 20, :padBottom => 20)
125
- @accept_btn = FXButton.new(buttons, "&Start", nil, self, ID_ACCEPT,
126
- FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
127
- @accept_btn.disable
128
- @accept_btn.enable unless Watobo::Plugin::Sqlmap.binary_path.empty?
129
- # Cancel
130
- FXButton.new(buttons, "&Cancel", nil, self, ID_CANCEL,
131
- FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
132
- # Configuration Categories
133
- # =
134
- # Request
135
- # Optimization
136
- # Detection
137
- # Techniques
138
- # Fingerprint
139
- # Enumeration
140
-
141
-
142
-
143
- @accept_btn.disable if @settings_tab.general.request.empty?
144
- @settings_tab.general.subscribe(:request_changed){
145
- if @settings_tab.general.request.empty?
146
- @accept_btn.disable
147
- else
148
- @accept_btn.enable
149
- end
150
- }
151
- end
152
-
153
- private
154
-
155
- def create_request_file
156
- fname = "sqlmap_" + Time.now.to_i.to_s + ".req"
157
- begin
158
- file = File.join(@output_path_txt.text, fname)
159
- File.open(file, "w"){ |fh|
160
- fh.puts @settings_tab.general.request
161
- }
162
- return file
163
- rescue => bang
164
- puts bang
165
- puts bang.backtrace
166
- return nil
167
- end
168
- end
169
-
170
- def sqlmap_command(file)
171
- sqlmap = []
172
-
173
- sqlmap << @binary_path_txt.text
174
- sqlmap << "-r #{file}"
175
- sqlmap << "--level #{@settings_tab.general.level}"
176
- sqlmap << "--risk #{@settings_tab.general.risk}"
177
- sqlmap << "--technique #{@settings_tab.general.technique}"
178
- sqlmap << @settings_tab.general.manual_options
179
-
180
- sqlmap_cmd = sqlmap.join(" ")
181
- end
182
-
183
- def linux_command(file)
184
- # /usr/bin/xterm -hold -e "script -c \"ls -alh\" test234.out"
185
- xterm_bin = "/usr/bin/xterm"
186
- return false unless File.exist? xterm_bin
187
- command = "cd #{@output_path_txt.text} && #{xterm_bin} -hold -e \""
188
- script_cmd = "#{sqlmap_command(file)}"
189
- command << script_cmd
190
- command << '"'
191
- puts command
192
- command
193
- end
194
-
195
- def win_command(file)
196
- # start "sqlmap" /WAIT /D c:\tools dir
197
- command = ""
198
-
199
- out_file = file.gsub(/\.req/, ".out")
200
- start_path = "#{@output_path_txt.text}"
201
- start_path.gsub!(/\//,'\\')
202
-
203
- script_cmd = "start \"SQLmap\" /D #{start_path} /WAIT cmd.exe /k \"#{sqlmap_command(file)}\""
204
- command << script_cmd
205
- command << '"'
206
- puts command
207
- command
208
- end
209
-
210
- def run_sqlmap(file)
211
- command = case RUBY_PLATFORM
212
- when /linux|bsd|solaris|hpux|darwin/
213
- linux_command file
214
- when /mswin|mingw|bccwin/
215
- win_command file
216
- end
217
- Thread.new(command){ |cmd|
218
- system(cmd)
219
- }
220
-
221
- end
222
-
223
- def onAccept(sender, sel, event)
224
- if @settings_tab.general.request.empty?
225
- puts "No Request Defined!"
226
- end
227
-
228
- rf = create_request_file
229
- puts "Start SQLMap with file #{rf}"
230
- run_sqlmap(rf)
231
- #getApp().stopModal(self, 1)
232
- #self.hide()
233
- #return 1
234
-
235
- end
236
-
237
- end
238
- end
239
- end
240
- end
10
+ # @private
11
+ module Watobo#:nodoc: all
12
+ module Plugin
13
+ class Sqlmap
14
+ class SettingsTabBook < FXTabBook
15
+ attr :general
16
+ def initialize(owner)
17
+ #@tab = FXTabBook.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
18
+ super(owner, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT)
19
+ FXTabItem.new(self, "General", nil)
20
+ @general = OptionsFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
21
+
22
+ # FXTabItem.new(self, "Advanced", nil)
23
+ # frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED)
24
+ # FXTabItem.new(self, "Log", nil)
25
+ # frame = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_THICK|FRAME_RAISED)
26
+ # @log_viewer = Watobo::Gui::LogViewer.new(frame, :append, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN)
27
+ end
28
+ end
29
+
30
+ class Gui < Watobo::Plugin2
31
+ icon_file "sqlmap.ico"
32
+
33
+ include Watobo::Constants
34
+ include Responder
35
+ # include Watobo::Plugin::Crawler::Constants
36
+ def updateView
37
+
38
+ end
39
+
40
+ def initialize(owner, project=nil, chat=nil)
41
+ super(owner, "SQLMap", project, :opts => DECOR_ALL, :width=>800, :height=>600)
42
+ @plugin_name = "SQLMap"
43
+
44
+ FXMAPFUNC(SEL_COMMAND, ID_ACCEPT, :onAccept)
45
+
46
+ main = FXVerticalFrame.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
47
+ matrix = FXMatrix.new(main, 3, :opts => MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
48
+ FXLabel.new(matrix, "sqlmap path:")
49
+ # frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
50
+ # FXLabel.new(frame, "http://")
51
+ @binary_path_txt = FXTextField.new(matrix, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
52
+ bin_path = Watobo::Plugin::Sqlmap.binary_path
53
+ bin_path ="not defined" if bin_path.empty?
54
+ @binary_path_txt.text = bin_path
55
+
56
+ @change_btn = FXButton.new(matrix, "...", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
57
+ @change_btn.enable
58
+
59
+ @change_btn.connect(SEL_COMMAND){
60
+ open_path = nil
61
+ unless @binary_path_txt.text.empty?
62
+ dir_name = File.dirname(@binary_path_txt.text)
63
+ unless dir_name.empty?
64
+ open_path = dir_name unless File.exist? dir_name
65
+ end
66
+ end
67
+ bin_path_old = @binary_path_txt.text
68
+ bin_path = FXFileDialog.getOpenFilename(self, "Select SQLmap Path", open_path)
69
+ unless bin_path.empty?
70
+ @binary_path_txt.text = bin_path
71
+ else
72
+ @binary_path_txt.text = bin_path_old
73
+
74
+ end
75
+ if File.exist? @binary_path_txt.text
76
+ Watobo::Plugin::Sqlmap.set_binary_path bin_path
77
+ @accept_btn.enable
78
+ else
79
+ Watobo::Plugin::Sqlmap.set_binary_path ''
80
+ @accept_btn.disable
81
+ end
82
+ }
83
+
84
+ FXLabel.new(matrix, "temp directory:")
85
+ # frame = FXHorizontalFrame.new(main, :opts => LAYOUT_FILL_X)
86
+ # FXLabel.new(frame, "http://")
87
+ @output_path_txt = FXTextField.new(matrix, 60, nil, 0, :opts => TEXTFIELD_NORMAL|LAYOUT_SIDE_RIGHT|LAYOUT_FILL_X)
88
+ @output_path_txt.text = Watobo::Plugin::Sqlmap.tmp_dir
89
+
90
+ @output_path_btn = FXButton.new(matrix, "...", :opts => BUTTON_DEFAULT|BUTTON_NORMAL )
91
+ @output_path_btn.enable
92
+
93
+ @output_path_btn.connect(SEL_COMMAND){
94
+ output_path = FXFileDialog.getOpenDirectory(self, "Select Temp Directory", Watobo::Plugin::Sqlmap.tmp_dir)
95
+
96
+ #puts ">> #{output_path}"
97
+ unless output_path.empty?
98
+ @output_path_txt.text = output_path
99
+ Watobo::Plugin::Sqlmap.set_tmp_dir output_path
100
+ end
101
+ }
102
+
103
+ @settings_tab = SettingsTabBook.new(main)
104
+
105
+ unless chat.nil?
106
+ @settings_tab.general.request = chat.request
107
+ end
108
+
109
+ # @log_viewer = @settings_tabbook.log_viewer
110
+
111
+ buttons = FXHorizontalFrame.new(main, :opts => LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH,
112
+ :padLeft => 40, :padRight => 40, :padTop => 20, :padBottom => 20)
113
+ @accept_btn = FXButton.new(buttons, "&Start", nil, self, ID_ACCEPT,
114
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
115
+ @accept_btn.disable
116
+ @accept_btn.enable unless Watobo::Plugin::Sqlmap.binary_path.empty?
117
+ # Cancel
118
+ FXButton.new(buttons, "&Cancel", nil, self, ID_CANCEL,
119
+ FRAME_RAISED|FRAME_THICK|LAYOUT_RIGHT|LAYOUT_CENTER_Y)
120
+ # Configuration Categories
121
+ # =
122
+ # Request
123
+ # Optimization
124
+ # Detection
125
+ # Techniques
126
+ # Fingerprint
127
+ # Enumeration
128
+
129
+
130
+
131
+ @accept_btn.disable if @settings_tab.general.request.empty?
132
+ @settings_tab.general.subscribe(:request_changed){
133
+ if @settings_tab.general.request.empty?
134
+ @accept_btn.disable
135
+ else
136
+ @accept_btn.enable
137
+ end
138
+ }
139
+ end
140
+
141
+ private
142
+
143
+ def create_request_file
144
+ fname = "sqlmap_" + Time.now.to_i.to_s + ".req"
145
+ begin
146
+ file = File.join(@output_path_txt.text, fname)
147
+ File.open(file, "w"){ |fh|
148
+ fh.puts @settings_tab.general.request
149
+ }
150
+ return file
151
+ rescue => bang
152
+ puts bang
153
+ puts bang.backtrace
154
+ return nil
155
+ end
156
+ end
157
+
158
+ def sqlmap_command(file)
159
+ sqlmap = []
160
+
161
+ sqlmap << @binary_path_txt.text
162
+ sqlmap << "-r #{file}"
163
+ sqlmap << "--level #{@settings_tab.general.level}"
164
+ sqlmap << "--risk #{@settings_tab.general.risk}"
165
+ sqlmap << "--technique #{@settings_tab.general.technique}"
166
+ sqlmap << @settings_tab.general.manual_options
167
+
168
+ sqlmap_cmd = sqlmap.join(" ")
169
+ end
170
+
171
+ def linux_command(file)
172
+ # /usr/bin/xterm -hold -e "script -c \"ls -alh\" test234.out"
173
+ xterm_bin = "/usr/bin/xterm"
174
+ return false unless File.exist? xterm_bin
175
+ command = "cd #{@output_path_txt.text} && #{xterm_bin} -hold -e \""
176
+ script_cmd = "#{sqlmap_command(file)}"
177
+ command << script_cmd
178
+ command << '"'
179
+ puts command
180
+ command
181
+ end
182
+
183
+ def win_command(file)
184
+ # start "sqlmap" /WAIT /D c:\tools dir
185
+ command = ""
186
+
187
+ out_file = file.gsub(/\.req/, ".out")
188
+ start_path = "#{@output_path_txt.text}"
189
+ start_path.gsub!(/\//,'\\')
190
+
191
+ script_cmd = "start \"SQLmap\" /D #{start_path} /WAIT cmd.exe /k \"#{sqlmap_command(file)}\""
192
+ command << script_cmd
193
+ command << '"'
194
+ puts command
195
+ command
196
+ end
197
+
198
+ def run_sqlmap(file)
199
+ command = case RUBY_PLATFORM
200
+ when /linux|bsd|solaris|hpux|darwin/
201
+ linux_command file
202
+ when /mswin|mingw|bccwin/
203
+ win_command file
204
+ end
205
+ Thread.new(command){ |cmd|
206
+ system(cmd)
207
+ }
208
+
209
+ end
210
+
211
+ def onAccept(sender, sel, event)
212
+ if @settings_tab.general.request.empty?
213
+ puts "No Request Defined!"
214
+ end
215
+
216
+ rf = create_request_file
217
+ puts "Start SQLMap with file #{rf}"
218
+ run_sqlmap(rf)
219
+ #getApp().stopModal(self, 1)
220
+ #self.hide()
221
+ #return 1
222
+
223
+ end
224
+
225
+ end
226
+ end
227
+ end
228
+ end