arachni 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (646) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +44 -0
  3. data/Gemfile +2 -4
  4. data/LICENSE.md +1 -1
  5. data/README.md +3 -2
  6. data/Rakefile +1 -1
  7. data/arachni.gemspec +26 -26
  8. data/bin/arachni +1 -1
  9. data/bin/arachni_console +1 -1
  10. data/bin/arachni_multi +1 -1
  11. data/bin/arachni_reporter +1 -1
  12. data/bin/arachni_reproduce +1 -1
  13. data/bin/arachni_rest_server +1 -1
  14. data/bin/arachni_restore +1 -1
  15. data/bin/arachni_rpc +1 -1
  16. data/bin/arachni_rpcd +1 -1
  17. data/bin/arachni_rpcd_monitor +1 -1
  18. data/bin/arachni_script +1 -1
  19. data/components/checks/active/code_injection.rb +1 -1
  20. data/components/checks/active/code_injection_php_input_wrapper.rb +1 -1
  21. data/components/checks/active/code_injection_timing.rb +1 -1
  22. data/components/checks/active/csrf.rb +7 -2
  23. data/components/checks/active/file_inclusion.rb +1 -1
  24. data/components/checks/active/ldap_injection.rb +1 -1
  25. data/components/checks/active/no_sql_injection.rb +1 -1
  26. data/components/checks/active/no_sql_injection_differential.rb +3 -3
  27. data/components/checks/active/os_cmd_injection.rb +1 -1
  28. data/components/checks/active/os_cmd_injection_timing.rb +1 -1
  29. data/components/checks/active/path_traversal.rb +1 -1
  30. data/components/checks/active/response_splitting.rb +1 -1
  31. data/components/checks/active/rfi.rb +1 -1
  32. data/components/checks/active/session_fixation.rb +1 -1
  33. data/components/checks/active/source_code_disclosure.rb +1 -1
  34. data/components/checks/active/sql_injection.rb +1 -1
  35. data/components/checks/active/sql_injection_differential.rb +3 -3
  36. data/components/checks/active/sql_injection_timing.rb +1 -1
  37. data/components/checks/active/trainer.rb +1 -1
  38. data/components/checks/active/unvalidated_redirect.rb +1 -1
  39. data/components/checks/active/unvalidated_redirect_dom.rb +1 -1
  40. data/components/checks/active/xpath_injection.rb +1 -1
  41. data/components/checks/active/xss.rb +4 -4
  42. data/components/checks/active/xss_dom.rb +1 -1
  43. data/components/checks/active/xss_dom_script_context.rb +1 -1
  44. data/components/checks/active/xss_event.rb +3 -3
  45. data/components/checks/active/xss_path.rb +1 -1
  46. data/components/checks/active/xss_script_context.rb +3 -3
  47. data/components/checks/active/xss_tag.rb +4 -3
  48. data/components/checks/active/xxe.rb +1 -1
  49. data/components/checks/passive/allowed_methods.rb +1 -1
  50. data/components/checks/passive/backdoors.rb +1 -1
  51. data/components/checks/passive/backup_directories.rb +1 -1
  52. data/components/checks/passive/backup_files.rb +2 -2
  53. data/components/checks/passive/common_admin_interfaces.rb +1 -1
  54. data/components/checks/passive/common_directories/directories.txt +1 -0
  55. data/components/checks/passive/common_directories.rb +1 -1
  56. data/components/checks/passive/common_files.rb +1 -1
  57. data/components/checks/passive/directory_listing.rb +1 -1
  58. data/components/checks/passive/grep/captcha.rb +1 -1
  59. data/components/checks/passive/grep/cookie_set_for_parent_domain.rb +1 -1
  60. data/components/checks/passive/grep/credit_card.rb +1 -1
  61. data/components/checks/passive/grep/cvs_svn_users.rb +1 -1
  62. data/components/checks/passive/grep/emails.rb +1 -1
  63. data/components/checks/passive/grep/form_upload.rb +1 -1
  64. data/components/checks/passive/grep/hsts.rb +1 -1
  65. data/components/checks/passive/grep/html_objects.rb +1 -1
  66. data/components/checks/passive/grep/http_only_cookies.rb +1 -1
  67. data/components/checks/passive/grep/insecure_cookies.rb +1 -1
  68. data/components/checks/passive/grep/insecure_cors_policy.rb +1 -1
  69. data/components/checks/passive/grep/mixed_resource.rb +1 -1
  70. data/components/checks/passive/grep/password_autocomplete.rb +1 -1
  71. data/components/checks/passive/grep/private_ip.rb +1 -1
  72. data/components/checks/passive/grep/ssn.rb +1 -1
  73. data/components/checks/passive/grep/unencrypted_password_forms.rb +1 -1
  74. data/components/checks/passive/grep/x_frame_options.rb +4 -4
  75. data/components/checks/passive/htaccess_limit.rb +1 -1
  76. data/components/checks/passive/http_put.rb +1 -1
  77. data/components/checks/passive/insecure_client_access_policy.rb +1 -1
  78. data/components/checks/passive/insecure_cross_domain_policy_access.rb +1 -1
  79. data/components/checks/passive/insecure_cross_domain_policy_headers.rb +1 -1
  80. data/components/checks/passive/interesting_responses.rb +1 -1
  81. data/components/checks/passive/localstart_asp.rb +1 -1
  82. data/components/checks/passive/origin_spoof_access_restriction_bypass.rb +1 -1
  83. data/components/checks/passive/webdav.rb +1 -1
  84. data/components/checks/passive/xst.rb +1 -1
  85. data/components/fingerprinters/frameworks/aspx_mvc.rb +1 -1
  86. data/components/fingerprinters/frameworks/cakephp.rb +1 -1
  87. data/components/fingerprinters/frameworks/cherrypy.rb +1 -1
  88. data/components/fingerprinters/frameworks/django.rb +1 -1
  89. data/components/fingerprinters/frameworks/jsf.rb +1 -1
  90. data/components/fingerprinters/frameworks/nette.rb +1 -1
  91. data/components/fingerprinters/frameworks/rack.rb +1 -1
  92. data/components/fingerprinters/frameworks/rails.rb +1 -1
  93. data/components/fingerprinters/frameworks/symfony.rb +1 -1
  94. data/components/fingerprinters/languages/asp.rb +1 -1
  95. data/components/fingerprinters/languages/aspx.rb +1 -1
  96. data/components/fingerprinters/languages/java.rb +1 -1
  97. data/components/fingerprinters/languages/php.rb +1 -1
  98. data/components/fingerprinters/languages/python.rb +1 -1
  99. data/components/fingerprinters/languages/ruby.rb +1 -1
  100. data/components/fingerprinters/os/bsd.rb +1 -1
  101. data/components/fingerprinters/os/linux.rb +1 -1
  102. data/components/fingerprinters/os/solaris.rb +1 -1
  103. data/components/fingerprinters/os/unix.rb +1 -1
  104. data/components/fingerprinters/os/windows.rb +1 -1
  105. data/components/fingerprinters/servers/apache.rb +1 -1
  106. data/components/fingerprinters/servers/gunicorn.rb +1 -1
  107. data/components/fingerprinters/servers/iis.rb +1 -1
  108. data/components/fingerprinters/servers/jetty.rb +1 -1
  109. data/components/fingerprinters/servers/nginx.rb +1 -1
  110. data/components/fingerprinters/servers/tomcat.rb +1 -1
  111. data/components/path_extractors/anchors.rb +1 -1
  112. data/components/path_extractors/areas.rb +1 -1
  113. data/components/path_extractors/comments.rb +1 -1
  114. data/components/path_extractors/data_url.rb +1 -1
  115. data/components/path_extractors/forms.rb +1 -1
  116. data/components/path_extractors/frames.rb +1 -1
  117. data/components/path_extractors/generic.rb +1 -1
  118. data/components/path_extractors/links.rb +1 -1
  119. data/components/path_extractors/meta_refresh.rb +1 -1
  120. data/components/path_extractors/scripts.rb +1 -1
  121. data/components/plugins/autologin.rb +1 -1
  122. data/components/plugins/beep_notify.rb +1 -1
  123. data/components/plugins/content_types.rb +1 -1
  124. data/components/plugins/cookie_collector.rb +1 -1
  125. data/components/plugins/debug/browser_cluster_job_monitor.rb +1 -1
  126. data/components/plugins/defaults/autothrottle.rb +1 -1
  127. data/components/plugins/defaults/healthmap.rb +2 -2
  128. data/components/plugins/defaults/meta/remedies/discovery.rb +1 -1
  129. data/components/plugins/defaults/meta/remedies/timing_attacks.rb +1 -1
  130. data/components/plugins/defaults/meta/uniformity.rb +1 -1
  131. data/components/plugins/email_notify.rb +1 -1
  132. data/components/plugins/exec.rb +1 -1
  133. data/components/plugins/form_dicattack.rb +1 -1
  134. data/components/plugins/headers_collector.rb +1 -1
  135. data/components/plugins/http_dicattack.rb +1 -1
  136. data/components/plugins/login_script.rb +1 -1
  137. data/components/plugins/metrics.rb +1 -1
  138. data/components/plugins/page_dump.rb +1 -1
  139. data/components/plugins/proxy/panel/verify_login_sequence.html.erb +1 -1
  140. data/components/plugins/proxy/template_scope.rb +1 -1
  141. data/components/plugins/proxy.rb +3 -2
  142. data/components/plugins/rate_limiter.rb +1 -1
  143. data/components/plugins/restrict_to_dom_state.rb +1 -1
  144. data/components/plugins/script.rb +1 -1
  145. data/components/plugins/uncommon_headers.rb +1 -1
  146. data/components/plugins/vector_collector.rb +1 -1
  147. data/components/plugins/vector_feed.rb +1 -1
  148. data/components/plugins/waf_detector.rb +1 -1
  149. data/components/plugins/webhook_notify.rb +1 -1
  150. data/components/reporters/ap.rb +1 -1
  151. data/components/reporters/html/default.erb +3 -1
  152. data/components/reporters/html.rb +4 -6
  153. data/components/reporters/json.rb +1 -1
  154. data/components/reporters/marshal.rb +1 -1
  155. data/components/reporters/plugin_formatters/html/autologin.rb +1 -1
  156. data/components/reporters/plugin_formatters/html/content_types.rb +1 -1
  157. data/components/reporters/plugin_formatters/html/cookie_collector.rb +1 -1
  158. data/components/reporters/plugin_formatters/html/exec.rb +1 -1
  159. data/components/reporters/plugin_formatters/html/form_dicattack.rb +1 -1
  160. data/components/reporters/plugin_formatters/html/healthmap.rb +1 -1
  161. data/components/reporters/plugin_formatters/html/http_dicattack.rb +1 -1
  162. data/components/reporters/plugin_formatters/html/login_script.rb +1 -1
  163. data/components/reporters/plugin_formatters/html/metrics.rb +1 -1
  164. data/components/reporters/plugin_formatters/html/uncommon_headers.rb +1 -1
  165. data/components/reporters/plugin_formatters/html/uniformity.rb +1 -1
  166. data/components/reporters/plugin_formatters/html/vector_collector.rb +1 -1
  167. data/components/reporters/plugin_formatters/html/waf_detector.rb +1 -1
  168. data/components/reporters/plugin_formatters/stdout/autologin.rb +1 -1
  169. data/components/reporters/plugin_formatters/stdout/content_types.rb +1 -1
  170. data/components/reporters/plugin_formatters/stdout/cookie_collector.rb +1 -1
  171. data/components/reporters/plugin_formatters/stdout/exec.rb +1 -1
  172. data/components/reporters/plugin_formatters/stdout/form_dicattack.rb +1 -1
  173. data/components/reporters/plugin_formatters/stdout/healthmap.rb +1 -1
  174. data/components/reporters/plugin_formatters/stdout/http_dicattack.rb +1 -1
  175. data/components/reporters/plugin_formatters/stdout/login_script.rb +1 -1
  176. data/components/reporters/plugin_formatters/stdout/metrics.rb +1 -1
  177. data/components/reporters/plugin_formatters/stdout/uncommon_headers.rb +1 -1
  178. data/components/reporters/plugin_formatters/stdout/uniformity.rb +1 -1
  179. data/components/reporters/plugin_formatters/stdout/vector_collector.rb +1 -1
  180. data/components/reporters/plugin_formatters/stdout/waf_detector.rb +1 -1
  181. data/components/reporters/plugin_formatters/xml/autologin.rb +1 -1
  182. data/components/reporters/plugin_formatters/xml/content_types.rb +1 -1
  183. data/components/reporters/plugin_formatters/xml/cookie_collector.rb +1 -1
  184. data/components/reporters/plugin_formatters/xml/exec.rb +1 -1
  185. data/components/reporters/plugin_formatters/xml/form_dicattack.rb +1 -1
  186. data/components/reporters/plugin_formatters/xml/healthmap.rb +1 -1
  187. data/components/reporters/plugin_formatters/xml/http_dicattack.rb +1 -1
  188. data/components/reporters/plugin_formatters/xml/login_script.rb +1 -1
  189. data/components/reporters/plugin_formatters/xml/metrics.rb +1 -1
  190. data/components/reporters/plugin_formatters/xml/uncommon_headers.rb +1 -1
  191. data/components/reporters/plugin_formatters/xml/uniformity.rb +1 -1
  192. data/components/reporters/plugin_formatters/xml/vector_collector.rb +1 -1
  193. data/components/reporters/plugin_formatters/xml/waf_detector.rb +1 -1
  194. data/components/reporters/stdout.rb +1 -1
  195. data/components/reporters/txt.rb +1 -1
  196. data/components/reporters/xml/schema.xsd +1 -0
  197. data/components/reporters/xml.rb +3 -3
  198. data/components/reporters/yaml.rb +1 -1
  199. data/lib/arachni/banner.rb +1 -1
  200. data/lib/arachni/browser/element_locator.rb +1 -1
  201. data/lib/arachni/browser/javascript/dom_monitor.rb +1 -1
  202. data/lib/arachni/browser/javascript/proxy/stub.rb +1 -1
  203. data/lib/arachni/browser/javascript/proxy.rb +1 -1
  204. data/lib/arachni/browser/javascript/scripts/dom_monitor.js +39 -11
  205. data/lib/arachni/browser/javascript/scripts/taint_tracer.js +41 -30
  206. data/lib/arachni/browser/javascript/taint_tracer/frame/called_function.rb +1 -1
  207. data/lib/arachni/browser/javascript/taint_tracer/frame.rb +1 -1
  208. data/lib/arachni/browser/javascript/taint_tracer/sink/base.rb +1 -1
  209. data/lib/arachni/browser/javascript/taint_tracer/sink/data_flow.rb +1 -1
  210. data/lib/arachni/browser/javascript/taint_tracer/sink/execution_flow.rb +1 -1
  211. data/lib/arachni/browser/javascript/taint_tracer.rb +1 -1
  212. data/lib/arachni/browser/javascript.rb +14 -29
  213. data/lib/arachni/browser.rb +132 -216
  214. data/lib/arachni/browser_cluster/job/result.rb +1 -1
  215. data/lib/arachni/browser_cluster/job.rb +1 -1
  216. data/lib/arachni/browser_cluster/jobs/browser_provider.rb +1 -1
  217. data/lib/arachni/browser_cluster/jobs/dom_exploration/event_trigger/result.rb +1 -1
  218. data/lib/arachni/browser_cluster/jobs/dom_exploration/event_trigger.rb +1 -1
  219. data/lib/arachni/browser_cluster/jobs/dom_exploration/result.rb +1 -1
  220. data/lib/arachni/browser_cluster/jobs/dom_exploration.rb +1 -1
  221. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger/result.rb +1 -1
  222. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
  223. data/lib/arachni/browser_cluster/jobs/taint_trace/result.rb +1 -1
  224. data/lib/arachni/browser_cluster/jobs/taint_trace.rb +1 -1
  225. data/lib/arachni/browser_cluster/worker.rb +11 -26
  226. data/lib/arachni/browser_cluster.rb +2 -3
  227. data/lib/arachni/check/auditor.rb +10 -5
  228. data/lib/arachni/check/base.rb +1 -1
  229. data/lib/arachni/check/manager.rb +1 -1
  230. data/lib/arachni/check.rb +1 -1
  231. data/lib/arachni/component/base.rb +1 -1
  232. data/lib/arachni/component/manager.rb +1 -1
  233. data/lib/arachni/component/options/address.rb +1 -1
  234. data/lib/arachni/component/options/base.rb +1 -1
  235. data/lib/arachni/component/options/bool.rb +1 -1
  236. data/lib/arachni/component/options/float.rb +1 -1
  237. data/lib/arachni/component/options/int.rb +1 -1
  238. data/lib/arachni/component/options/multiple_choice.rb +1 -1
  239. data/lib/arachni/component/options/object.rb +1 -1
  240. data/lib/arachni/component/options/path.rb +1 -1
  241. data/lib/arachni/component/options/port.rb +1 -1
  242. data/lib/arachni/component/options/string.rb +1 -1
  243. data/lib/arachni/component/options/url.rb +1 -1
  244. data/lib/arachni/component/options.rb +1 -1
  245. data/lib/arachni/component/output.rb +1 -1
  246. data/lib/arachni/component/utilities.rb +1 -1
  247. data/lib/arachni/component.rb +1 -1
  248. data/lib/arachni/data/framework/rpc.rb +2 -2
  249. data/lib/arachni/data/framework.rb +2 -2
  250. data/lib/arachni/data/issues.rb +1 -1
  251. data/lib/arachni/data/plugins.rb +1 -1
  252. data/lib/arachni/data/session.rb +1 -1
  253. data/lib/arachni/data.rb +1 -1
  254. data/lib/arachni/element/base.rb +1 -1
  255. data/lib/arachni/element/body.rb +1 -1
  256. data/lib/arachni/element/capabilities/analyzable/differential.rb +1 -1
  257. data/lib/arachni/element/capabilities/analyzable/signature.rb +1 -1
  258. data/lib/arachni/element/capabilities/analyzable/timeout.rb +1 -1
  259. data/lib/arachni/element/capabilities/analyzable.rb +1 -1
  260. data/lib/arachni/element/capabilities/auditable/buffered.rb +1 -1
  261. data/lib/arachni/element/capabilities/auditable/line_buffered.rb +1 -1
  262. data/lib/arachni/element/capabilities/auditable.rb +1 -1
  263. data/lib/arachni/element/capabilities/dom_only.rb +1 -1
  264. data/lib/arachni/element/capabilities/inputtable.rb +1 -1
  265. data/lib/arachni/element/capabilities/mutable.rb +1 -1
  266. data/lib/arachni/element/capabilities/refreshable.rb +1 -1
  267. data/lib/arachni/element/capabilities/submittable.rb +1 -1
  268. data/lib/arachni/element/capabilities/with_auditor/output.rb +1 -1
  269. data/lib/arachni/element/capabilities/with_auditor.rb +1 -1
  270. data/lib/arachni/element/capabilities/with_dom.rb +1 -1
  271. data/lib/arachni/element/capabilities/with_node.rb +1 -1
  272. data/lib/arachni/element/capabilities/with_scope/scope.rb +1 -1
  273. data/lib/arachni/element/capabilities/with_scope.rb +1 -1
  274. data/lib/arachni/element/capabilities/with_source.rb +1 -1
  275. data/lib/arachni/element/cookie/capabilities/inputtable.rb +1 -1
  276. data/lib/arachni/element/cookie/capabilities/mutable.rb +1 -1
  277. data/lib/arachni/element/cookie/capabilities/with_dom.rb +1 -1
  278. data/lib/arachni/element/cookie/dom.rb +1 -1
  279. data/lib/arachni/element/cookie.rb +1 -1
  280. data/lib/arachni/element/dom/capabilities/auditable.rb +1 -1
  281. data/lib/arachni/element/dom/capabilities/inputtable.rb +1 -1
  282. data/lib/arachni/element/dom/capabilities/locatable.rb +1 -1
  283. data/lib/arachni/element/dom/capabilities/mutable.rb +1 -1
  284. data/lib/arachni/element/dom/capabilities/submittable.rb +1 -1
  285. data/lib/arachni/element/dom.rb +1 -1
  286. data/lib/arachni/element/form/capabilities/auditable.rb +1 -1
  287. data/lib/arachni/element/form/capabilities/mutable.rb +1 -1
  288. data/lib/arachni/element/form/capabilities/submittable.rb +1 -1
  289. data/lib/arachni/element/form/capabilities/with_dom.rb +1 -1
  290. data/lib/arachni/element/form/dom.rb +1 -1
  291. data/lib/arachni/element/form.rb +1 -1
  292. data/lib/arachni/element/generic_dom.rb +1 -1
  293. data/lib/arachni/element/header/capabilities/inputtable.rb +1 -1
  294. data/lib/arachni/element/header/capabilities/mutable.rb +1 -1
  295. data/lib/arachni/element/header.rb +1 -1
  296. data/lib/arachni/element/json/capabilities/inputtable.rb +1 -1
  297. data/lib/arachni/element/json/capabilities/mutable.rb +1 -1
  298. data/lib/arachni/element/json.rb +1 -1
  299. data/lib/arachni/element/link/capabilities/auditable.rb +1 -1
  300. data/lib/arachni/element/link/capabilities/submittable.rb +1 -1
  301. data/lib/arachni/element/link/capabilities/with_dom.rb +1 -1
  302. data/lib/arachni/element/link/dom/capabilities/submittable.rb +1 -1
  303. data/lib/arachni/element/link/dom.rb +1 -1
  304. data/lib/arachni/element/link.rb +1 -1
  305. data/lib/arachni/element/link_template/capabilities/auditable.rb +1 -1
  306. data/lib/arachni/element/link_template/capabilities/inputtable.rb +1 -1
  307. data/lib/arachni/element/link_template/capabilities/with_dom.rb +1 -1
  308. data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +1 -1
  309. data/lib/arachni/element/link_template/dom.rb +1 -1
  310. data/lib/arachni/element/link_template.rb +1 -1
  311. data/lib/arachni/element/nested_cookie/capabilities/submittable.rb +35 -0
  312. data/lib/arachni/element/nested_cookie.rb +370 -0
  313. data/lib/arachni/element/path.rb +1 -1
  314. data/lib/arachni/element/server.rb +1 -1
  315. data/lib/arachni/element/ui_form/dom.rb +1 -1
  316. data/lib/arachni/element/ui_form.rb +1 -1
  317. data/lib/arachni/element/ui_input/dom.rb +1 -1
  318. data/lib/arachni/element/ui_input.rb +1 -1
  319. data/lib/arachni/element/xml/capabilities/inputtable.rb +1 -1
  320. data/lib/arachni/element/xml/capabilities/mutable.rb +1 -1
  321. data/lib/arachni/element/xml.rb +1 -1
  322. data/lib/arachni/element_filter.rb +1 -1
  323. data/lib/arachni/error.rb +1 -1
  324. data/lib/arachni/ethon/easy.rb +1 -1
  325. data/lib/arachni/framework/parts/audit.rb +1 -1
  326. data/lib/arachni/framework/parts/browser.rb +1 -1
  327. data/lib/arachni/framework/parts/check.rb +1 -1
  328. data/lib/arachni/framework/parts/data.rb +1 -1
  329. data/lib/arachni/framework/parts/platform.rb +1 -1
  330. data/lib/arachni/framework/parts/plugin.rb +1 -1
  331. data/lib/arachni/framework/parts/report.rb +1 -1
  332. data/lib/arachni/framework/parts/scope.rb +1 -1
  333. data/lib/arachni/framework/parts/state.rb +1 -1
  334. data/lib/arachni/framework.rb +1 -1
  335. data/lib/arachni/http/client/dynamic_404_handler.rb +1 -1
  336. data/lib/arachni/http/client.rb +7 -5
  337. data/lib/arachni/http/cookie_jar.rb +1 -1
  338. data/lib/arachni/http/headers.rb +1 -1
  339. data/lib/arachni/http/message/scope.rb +1 -1
  340. data/lib/arachni/http/message.rb +1 -1
  341. data/lib/arachni/http/proxy_server/connection.rb +3 -8
  342. data/lib/arachni/http/proxy_server/ssl-interceptor-cacert.pem +18 -32
  343. data/lib/arachni/http/proxy_server/ssl-interceptor-cakey.pem +28 -49
  344. data/lib/arachni/http/proxy_server/ssl_interceptor.rb +7 -6
  345. data/lib/arachni/http/proxy_server/tunnel.rb +1 -1
  346. data/lib/arachni/http/proxy_server.rb +1 -1
  347. data/lib/arachni/http/request/scope.rb +1 -1
  348. data/lib/arachni/http/request.rb +8 -2
  349. data/lib/arachni/http/response/scope.rb +1 -1
  350. data/lib/arachni/http/response.rb +1 -1
  351. data/lib/arachni/http.rb +1 -1
  352. data/lib/arachni/issue/severity/base.rb +1 -1
  353. data/lib/arachni/issue/severity.rb +1 -1
  354. data/lib/arachni/issue.rb +1 -1
  355. data/lib/arachni/option_group.rb +1 -1
  356. data/lib/arachni/option_groups/audit.rb +11 -2
  357. data/lib/arachni/option_groups/browser_cluster.rb +28 -4
  358. data/lib/arachni/option_groups/datastore.rb +1 -1
  359. data/lib/arachni/option_groups/dispatcher.rb +1 -1
  360. data/lib/arachni/option_groups/http.rb +5 -5
  361. data/lib/arachni/option_groups/input.rb +1 -1
  362. data/lib/arachni/option_groups/output.rb +1 -1
  363. data/lib/arachni/option_groups/paths.rb +1 -1
  364. data/lib/arachni/option_groups/rpc.rb +1 -1
  365. data/lib/arachni/option_groups/scope.rb +46 -4
  366. data/lib/arachni/option_groups/session.rb +1 -1
  367. data/lib/arachni/option_groups/snapshot.rb +1 -1
  368. data/lib/arachni/option_groups.rb +1 -1
  369. data/lib/arachni/options.rb +1 -1
  370. data/lib/arachni/page/dom/transition.rb +1 -1
  371. data/lib/arachni/page/dom.rb +1 -1
  372. data/lib/arachni/page/scope.rb +1 -1
  373. data/lib/arachni/page.rb +3 -3
  374. data/lib/arachni/parser/document.rb +1 -1
  375. data/lib/arachni/parser/extractors/base.rb +1 -1
  376. data/lib/arachni/parser/nodes/base.rb +1 -1
  377. data/lib/arachni/parser/nodes/comment.rb +1 -1
  378. data/lib/arachni/parser/nodes/element/with_attributes/attributes.rb +2 -2
  379. data/lib/arachni/parser/nodes/element/with_attributes.rb +1 -1
  380. data/lib/arachni/parser/nodes/element.rb +1 -1
  381. data/lib/arachni/parser/nodes/text.rb +1 -1
  382. data/lib/arachni/parser/nodes/with_value.rb +2 -2
  383. data/lib/arachni/parser/sax.rb +2 -1
  384. data/lib/arachni/parser/with_children/search.rb +1 -1
  385. data/lib/arachni/parser/with_children.rb +1 -1
  386. data/lib/arachni/parser.rb +31 -2
  387. data/lib/arachni/platform/fingerprinter.rb +1 -1
  388. data/lib/arachni/platform/list.rb +1 -1
  389. data/lib/arachni/platform/manager.rb +1 -1
  390. data/lib/arachni/platform.rb +1 -1
  391. data/lib/arachni/plugin/base.rb +1 -1
  392. data/lib/arachni/plugin/formatter.rb +1 -1
  393. data/lib/arachni/plugin/manager.rb +1 -1
  394. data/lib/arachni/plugin.rb +1 -1
  395. data/lib/arachni/processes/dispatchers.rb +1 -1
  396. data/lib/arachni/processes/executables/base.rb +2 -1
  397. data/lib/arachni/processes/helpers/dispatchers.rb +1 -1
  398. data/lib/arachni/processes/helpers/instances.rb +1 -1
  399. data/lib/arachni/processes/helpers/processes.rb +1 -1
  400. data/lib/arachni/processes/helpers.rb +1 -1
  401. data/lib/arachni/processes/instances.rb +1 -1
  402. data/lib/arachni/processes/manager.rb +9 -5
  403. data/lib/arachni/processes.rb +1 -1
  404. data/lib/arachni/report.rb +1 -1
  405. data/lib/arachni/reporter/base.rb +1 -1
  406. data/lib/arachni/reporter/formatter_manager.rb +1 -1
  407. data/lib/arachni/reporter/manager.rb +1 -1
  408. data/lib/arachni/reporter/options.rb +1 -10
  409. data/lib/arachni/reporter.rb +1 -1
  410. data/lib/arachni/rest/server/instance_helpers.rb +10 -1
  411. data/lib/arachni/rest/server.rb +7 -1
  412. data/lib/arachni/rpc/client/base.rb +1 -1
  413. data/lib/arachni/rpc/client/dispatcher.rb +1 -1
  414. data/lib/arachni/rpc/client/instance/framework.rb +1 -1
  415. data/lib/arachni/rpc/client/instance/service.rb +1 -1
  416. data/lib/arachni/rpc/client/instance.rb +1 -1
  417. data/lib/arachni/rpc/serializer.rb +1 -1
  418. data/lib/arachni/rpc/server/active_options.rb +1 -1
  419. data/lib/arachni/rpc/server/base.rb +1 -1
  420. data/lib/arachni/rpc/server/check/manager.rb +1 -1
  421. data/lib/arachni/rpc/server/dispatcher/node.rb +1 -1
  422. data/lib/arachni/rpc/server/dispatcher/service.rb +1 -1
  423. data/lib/arachni/rpc/server/dispatcher.rb +1 -1
  424. data/lib/arachni/rpc/server/framework/distributor.rb +1 -1
  425. data/lib/arachni/rpc/server/framework/master.rb +1 -1
  426. data/lib/arachni/rpc/server/framework/multi_instance.rb +1 -1
  427. data/lib/arachni/rpc/server/framework/slave.rb +1 -1
  428. data/lib/arachni/rpc/server/framework.rb +1 -1
  429. data/lib/arachni/rpc/server/instance.rb +1 -1
  430. data/lib/arachni/rpc/server/output.rb +1 -1
  431. data/lib/arachni/rpc/server/plugin/manager.rb +1 -1
  432. data/lib/arachni/ruby/array.rb +1 -1
  433. data/lib/arachni/ruby/hash.rb +1 -1
  434. data/lib/arachni/ruby/object.rb +1 -1
  435. data/lib/arachni/ruby/set.rb +1 -1
  436. data/lib/arachni/ruby/string.rb +1 -1
  437. data/lib/arachni/ruby/webrick/cookie.rb +1 -1
  438. data/lib/arachni/ruby/webrick/httprequest.rb +1 -1
  439. data/lib/arachni/ruby/webrick.rb +1 -1
  440. data/lib/arachni/ruby.rb +1 -1
  441. data/lib/arachni/scope.rb +1 -1
  442. data/lib/arachni/selenium/webdriver/remote/typhoeus.rb +6 -16
  443. data/lib/arachni/session.rb +1 -1
  444. data/lib/arachni/snapshot.rb +1 -1
  445. data/lib/arachni/state/audit.rb +1 -1
  446. data/lib/arachni/state/element_filter.rb +1 -1
  447. data/lib/arachni/state/framework/rpc.rb +1 -1
  448. data/lib/arachni/state/framework.rb +1 -1
  449. data/lib/arachni/state/http.rb +1 -1
  450. data/lib/arachni/state/options.rb +1 -1
  451. data/lib/arachni/state/plugins.rb +1 -1
  452. data/lib/arachni/state.rb +1 -1
  453. data/lib/arachni/support/buffer/autoflush.rb +1 -1
  454. data/lib/arachni/support/buffer/base.rb +1 -1
  455. data/lib/arachni/support/buffer.rb +1 -1
  456. data/lib/arachni/support/cache/base.rb +1 -1
  457. data/lib/arachni/support/cache/least_cost_replacement.rb +1 -1
  458. data/lib/arachni/support/cache/least_recently_pushed.rb +1 -1
  459. data/lib/arachni/support/cache/least_recently_used.rb +1 -1
  460. data/lib/arachni/support/cache/preference.rb +1 -1
  461. data/lib/arachni/support/cache/random_replacement.rb +1 -1
  462. data/lib/arachni/support/cache.rb +1 -1
  463. data/lib/arachni/support/crypto/rsa_aes_cbc.rb +1 -1
  464. data/lib/arachni/support/crypto.rb +1 -1
  465. data/lib/arachni/support/database/base.rb +15 -7
  466. data/lib/arachni/support/database/hash.rb +1 -1
  467. data/lib/arachni/support/database/queue.rb +1 -1
  468. data/lib/arachni/support/database.rb +1 -1
  469. data/lib/arachni/support/glob.rb +1 -1
  470. data/lib/arachni/support/lookup/base.rb +1 -1
  471. data/lib/arachni/support/lookup/hash_set.rb +1 -1
  472. data/lib/arachni/support/lookup/moolb.rb +1 -1
  473. data/lib/arachni/support/lookup.rb +1 -1
  474. data/lib/arachni/support/mixins/observable.rb +1 -1
  475. data/lib/arachni/support/mixins/terminal.rb +1 -1
  476. data/lib/arachni/support/mixins.rb +1 -1
  477. data/lib/arachni/support/profiler.rb +1 -1
  478. data/lib/arachni/support/signature.rb +1 -1
  479. data/lib/arachni/support.rb +1 -1
  480. data/lib/arachni/trainer.rb +1 -1
  481. data/lib/arachni/ui/foo/output.rb +1 -1
  482. data/lib/arachni/uri/scope.rb +1 -1
  483. data/lib/arachni/uri.rb +6 -9
  484. data/lib/arachni/utilities.rb +1 -1
  485. data/lib/arachni/version.rb +1 -1
  486. data/lib/arachni.rb +1 -1
  487. data/lib/version +1 -1
  488. data/spec/arachni/browser/javascript/dom_monitor_spec.rb +84 -60
  489. data/spec/arachni/browser/javascript/proxy_spec.rb +0 -10
  490. data/spec/arachni/browser/javascript/taint_tracer_spec.rb +68 -90
  491. data/spec/arachni/browser/javascript_spec.rb +10 -9
  492. data/spec/arachni/browser_cluster/worker_spec.rb +23 -55
  493. data/spec/arachni/browser_spec.rb +160 -158
  494. data/spec/arachni/data/framework/rpc_spec.rb +1 -1
  495. data/spec/arachni/data/framework_spec.rb +1 -1
  496. data/spec/arachni/element/cookie_spec.rb +1 -1
  497. data/spec/arachni/element/nested_cookie_spec.rb +687 -0
  498. data/spec/arachni/element/ui_form_spec.rb +2 -2
  499. data/spec/arachni/element/ui_input_spec.rb +1 -1
  500. data/spec/arachni/http/client_spec.rb +14 -26
  501. data/spec/arachni/http/cookie_jar_spec.rb +2 -2
  502. data/spec/arachni/http/proxy_server_spec.rb +2 -0
  503. data/spec/arachni/http/request_spec.rb +3 -2
  504. data/spec/arachni/option_groups/browser_cluster_spec.rb +17 -0
  505. data/spec/arachni/option_groups/http_spec.rb +6 -6
  506. data/spec/arachni/option_groups/scope_spec.rb +1 -6
  507. data/spec/arachni/page_spec.rb +3 -2
  508. data/spec/arachni/parser_spec.rb +45 -1
  509. data/spec/arachni/reporter/options_spec.rb +0 -14
  510. data/spec/arachni/rest/server_spec.rb +39 -2
  511. data/spec/arachni/uri_spec.rb +1 -1
  512. data/spec/components/checks/active/code_injection_spec.rb +12 -7
  513. data/spec/components/checks/active/code_injection_timing_spec.rb +4 -3
  514. data/spec/components/checks/active/file_inclusion_spec.rb +15 -10
  515. data/spec/components/checks/active/ldap_injection_spec.rb +5 -4
  516. data/spec/components/checks/active/no_sql_injection_differential_spec.rb +1 -1
  517. data/spec/components/checks/active/no_sql_injection_spec.rb +5 -4
  518. data/spec/components/checks/active/os_cmd_injection_spec.rb +6 -4
  519. data/spec/components/checks/active/os_cmd_injection_timing_spec.rb +4 -3
  520. data/spec/components/checks/active/path_traversal_spec.rb +10 -7
  521. data/spec/components/checks/active/response_splitting_spec.rb +5 -4
  522. data/spec/components/checks/active/rfi_spec.rb +9 -8
  523. data/spec/components/checks/active/source_code_disclosure_spec.rb +33 -10
  524. data/spec/components/checks/active/sql_injection_differential_spec.rb +1 -1
  525. data/spec/components/checks/active/sql_injection_spec.rb +53 -36
  526. data/spec/components/checks/active/sql_injection_timing_spec.rb +11 -8
  527. data/spec/components/checks/active/unvalidated_redirect_spec.rb +9 -8
  528. data/spec/components/checks/active/xpath_injection_spec.rb +5 -4
  529. data/spec/components/checks/active/xss_dom_script_context_spec.rb +5 -5
  530. data/spec/components/checks/active/xss_event_spec.rb +5 -3
  531. data/spec/components/checks/active/xss_script_context_spec.rb +4 -3
  532. data/spec/components/checks/active/xss_spec.rb +5 -4
  533. data/spec/components/checks/active/xss_tag_spec.rb +11 -3
  534. data/spec/components/checks/passive/backup_files_spec.rb +0 -4
  535. data/spec/components/checks/passive/grep/x_frame_options_spec.rb +6 -0
  536. data/spec/spec_helper.rb +2 -1
  537. data/spec/support/factories/http/response.rb +1 -1
  538. data/spec/support/fixtures/check_with_invalid_platforms/with_invalid_platforms.rb +1 -1
  539. data/spec/support/fixtures/checks/test.rb +4 -4
  540. data/spec/support/fixtures/checks/test2.rb +1 -1
  541. data/spec/support/fixtures/checks/test3.rb +1 -1
  542. data/spec/support/fixtures/cookies.txt +1 -1
  543. data/spec/support/fixtures/executables/node.rb +2 -3
  544. data/spec/support/fixtures/fingerprinters/test.rb +1 -1
  545. data/spec/support/fixtures/nested_cookies.txt +11 -0
  546. data/spec/support/fixtures/plugins/bad.rb +1 -1
  547. data/spec/support/fixtures/plugins/defaults/default.rb +1 -1
  548. data/spec/support/fixtures/plugins/distributable.rb +1 -1
  549. data/spec/support/fixtures/plugins/loop.rb +1 -1
  550. data/spec/support/fixtures/plugins/suspendable.rb +1 -1
  551. data/spec/support/fixtures/plugins/wait.rb +1 -1
  552. data/spec/support/fixtures/plugins/with_options.rb +1 -1
  553. data/spec/support/fixtures/plugins_with_priorities/p0.rb +1 -1
  554. data/spec/support/fixtures/plugins_with_priorities/p00.rb +1 -1
  555. data/spec/support/fixtures/plugins_with_priorities/p1.rb +1 -1
  556. data/spec/support/fixtures/plugins_with_priorities/p2.rb +1 -1
  557. data/spec/support/fixtures/plugins_with_priorities/p22.rb +1 -1
  558. data/spec/support/fixtures/plugins_with_priorities/p222.rb +1 -1
  559. data/spec/support/fixtures/plugins_with_priorities/p_nil.rb +1 -1
  560. data/spec/support/fixtures/plugins_with_priorities/p_nil2.rb +1 -1
  561. data/spec/support/fixtures/report.afr +0 -0
  562. data/spec/support/fixtures/reporters/base_spec/plugin_formatters/with_formatters/foobar.rb +1 -1
  563. data/spec/support/fixtures/reporters/base_spec/with_formatters.rb +1 -1
  564. data/spec/support/fixtures/reporters/base_spec/with_outfile.rb +1 -1
  565. data/spec/support/fixtures/reporters/base_spec/without_outfile.rb +1 -1
  566. data/spec/support/fixtures/reporters/manager_spec/afr.rb +1 -1
  567. data/spec/support/fixtures/reporters/manager_spec/error.rb +1 -1
  568. data/spec/support/fixtures/reporters/manager_spec/foo.rb +1 -1
  569. data/spec/support/fixtures/run_check/body.rb +1 -1
  570. data/spec/support/fixtures/run_check/cookies.rb +1 -1
  571. data/spec/support/fixtures/run_check/empty.rb +1 -1
  572. data/spec/support/fixtures/run_check/flch.rb +1 -1
  573. data/spec/support/fixtures/run_check/forms.rb +1 -1
  574. data/spec/support/fixtures/run_check/headers.rb +1 -1
  575. data/spec/support/fixtures/run_check/links.rb +1 -1
  576. data/spec/support/fixtures/run_check/nil.rb +1 -1
  577. data/spec/support/fixtures/run_check/path.rb +1 -1
  578. data/spec/support/fixtures/run_check/server.rb +1 -1
  579. data/spec/support/fixtures/signature_check/signature.rb +1 -1
  580. data/spec/support/fixtures/wait_check/wait.rb +1 -1
  581. data/spec/support/helpers/framework.rb +1 -1
  582. data/spec/support/helpers/misc.rb +1 -1
  583. data/spec/support/helpers/paths.rb +1 -1
  584. data/spec/support/helpers/requires.rb +1 -1
  585. data/spec/support/helpers/resets.rb +1 -1
  586. data/spec/support/helpers/web_server.rb +1 -1
  587. data/spec/support/lib/factory.rb +1 -1
  588. data/spec/support/lib/web_server_client.rb +1 -1
  589. data/spec/support/lib/web_server_dispatcher.rb +1 -1
  590. data/spec/support/lib/web_server_manager.rb +1 -1
  591. data/spec/support/servers/arachni/check/auditor.rb +1 -0
  592. data/spec/support/servers/arachni/element/form/form_dom.rb +1 -0
  593. data/spec/support/servers/arachni/element/form.rb +4 -4
  594. data/spec/support/servers/arachni/element/header.rb +1 -1
  595. data/spec/support/servers/arachni/element/nested_cookie.rb +84 -0
  596. data/spec/support/servers/arachni/parser.rb +6 -0
  597. data/spec/support/servers/checks/active/code_injection.rb +18 -0
  598. data/spec/support/servers/checks/active/code_injection_timing.rb +18 -0
  599. data/spec/support/servers/checks/active/file_inclusion.rb +19 -1
  600. data/spec/support/servers/checks/active/ldap_injection.rb +18 -0
  601. data/spec/support/servers/checks/active/no_sql_injection.rb +27 -0
  602. data/spec/support/servers/checks/active/no_sql_injection_differential.rb +19 -0
  603. data/spec/support/servers/checks/active/os_cmd_injection.rb +29 -0
  604. data/spec/support/servers/checks/active/os_cmd_injection_timing.rb +18 -1
  605. data/spec/support/servers/checks/active/path_traversal.rb +30 -3
  606. data/spec/support/servers/checks/active/response_splitting.rb +30 -1
  607. data/spec/support/servers/checks/active/rfi.rb +30 -2
  608. data/spec/support/servers/checks/active/session_fixation.rb +1 -3
  609. data/spec/support/servers/checks/active/source_code_disclosure.rb +16 -0
  610. data/spec/support/servers/checks/active/sql_injection.rb +27 -0
  611. data/spec/support/servers/checks/active/sql_injection_differential.rb +19 -0
  612. data/spec/support/servers/checks/active/sql_injection_timing.rb +19 -1
  613. data/spec/support/servers/checks/active/unvalidated_redirect.rb +40 -1
  614. data/spec/support/servers/checks/active/xpath_injection.rb +27 -0
  615. data/spec/support/servers/checks/active/xss.rb +40 -0
  616. data/spec/support/servers/checks/active/xss_event.rb +22 -1
  617. data/spec/support/servers/checks/active/xss_script_context.rb +18 -0
  618. data/spec/support/servers/checks/active/xss_tag.rb +40 -0
  619. data/spec/support/servers/checks/passive/grep/x_frame_options.rb +5 -0
  620. data/spec/support/shared/check.rb +1 -0
  621. data/spec/support/shared/element/capabilities/auditable/buffered.rb +2 -2
  622. data/spec/support/shared/element/capabilities/auditable/line_buffered.rb +2 -2
  623. data/spec/support/shared/element/capabilities/auditable.rb +2 -2
  624. data/ui/cli/framework/option_parser.rb +44 -8
  625. data/ui/cli/framework.rb +6 -5
  626. data/ui/cli/option_parser.rb +1 -1
  627. data/ui/cli/output.rb +1 -1
  628. data/ui/cli/reporter/option_parser.rb +1 -1
  629. data/ui/cli/reporter.rb +1 -1
  630. data/ui/cli/reproduce/option_parser.rb +1 -1
  631. data/ui/cli/reproduce.rb +1 -1
  632. data/ui/cli/rest/server/option_parser.rb +1 -1
  633. data/ui/cli/rest/server.rb +1 -1
  634. data/ui/cli/restored_framework/option_parser.rb +1 -1
  635. data/ui/cli/restored_framework.rb +1 -1
  636. data/ui/cli/rpc/client/dispatcher_monitor/option_parser.rb +1 -1
  637. data/ui/cli/rpc/client/dispatcher_monitor.rb +1 -1
  638. data/ui/cli/rpc/client/instance.rb +7 -4
  639. data/ui/cli/rpc/client/local/option_parser.rb +1 -1
  640. data/ui/cli/rpc/client/local.rb +1 -1
  641. data/ui/cli/rpc/client/remote/option_parser.rb +1 -1
  642. data/ui/cli/rpc/client/remote.rb +1 -1
  643. data/ui/cli/rpc/server/dispatcher/option_parser.rb +1 -1
  644. data/ui/cli/rpc/server/dispatcher.rb +1 -1
  645. data/ui/cli/utilities.rb +1 -1
  646. metadata +85 -64
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -0,0 +1,35 @@
1
+ =begin
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
+
4
+ This file is part of the Arachni Framework project and is subject to
5
+ redistribution and commercial restrictions. Please see the Arachni Framework
6
+ web site for more information on licensing and terms of use.
7
+ =end
8
+
9
+ module Arachni::Element
10
+ class NestedCookie
11
+ module Capabilities
12
+
13
+ # @author Tasos "Zapotek" Laskos <tasos.laskos@arachni-scanner.com>
14
+ module Submittable
15
+ include Arachni::Element::Capabilities::Submittable
16
+
17
+ def submit( options = {}, &block )
18
+ options = options.dup
19
+ options[:raw_cookies] = [self]
20
+ options[:follow_location] = true if !options.include?( :follow_location )
21
+
22
+ @auditor ||= options.delete( :auditor )
23
+
24
+ options[:performer] ||= self
25
+
26
+ options[:raw_parameters] ||= raw_inputs
27
+
28
+ http_request( options, &block )
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,370 @@
1
+ =begin
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
+
4
+ This file is part of the Arachni Framework project and is subject to
5
+ redistribution and commercial restrictions. Please see the Arachni Framework
6
+ web site for more information on licensing and terms of use.
7
+ =end
8
+
9
+ require_relative 'cookie'
10
+
11
+ module Arachni::Element
12
+
13
+ # @author Tasos "Zapotek" Laskos <tasos.laskos@arachni-scanner.com>
14
+ class NestedCookie < Base
15
+
16
+ # Load and include all cookie-specific capability overrides.
17
+ lib = "#{File.dirname( __FILE__ )}/#{File.basename(__FILE__, '.rb')}/capabilities/**/*.rb"
18
+ Dir.glob( lib ).each { |f| require f }
19
+
20
+ include Arachni::Element::Capabilities::Inputtable
21
+ include Arachni::Element::Capabilities::Mutable
22
+ include Arachni::Element::Capabilities::Auditable
23
+ include Arachni::Element::Capabilities::Auditable::Buffered
24
+ include Arachni::Element::Capabilities::Auditable::LineBuffered
25
+ include Arachni::Element::Capabilities::Analyzable
26
+ include Arachni::Element::Capabilities::WithSource
27
+
28
+ include Capabilities::Submittable
29
+
30
+ # Default cookie values
31
+ DEFAULT = Cookie::DEFAULT
32
+
33
+ attr_reader :data
34
+
35
+ # @param [Hash] options
36
+ # For options see {DEFAULT}, with the following extras:
37
+ # @option options [String] :url
38
+ # URL of the page which created the cookie -- **required**.
39
+ # @option options [String] :action
40
+ # URL of the page to submit the cookie -- defaults to `:url`.
41
+ # @option options [Hash] :inputs
42
+ # Allows you to pass cookie data as a `name => value` pair instead of the
43
+ # more complex {DEFAULT} structure.
44
+ def initialize( options )
45
+ @data = {}
46
+ super( options )
47
+
48
+ if options[:name] && options[:value]
49
+ options[:name] = options[:name].to_s.recode
50
+ options[:value] = options[:value].to_s.recode
51
+
52
+ self.inputs = self.class.parse_inputs( options[:value] )
53
+ @data.merge!( options )
54
+ else
55
+ self.inputs = (options[:inputs] || {}).dup
56
+ end
57
+
58
+ @data.merge!( DEFAULT.merge( @data ) )
59
+ @data[:value] = decode( @data[:value].to_s ) rescue @data[:value].to_s
60
+
61
+ parsed_uri = uri_parse( action )
62
+ if !@data[:path]
63
+ path = parsed_uri.path
64
+ path = !path.empty? ? path : '/'
65
+ @data[:path] = path
66
+ end
67
+
68
+ if @data[:expires] && !@data[:expires].is_a?( Time )
69
+ @data[:expires] = Time.parse( @data[:expires].to_s ) rescue nil
70
+ end
71
+
72
+ @data[:domain] ||= parsed_uri.host
73
+
74
+ @default_inputs = self.inputs.dup.freeze
75
+ end
76
+
77
+ # Indicates whether the cookie must be only sent over an encrypted channel.
78
+ #
79
+ # @return [Bool]
80
+ def secure?
81
+ @data[:secure] == true
82
+ end
83
+
84
+ # Indicates whether the cookie is safe from modification from client-side code.
85
+ #
86
+ # @return [Bool]
87
+ def http_only?
88
+ @data[:httponly] == true
89
+ end
90
+
91
+ # Indicates whether the cookie is to be discarded at the end of the session.
92
+ #
93
+ # Doesn't play a role during the scan but it can provide useful info to checks and such.
94
+ #
95
+ # @return [Bool]
96
+ def session?
97
+ @data[:expires].nil?
98
+ end
99
+
100
+ # @return [Time, NilClass]
101
+ # Expiration `Time` of the cookie or `nil` if it doesn't have one
102
+ # (i.e. is a session cookie).
103
+ def expires_at
104
+ @data[:expires]
105
+ end
106
+
107
+ # Indicates whether or not the cookie has expired.
108
+ #
109
+ # @param [Time] time
110
+ # To compare against.
111
+ #
112
+ # @return [Boolean]
113
+ def expired?( time = Time.now )
114
+ expires_at != nil && time > expires_at
115
+ end
116
+
117
+ # @return [Hash]
118
+ # Simple representation of the cookie as a hash -- with the cookie name as
119
+ # `key` and the cookie value as `value`.
120
+ def simple
121
+ self.inputs.dup
122
+ end
123
+
124
+ # Uses the method name as a key to cookie attributes in {DEFAULT}.
125
+ def method_missing( sym, *args, &block )
126
+ return @data[sym] if @data.include? sym
127
+ super( sym, *args, &block )
128
+ end
129
+
130
+ # Used by {#method_missing} to determine if it should process the call.
131
+ #
132
+ # @return [Bool]
133
+ #
134
+ def respond_to?( *args )
135
+ (@data && @data.include?( args.first )) || super
136
+ end
137
+
138
+ def value
139
+ self.inputs.map { |n, v| "#{encode( n )}=#{encode( v )}" }.join( '&' )
140
+ end
141
+
142
+ # @return [String]
143
+ # To be used in a `Cookie` HTTP request header.
144
+ def to_s
145
+ # Only do encoding if we're dealing with updated inputs, otherwise pass
146
+ # along the raw data as set in order to deal with server-side decoding
147
+ # quirks.
148
+ if updated? || !(raw_name || raw_value )
149
+ "#{encode( name )}=#{value}"
150
+ else
151
+ "#{raw_name}=#{raw_value}"
152
+ end
153
+ end
154
+
155
+ # @return [String]
156
+ # Converts self to a `Set-Cookie` string.
157
+ def to_set_cookie
158
+ set_cookie = "#{self.to_s}"
159
+
160
+ @data.each do |k, v|
161
+ next if !v || !Cookie.keep_for_set_cookie.include?( k )
162
+
163
+ set_cookie << "; #{k.capitalize}=#{v}"
164
+ end
165
+
166
+ set_cookie << '; Secure' if secure?
167
+ set_cookie << '; HttpOnly' if http_only?
168
+
169
+ # If we want to set a cookie for only the domain that responded to the
170
+ # request, Set-Cookie should not specify a domain.
171
+ #
172
+ # If we want the cookie to apply to all subdomains, we need to either
173
+ # specify a dot-prefixed domain or a domain, the browser client will
174
+ # prefix the dot anyways.
175
+ #
176
+ # http://stackoverflow.com/questions/1062963/how-do-browser-cookie-domains-work/1063760#1063760
177
+ set_cookie << "; Domain=#{domain}" if domain.start_with?( '.' )
178
+
179
+ set_cookie
180
+ end
181
+
182
+ # @see .encode
183
+ def encode( *args )
184
+ self.class.encode( *args )
185
+ end
186
+
187
+ # @see .decode
188
+ def decode( str )
189
+ self.class.decode( str )
190
+ end
191
+
192
+ def to_rpc_data
193
+ h = super
194
+
195
+ if h['initialization_options']['expires']
196
+ h['initialization_options']['expires'] =
197
+ h['initialization_options']['expires'].to_s
198
+ end
199
+
200
+ h['data'] = h['data'].my_stringify_keys(false)
201
+ if h['data']['expires']
202
+ h['data']['expires'] = h['data']['expires'].to_s
203
+ end
204
+
205
+ h
206
+ end
207
+
208
+ class <<self
209
+
210
+ def type
211
+ :nested_cookie
212
+ end
213
+
214
+ def from_rpc_data( data )
215
+ if data['initialization_options']['expires']
216
+ data['initialization_options']['expires'] =
217
+ Time.parse( data['initialization_options']['expires'] )
218
+ end
219
+
220
+ if data['data']['expires']
221
+ data['data']['expires'] = Time.parse( data['data']['expires'] )
222
+ end
223
+
224
+ data['data'] = data['data'].my_symbolize_keys(false)
225
+
226
+ super data
227
+ end
228
+
229
+ # Parses a Netscape Cookie-jar into an Array of {Cookie}.
230
+ #
231
+ # @param [String] url
232
+ # {HTTP::Request} URL.
233
+ # @param [String] filepath
234
+ # Netscape HTTP cookiejar file.
235
+ #
236
+ # @return [Array<NestedCookie>]
237
+ #
238
+ # @see http://curl.haxx.se/rfc/cookie_spec.html
239
+ def from_file( url, filepath )
240
+ from_cookies( Cookie.from_file( url, filepath ) )
241
+ end
242
+
243
+ # Extracts cookies from an HTTP {Arachni::HTTP::Response response}.
244
+ #
245
+ # @param [Arachni::HTTP::Response] response
246
+ #
247
+ # @return [Array<NestedCookie>]
248
+ #
249
+ # @see .from_parser
250
+ # @see .from_headers
251
+ def from_response( response )
252
+ from_parser( Arachni::Parser.new( response ) ) +
253
+ from_headers( response.url, response.headers )
254
+ end
255
+
256
+ # Extracts cookies from a document based on `Set-Cookie` `http-equiv`
257
+ # meta tags.
258
+ #
259
+ # @param [Arachni::Parser] parser
260
+ #
261
+ # @return [Array<NestedCookie>]
262
+ #
263
+ # @see .parse_set_cookie
264
+ def from_parser( parser )
265
+ from_cookies( Cookie.from_parser( parser ) )
266
+ end
267
+
268
+ def in_html?( html )
269
+ html =~ /set-cookie.*&/i
270
+ end
271
+
272
+ # Extracts cookies from the `Set-Cookie` HTTP response header field.
273
+ #
274
+ # @param [String] url
275
+ # {HTTP::Request} URL.
276
+ # @param [Hash] headers
277
+ #
278
+ # @return [Array<NestedCookie>]
279
+ #
280
+ # @see .forms_set_cookie
281
+ def from_headers( url, headers )
282
+ from_cookies( Cookie.from_headers( url, headers ) )
283
+ end
284
+
285
+ # Parses the `Set-Cookie` header value into cookie elements.
286
+ #
287
+ # @param [String] url
288
+ # {HTTP::Request} URL.
289
+ # @param [Hash] str
290
+ # `Set-Cookie` string
291
+ #
292
+ # @return [Array<NestedCookie>]
293
+ def from_set_cookie( url, str )
294
+ from_cookies( Cookie.from_set_cookie( url, str ) )
295
+ end
296
+ alias :parse_set_cookie :from_set_cookie
297
+
298
+ # Parses a string formatted for the `Cookie` HTTP request header field
299
+ # into cookie elements.
300
+ #
301
+ # @param [String] url
302
+ # {HTTP::Request} URL.
303
+ # @param [Hash] string
304
+ # `Cookie` string.
305
+ #
306
+ # @return [Array<NestedCookie>]
307
+ def from_string( url, string )
308
+ from_cookies( Cookie.from_string( url, string ) )
309
+ end
310
+
311
+ def from_cookies( cookies )
312
+ [cookies].flatten.compact.map do |cookie|
313
+ next if !cookie.value.include?( '=' )
314
+
315
+ inputs = parse_inputs( cookie.value )
316
+ next if inputs.empty?
317
+
318
+ new({
319
+ url: cookie.url,
320
+ action: cookie.action,
321
+ method: cookie.method,
322
+ inputs: inputs,
323
+ source: cookie.source
324
+ }.merge( cookie.data ))
325
+ end.compact
326
+ end
327
+
328
+ def parse_inputs( value )
329
+ value.to_s.split( '&' ).inject( {} ) do |h, pair|
330
+ name, value = pair.split( '=', 2 )
331
+ h[decode( name.to_s )] = decode( value.to_s )
332
+ h
333
+ end
334
+ end
335
+
336
+ # Encodes a {String}'s reserved characters in order to prepare it for
337
+ # the `Cookie` header field.
338
+ #
339
+ # @param [String] str
340
+ #
341
+ # @return [String]
342
+ def encode( str )
343
+ Cookie.encode( str )
344
+ end
345
+
346
+ # Decodes a {String} encoded for the `Cookie` header field.
347
+ #
348
+ # @param [String] str
349
+ #
350
+ # @return [String]
351
+ def decode( str )
352
+ Cookie.decode( str )
353
+ end
354
+
355
+ end
356
+
357
+ private
358
+
359
+ def http_request( opts = {}, &block )
360
+ opts[:cookies] = opts.delete( :parameters )
361
+
362
+ self.method == :get ?
363
+ http.get( self.action, opts, &block ) :
364
+ http.post( self.action, opts, &block )
365
+ end
366
+
367
+ end
368
+ end
369
+
370
+ Arachni::NestedCookie = Arachni::Element::NestedCookie
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
data/lib/arachni/error.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework