arachni 1.3.2 → 1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +108 -0
- data/Gemfile +2 -6
- data/LICENSE.md +1 -1
- data/README.md +34 -16
- data/Rakefile +1 -1
- data/arachni.gemspec +28 -20
- data/bin/arachni +1 -1
- data/bin/arachni_console +1 -1
- data/bin/arachni_multi +1 -1
- data/bin/arachni_reporter +1 -1
- data/bin/arachni_rest_server +13 -0
- data/bin/arachni_restore +1 -1
- data/bin/arachni_rpc +1 -1
- data/bin/arachni_rpcd +1 -1
- data/bin/arachni_rpcd_monitor +1 -1
- data/bin/arachni_script +1 -1
- data/components/checks/active/code_injection.rb +8 -10
- data/components/checks/active/code_injection_php_input_wrapper.rb +5 -6
- data/components/checks/active/code_injection_timing.rb +1 -1
- data/components/checks/active/csrf.rb +1 -1
- data/components/checks/active/file_inclusion.rb +20 -26
- data/components/checks/active/ldap_injection.rb +4 -5
- data/components/checks/active/no_sql_injection.rb +11 -20
- data/components/checks/active/no_sql_injection/substrings/mongodb +1 -0
- data/components/checks/active/no_sql_injection_differential.rb +3 -4
- data/components/checks/active/os_cmd_injection.rb +5 -9
- data/components/checks/active/os_cmd_injection_timing.rb +1 -1
- data/components/checks/active/path_traversal.rb +4 -17
- data/components/checks/active/response_splitting.rb +8 -2
- data/components/checks/active/rfi.rb +4 -5
- data/components/checks/active/session_fixation.rb +9 -3
- data/components/checks/active/source_code_disclosure.rb +5 -20
- data/components/checks/active/sql_injection.rb +30 -18
- data/components/checks/active/sql_injection/{regexp_ignore.txt → ignore_substrings} +0 -0
- data/components/checks/active/sql_injection/regexps/db2.yaml +2 -0
- data/components/checks/active/sql_injection/regexps/frontbase.yaml +1 -0
- data/components/checks/active/sql_injection/regexps/informix.yaml +1 -0
- data/components/checks/active/sql_injection/regexps/ingres.yaml +2 -0
- data/components/checks/active/sql_injection/regexps/maxdb.yaml +2 -0
- data/components/checks/active/sql_injection/regexps/mssql.yaml +8 -0
- data/components/checks/active/sql_injection/regexps/mysql.yaml +4 -0
- data/components/checks/active/sql_injection/regexps/oracle.yaml +4 -0
- data/components/checks/active/sql_injection/regexps/pgsql.yaml +3 -0
- data/components/checks/active/sql_injection/regexps/sqlite.yaml +2 -0
- data/components/checks/active/sql_injection/regexps/sybase.yaml +2 -0
- data/components/checks/active/sql_injection/substrings/access +3 -0
- data/components/checks/active/sql_injection/substrings/db2 +2 -0
- data/components/checks/active/sql_injection/{patterns → substrings}/emc +1 -1
- data/components/checks/active/sql_injection/{patterns → substrings}/firebird +0 -1
- data/components/checks/active/sql_injection/substrings/hsqldb +1 -0
- data/components/checks/active/sql_injection/{patterns → substrings}/informix +1 -2
- data/components/checks/active/sql_injection/substrings/ingres +1 -0
- data/components/checks/active/sql_injection/{patterns → substrings}/interbase +0 -0
- data/components/checks/active/sql_injection/substrings/mssql +17 -0
- data/components/checks/active/sql_injection/{patterns → substrings}/mysql +3 -6
- data/components/checks/active/sql_injection/substrings/oracle +2 -0
- data/components/checks/active/sql_injection/{patterns → substrings}/pgsql +3 -6
- data/components/checks/active/sql_injection/substrings/sqlite +3 -0
- data/components/checks/active/sql_injection/substrings/sybase +1 -0
- data/components/checks/active/sql_injection_differential.rb +5 -7
- data/components/checks/active/sql_injection_differential/payloads.txt +1 -1
- data/components/checks/active/sql_injection_timing.rb +1 -1
- data/components/checks/active/trainer.rb +5 -4
- data/components/checks/active/unvalidated_redirect.rb +1 -1
- data/components/checks/active/unvalidated_redirect_dom.rb +1 -1
- data/components/checks/active/xpath_injection.rb +3 -4
- data/components/checks/active/xss.rb +33 -12
- data/components/checks/active/xss_dom.rb +7 -4
- data/components/checks/active/xss_dom_script_context.rb +1 -1
- data/components/checks/active/xss_event.rb +43 -20
- data/components/checks/active/xss_path.rb +5 -4
- data/components/checks/active/xss_script_context.rb +41 -11
- data/components/checks/active/xss_tag.rb +14 -15
- data/components/checks/active/xxe.rb +5 -16
- data/components/checks/passive/allowed_methods.rb +1 -1
- data/components/checks/passive/backdoors.rb +4 -2
- data/components/checks/passive/backup_directories.rb +4 -2
- data/components/checks/passive/backup_files.rb +4 -2
- data/components/checks/passive/common_admin_interfaces.rb +4 -3
- data/components/checks/passive/common_directories.rb +3 -1
- data/components/checks/passive/common_files.rb +3 -1
- data/components/checks/passive/directory_listing.rb +4 -4
- data/components/checks/passive/grep/captcha.rb +1 -1
- data/components/checks/passive/grep/cookie_set_for_parent_domain.rb +1 -1
- data/components/checks/passive/grep/credit_card.rb +5 -7
- data/components/checks/passive/grep/cvs_svn_users.rb +1 -1
- data/components/checks/passive/grep/emails.rb +135 -8
- data/components/checks/passive/grep/form_upload.rb +1 -1
- data/components/checks/passive/grep/hsts.rb +4 -3
- data/components/checks/passive/grep/html_objects.rb +1 -1
- data/components/checks/passive/grep/http_only_cookies.rb +5 -3
- data/components/checks/passive/grep/insecure_cookies.rb +5 -3
- data/components/checks/passive/grep/insecure_cors_policy.rb +1 -1
- data/components/checks/passive/grep/mixed_resource.rb +1 -1
- data/components/checks/passive/grep/password_autocomplete.rb +1 -1
- data/components/checks/passive/grep/private_ip.rb +1 -1
- data/components/checks/passive/grep/ssn.rb +6 -3
- data/components/checks/passive/grep/unencrypted_password_forms.rb +1 -1
- data/components/checks/passive/grep/x_frame_options.rb +4 -3
- data/components/checks/passive/htaccess_limit.rb +1 -1
- data/components/checks/passive/http_put.rb +1 -1
- data/components/checks/passive/insecure_client_access_policy.rb +2 -2
- data/components/checks/passive/insecure_cross_domain_policy_access.rb +2 -2
- data/components/checks/passive/insecure_cross_domain_policy_headers.rb +2 -2
- data/components/checks/passive/interesting_responses.rb +1 -1
- data/components/checks/passive/localstart_asp.rb +1 -1
- data/components/checks/passive/origin_spoof_access_restriction_bypass.rb +1 -1
- data/components/checks/passive/webdav.rb +1 -1
- data/components/checks/passive/xst.rb +1 -1
- data/components/fingerprinters/frameworks/aspx_mvc.rb +1 -1
- data/components/fingerprinters/frameworks/cakephp.rb +1 -1
- data/components/fingerprinters/frameworks/cherrypy.rb +1 -1
- data/components/fingerprinters/frameworks/django.rb +1 -1
- data/components/fingerprinters/frameworks/jsf.rb +1 -1
- data/components/fingerprinters/frameworks/nette.rb +1 -1
- data/components/fingerprinters/frameworks/rack.rb +1 -1
- data/components/fingerprinters/frameworks/rails.rb +1 -1
- data/components/fingerprinters/frameworks/symfony.rb +1 -1
- data/components/fingerprinters/languages/asp.rb +1 -1
- data/components/fingerprinters/languages/aspx.rb +1 -1
- data/components/fingerprinters/languages/java.rb +1 -1
- data/components/fingerprinters/languages/php.rb +1 -1
- data/components/fingerprinters/languages/python.rb +1 -1
- data/components/fingerprinters/languages/ruby.rb +1 -1
- data/components/fingerprinters/os/bsd.rb +1 -1
- data/components/fingerprinters/os/linux.rb +1 -1
- data/components/fingerprinters/os/solaris.rb +1 -1
- data/components/fingerprinters/os/unix.rb +1 -1
- data/components/fingerprinters/os/windows.rb +1 -1
- data/components/fingerprinters/servers/apache.rb +1 -1
- data/components/fingerprinters/servers/gunicorn.rb +1 -1
- data/components/fingerprinters/servers/iis.rb +1 -1
- data/components/fingerprinters/servers/jetty.rb +1 -1
- data/components/fingerprinters/servers/nginx.rb +1 -1
- data/components/fingerprinters/servers/tomcat.rb +1 -1
- data/components/path_extractors/anchors.rb +1 -1
- data/components/path_extractors/areas.rb +1 -1
- data/components/path_extractors/comments.rb +1 -1
- data/components/path_extractors/data_url.rb +1 -1
- data/components/path_extractors/forms.rb +1 -1
- data/components/path_extractors/frames.rb +1 -1
- data/components/path_extractors/generic.rb +1 -1
- data/components/path_extractors/links.rb +1 -1
- data/components/path_extractors/meta_refresh.rb +3 -3
- data/components/path_extractors/scripts.rb +1 -1
- data/components/plugins/autologin.rb +16 -24
- data/components/plugins/beep_notify.rb +1 -1
- data/components/plugins/content_types.rb +1 -1
- data/components/plugins/cookie_collector.rb +1 -1
- data/components/plugins/defaults/autothrottle.rb +1 -1
- data/components/plugins/defaults/healthmap.rb +1 -1
- data/components/plugins/defaults/meta/remedies/discovery.rb +10 -9
- data/components/plugins/defaults/meta/remedies/timing_attacks.rb +1 -1
- data/components/plugins/defaults/meta/uniformity.rb +1 -1
- data/components/plugins/email_notify.rb +3 -5
- data/components/plugins/exec.rb +1 -1
- data/components/plugins/form_dicattack.rb +1 -1
- data/components/plugins/headers_collector.rb +1 -1
- data/components/plugins/http_dicattack.rb +1 -1
- data/components/plugins/login_script.rb +47 -22
- data/components/plugins/metrics.rb +1 -1
- data/components/plugins/proxy.rb +69 -44
- data/components/plugins/proxy/panel/help.html.erb +1 -18
- data/components/plugins/proxy/panel/inspect.html.erb +4 -3
- data/components/plugins/proxy/panel/page_accordion.html.erb +78 -43
- data/components/plugins/proxy/panel/panel.html.erb +2 -7
- data/components/plugins/proxy/template_scope.rb +1 -1
- data/components/plugins/restrict_to_dom_state.rb +3 -15
- data/components/plugins/script.rb +1 -1
- data/components/plugins/uncommon_headers.rb +1 -1
- data/components/plugins/vector_collector.rb +1 -1
- data/components/plugins/vector_feed.rb +3 -11
- data/components/plugins/waf_detector.rb +1 -1
- data/components/reporters/ap.rb +1 -1
- data/components/reporters/html.rb +2 -2
- data/components/reporters/json.rb +1 -1
- data/components/reporters/marshal.rb +1 -1
- data/components/reporters/plugin_formatters/html/autologin.rb +1 -1
- data/components/reporters/plugin_formatters/html/content_types.rb +1 -1
- data/components/reporters/plugin_formatters/html/cookie_collector.rb +1 -1
- data/components/reporters/plugin_formatters/html/exec.rb +1 -1
- data/components/reporters/plugin_formatters/html/form_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/html/healthmap.rb +1 -1
- data/components/reporters/plugin_formatters/html/http_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/html/login_script.rb +1 -1
- data/components/reporters/plugin_formatters/html/metrics.rb +1 -1
- data/components/reporters/plugin_formatters/html/uncommon_headers.rb +1 -1
- data/components/reporters/plugin_formatters/html/uniformity.rb +1 -1
- data/components/reporters/plugin_formatters/html/vector_collector.rb +1 -1
- data/components/reporters/plugin_formatters/html/waf_detector.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/autologin.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/content_types.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/cookie_collector.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/exec.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/form_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/healthmap.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/http_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/login_script.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/metrics.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/uncommon_headers.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/uniformity.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/vector_collector.rb +1 -1
- data/components/reporters/plugin_formatters/stdout/waf_detector.rb +1 -1
- data/components/reporters/plugin_formatters/xml/autologin.rb +1 -1
- data/components/reporters/plugin_formatters/xml/content_types.rb +1 -1
- data/components/reporters/plugin_formatters/xml/cookie_collector.rb +1 -1
- data/components/reporters/plugin_formatters/xml/exec.rb +1 -1
- data/components/reporters/plugin_formatters/xml/form_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/xml/healthmap.rb +1 -1
- data/components/reporters/plugin_formatters/xml/http_dicattack.rb +1 -1
- data/components/reporters/plugin_formatters/xml/login_script.rb +1 -1
- data/components/reporters/plugin_formatters/xml/metrics.rb +1 -1
- data/components/reporters/plugin_formatters/xml/uncommon_headers.rb +1 -1
- data/components/reporters/plugin_formatters/xml/uniformity.rb +1 -1
- data/components/reporters/plugin_formatters/xml/vector_collector.rb +1 -1
- data/components/reporters/plugin_formatters/xml/waf_detector.rb +1 -1
- data/components/reporters/stdout.rb +1 -1
- data/components/reporters/txt.rb +1 -1
- data/components/reporters/xml.rb +29 -4
- data/components/reporters/yaml.rb +1 -1
- data/lib/arachni.rb +48 -3
- data/lib/arachni/banner.rb +1 -1
- data/lib/arachni/browser.rb +601 -358
- data/lib/arachni/browser/element_locator.rb +25 -6
- data/lib/arachni/browser/javascript.rb +103 -35
- data/lib/arachni/browser/javascript/dom_monitor.rb +1 -1
- data/lib/arachni/browser/javascript/proxy.rb +28 -16
- data/lib/arachni/browser/javascript/proxy/stub.rb +1 -1
- data/lib/arachni/browser/javascript/scripts/dom_monitor.js +138 -67
- data/lib/arachni/browser/javascript/scripts/polyfills.js +28 -0
- data/lib/arachni/browser/javascript/scripts/taint_tracer.js +27 -6
- data/lib/arachni/browser/javascript/taint_tracer.rb +1 -1
- data/lib/arachni/browser/javascript/taint_tracer/frame.rb +1 -1
- data/lib/arachni/browser/javascript/taint_tracer/frame/called_function.rb +1 -1
- data/lib/arachni/browser/javascript/taint_tracer/sink/base.rb +1 -1
- data/lib/arachni/browser/javascript/taint_tracer/sink/data_flow.rb +1 -1
- data/lib/arachni/browser/javascript/taint_tracer/sink/execution_flow.rb +1 -1
- data/lib/arachni/browser_cluster.rb +10 -14
- data/lib/arachni/browser_cluster/job.rb +1 -1
- data/lib/arachni/browser_cluster/job/result.rb +1 -1
- data/lib/arachni/browser_cluster/jobs/browser_provider.rb +1 -1
- data/lib/arachni/browser_cluster/jobs/{resource_exploration.rb → dom_exploration.rb} +5 -5
- data/lib/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/event_trigger.rb +7 -4
- data/lib/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/event_trigger/result.rb +3 -3
- data/lib/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/result.rb +2 -2
- data/lib/arachni/browser_cluster/jobs/taint_trace.rb +3 -3
- data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +2 -2
- data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger/result.rb +2 -2
- data/lib/arachni/browser_cluster/jobs/taint_trace/result.rb +1 -1
- data/lib/arachni/browser_cluster/worker.rb +12 -40
- data/lib/arachni/check.rb +1 -1
- data/lib/arachni/check/auditor.rb +15 -1
- data/lib/arachni/check/base.rb +1 -1
- data/lib/arachni/check/manager.rb +1 -1
- data/lib/arachni/component.rb +1 -1
- data/lib/arachni/component/base.rb +5 -5
- data/lib/arachni/component/manager.rb +39 -13
- data/lib/arachni/component/options.rb +1 -1
- data/lib/arachni/component/options/address.rb +1 -1
- data/lib/arachni/component/options/base.rb +1 -1
- data/lib/arachni/component/options/bool.rb +1 -1
- data/lib/arachni/component/options/float.rb +1 -1
- data/lib/arachni/component/options/int.rb +1 -1
- data/lib/arachni/component/options/multiple_choice.rb +1 -1
- data/lib/arachni/component/options/object.rb +1 -1
- data/lib/arachni/component/options/path.rb +1 -1
- data/lib/arachni/component/options/port.rb +1 -1
- data/lib/arachni/component/options/string.rb +1 -1
- data/lib/arachni/component/options/url.rb +1 -1
- data/lib/arachni/component/output.rb +1 -1
- data/lib/arachni/component/utilities.rb +1 -1
- data/lib/arachni/data.rb +1 -1
- data/lib/arachni/data/framework.rb +1 -1
- data/lib/arachni/data/framework/rpc.rb +1 -1
- data/lib/arachni/data/issues.rb +1 -1
- data/lib/arachni/data/plugins.rb +1 -1
- data/lib/arachni/data/session.rb +1 -1
- data/lib/arachni/element/base.rb +19 -5
- data/lib/arachni/element/body.rb +1 -1
- data/lib/arachni/element/capabilities/analyzable.rb +1 -1
- data/lib/arachni/element/capabilities/analyzable/differential.rb +15 -5
- data/lib/arachni/element/capabilities/analyzable/signature.rb +147 -89
- data/lib/arachni/element/capabilities/analyzable/timeout.rb +43 -16
- data/lib/arachni/element/capabilities/auditable.rb +20 -15
- data/lib/arachni/element/capabilities/dom_only.rb +5 -4
- data/lib/arachni/element/capabilities/inputtable.rb +62 -12
- data/lib/arachni/element/capabilities/mutable.rb +74 -13
- data/lib/arachni/element/capabilities/refreshable.rb +1 -1
- data/lib/arachni/element/capabilities/submittable.rb +5 -2
- data/lib/arachni/element/capabilities/with_auditor.rb +1 -1
- data/lib/arachni/element/capabilities/with_auditor/output.rb +5 -5
- data/lib/arachni/element/capabilities/with_dom.rb +1 -1
- data/lib/arachni/element/capabilities/with_node.rb +2 -2
- data/lib/arachni/element/capabilities/with_scope.rb +1 -1
- data/lib/arachni/element/capabilities/with_scope/scope.rb +1 -1
- data/lib/arachni/element/capabilities/with_source.rb +4 -4
- data/lib/arachni/element/cookie.rb +57 -34
- data/lib/arachni/element/cookie/capabilities/inputtable.rb +1 -1
- data/lib/arachni/element/cookie/capabilities/mutable.rb +10 -1
- data/lib/arachni/element/cookie/capabilities/with_dom.rb +1 -1
- data/lib/arachni/element/cookie/dom.rb +1 -1
- data/lib/arachni/element/dom.rb +1 -15
- data/lib/arachni/element/dom/capabilities/auditable.rb +1 -1
- data/lib/arachni/element/dom/capabilities/inputtable.rb +1 -1
- data/lib/arachni/element/dom/capabilities/locatable.rb +29 -0
- data/lib/arachni/element/dom/capabilities/mutable.rb +11 -1
- data/lib/arachni/element/dom/capabilities/submittable.rb +2 -2
- data/lib/arachni/element/form.rb +33 -14
- data/lib/arachni/element/form/capabilities/auditable.rb +1 -1
- data/lib/arachni/element/form/capabilities/mutable.rb +18 -17
- data/lib/arachni/element/form/capabilities/submittable.rb +1 -1
- data/lib/arachni/element/form/capabilities/with_dom.rb +2 -1
- data/lib/arachni/element/form/dom.rb +3 -2
- data/lib/arachni/element/generic_dom.rb +1 -1
- data/lib/arachni/element/header.rb +16 -4
- data/lib/arachni/element/header/capabilities/inputtable.rb +1 -1
- data/lib/arachni/element/header/capabilities/mutable.rb +11 -1
- data/lib/arachni/element/json.rb +2 -2
- data/lib/arachni/element/json/capabilities/inputtable.rb +1 -1
- data/lib/arachni/element/json/capabilities/mutable.rb +8 -2
- data/lib/arachni/element/link.rb +14 -7
- data/lib/arachni/element/link/capabilities/auditable.rb +1 -1
- data/lib/arachni/element/link/capabilities/submittable.rb +1 -1
- data/lib/arachni/element/link/capabilities/with_dom.rb +8 -1
- data/lib/arachni/element/link/dom.rb +2 -1
- data/lib/arachni/element/link/dom/capabilities/submittable.rb +1 -1
- data/lib/arachni/element/link_template.rb +8 -3
- data/lib/arachni/element/link_template/capabilities/auditable.rb +1 -1
- data/lib/arachni/element/link_template/capabilities/inputtable.rb +1 -1
- data/lib/arachni/element/link_template/capabilities/with_dom.rb +1 -1
- data/lib/arachni/element/link_template/dom.rb +2 -1
- data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +1 -1
- data/lib/arachni/element/path.rb +1 -1
- data/lib/arachni/element/server.rb +3 -3
- data/lib/arachni/element/ui_form.rb +24 -21
- data/lib/arachni/element/ui_form/dom.rb +12 -3
- data/lib/arachni/element/ui_input.rb +17 -11
- data/lib/arachni/element/{input → ui_input}/dom.rb +11 -2
- data/lib/arachni/element/xml.rb +3 -3
- data/lib/arachni/element/xml/capabilities/inputtable.rb +7 -1
- data/lib/arachni/element/xml/capabilities/mutable.rb +7 -13
- data/lib/arachni/element_filter.rb +1 -1
- data/lib/arachni/error.rb +1 -1
- data/lib/arachni/ethon/easy.rb +1 -1
- data/lib/arachni/framework.rb +2 -5
- data/lib/arachni/framework/parts/audit.rb +8 -2
- data/lib/arachni/framework/parts/browser.rb +8 -9
- data/lib/arachni/framework/parts/check.rb +2 -6
- data/lib/arachni/framework/parts/data.rb +23 -8
- data/lib/arachni/framework/parts/platform.rb +1 -1
- data/lib/arachni/framework/parts/plugin.rb +2 -8
- data/lib/arachni/framework/parts/report.rb +3 -9
- data/lib/arachni/framework/parts/scope.rb +1 -1
- data/lib/arachni/framework/parts/state.rb +8 -8
- data/lib/arachni/http.rb +1 -1
- data/lib/arachni/http/client.rb +72 -68
- data/lib/arachni/http/client/dynamic_404_handler.rb +85 -60
- data/lib/arachni/http/cookie_jar.rb +48 -27
- data/lib/arachni/http/headers.rb +4 -3
- data/lib/arachni/http/message.rb +17 -3
- data/lib/arachni/http/message/scope.rb +1 -1
- data/lib/arachni/http/proxy_server.rb +46 -344
- data/lib/arachni/http/proxy_server/connection.rb +316 -0
- data/lib/arachni/http/proxy_server/ssl_interceptor.rb +102 -0
- data/lib/arachni/http/proxy_server/tunnel.rb +54 -0
- data/lib/arachni/http/request.rb +126 -29
- data/lib/arachni/http/request/scope.rb +1 -1
- data/lib/arachni/http/response.rb +42 -12
- data/lib/arachni/http/response/scope.rb +1 -1
- data/lib/arachni/issue.rb +2 -2
- data/lib/arachni/issue/severity.rb +1 -1
- data/lib/arachni/issue/severity/base.rb +1 -1
- data/lib/arachni/option_group.rb +1 -1
- data/lib/arachni/option_groups.rb +1 -1
- data/lib/arachni/option_groups/audit.rb +20 -4
- data/lib/arachni/option_groups/browser_cluster.rb +8 -4
- data/lib/arachni/option_groups/datastore.rb +1 -1
- data/lib/arachni/option_groups/dispatcher.rb +1 -1
- data/lib/arachni/option_groups/http.rb +2 -2
- data/lib/arachni/option_groups/input.rb +6 -3
- data/lib/arachni/option_groups/output.rb +1 -1
- data/lib/arachni/option_groups/paths.rb +10 -3
- data/lib/arachni/option_groups/rpc.rb +1 -1
- data/lib/arachni/option_groups/scope.rb +35 -6
- data/lib/arachni/option_groups/session.rb +1 -1
- data/lib/arachni/option_groups/snapshot.rb +1 -1
- data/lib/arachni/options.rb +1 -1
- data/lib/arachni/page.rb +26 -12
- data/lib/arachni/page/dom.rb +29 -22
- data/lib/arachni/page/dom/transition.rb +2 -2
- data/lib/arachni/page/scope.rb +1 -1
- data/lib/arachni/parser.rb +42 -5
- data/lib/arachni/platform.rb +1 -1
- data/lib/arachni/platform/fingerprinter.rb +1 -1
- data/lib/arachni/platform/list.rb +1 -1
- data/lib/arachni/platform/manager.rb +2 -2
- data/lib/arachni/plugin.rb +1 -1
- data/lib/arachni/plugin/base.rb +1 -1
- data/lib/arachni/plugin/formatter.rb +1 -1
- data/lib/arachni/plugin/manager.rb +7 -13
- data/lib/arachni/processes.rb +1 -1
- data/lib/arachni/processes/dispatchers.rb +2 -2
- data/lib/arachni/processes/executables/base.rb +45 -4
- data/lib/arachni/processes/executables/browser.rb +91 -0
- data/lib/arachni/processes/executables/rest_service.rb +14 -0
- data/lib/arachni/processes/helpers.rb +1 -1
- data/lib/arachni/processes/helpers/dispatchers.rb +1 -1
- data/lib/arachni/processes/helpers/instances.rb +1 -1
- data/lib/arachni/processes/helpers/processes.rb +1 -1
- data/lib/arachni/processes/instances.rb +5 -5
- data/lib/arachni/processes/manager.rb +68 -9
- data/lib/arachni/report.rb +1 -1
- data/lib/arachni/reporter.rb +1 -1
- data/lib/arachni/reporter/base.rb +1 -1
- data/lib/arachni/reporter/formatter_manager.rb +4 -2
- data/lib/arachni/reporter/manager.rb +3 -2
- data/lib/arachni/reporter/options.rb +1 -1
- data/lib/arachni/rest/server.rb +231 -0
- data/lib/arachni/rest/server/instance_helpers.rb +37 -0
- data/lib/arachni/rpc/client/base.rb +1 -1
- data/lib/arachni/rpc/client/dispatcher.rb +1 -1
- data/lib/arachni/rpc/client/instance.rb +1 -1
- data/lib/arachni/rpc/client/instance/framework.rb +1 -1
- data/lib/arachni/rpc/client/instance/service.rb +1 -1
- data/lib/arachni/rpc/serializer.rb +1 -1
- data/lib/arachni/rpc/server/active_options.rb +20 -3
- data/lib/arachni/rpc/server/base.rb +1 -1
- data/lib/arachni/rpc/server/check/manager.rb +1 -1
- data/lib/arachni/rpc/server/dispatcher.rb +4 -4
- data/lib/arachni/rpc/server/dispatcher/node.rb +1 -1
- data/lib/arachni/rpc/server/dispatcher/service.rb +1 -1
- data/lib/arachni/rpc/server/framework.rb +3 -1
- data/lib/arachni/rpc/server/framework/distributor.rb +1 -1
- data/lib/arachni/rpc/server/framework/master.rb +1 -1
- data/lib/arachni/rpc/server/framework/multi_instance.rb +1 -1
- data/lib/arachni/rpc/server/framework/slave.rb +1 -1
- data/lib/arachni/rpc/server/instance.rb +1 -3
- data/lib/arachni/rpc/server/output.rb +1 -1
- data/lib/arachni/rpc/server/plugin/manager.rb +1 -1
- data/lib/arachni/ruby.rb +1 -2
- data/lib/arachni/ruby/array.rb +1 -1
- data/lib/arachni/ruby/hash.rb +1 -1
- data/lib/arachni/ruby/object.rb +15 -1
- data/lib/arachni/ruby/set.rb +1 -1
- data/lib/arachni/ruby/string.rb +23 -4
- data/lib/arachni/ruby/webrick.rb +1 -1
- data/lib/arachni/ruby/webrick/cookie.rb +1 -1
- data/lib/arachni/ruby/webrick/httprequest.rb +1 -1
- data/lib/arachni/scope.rb +1 -1
- data/lib/arachni/{watir → selenium/webdriver}/element.rb +12 -13
- data/lib/arachni/session.rb +19 -4
- data/lib/arachni/snapshot.rb +9 -5
- data/lib/arachni/state.rb +1 -1
- data/lib/arachni/state/audit.rb +1 -1
- data/lib/arachni/state/element_filter.rb +1 -1
- data/lib/arachni/state/framework.rb +1 -1
- data/lib/arachni/state/framework/rpc.rb +1 -1
- data/lib/arachni/state/http.rb +1 -1
- data/lib/arachni/state/options.rb +1 -1
- data/lib/arachni/state/plugins.rb +1 -1
- data/lib/arachni/support.rb +2 -1
- data/lib/arachni/support/buffer.rb +1 -1
- data/lib/arachni/support/buffer/autoflush.rb +1 -1
- data/lib/arachni/support/buffer/base.rb +1 -1
- data/lib/arachni/support/cache.rb +1 -1
- data/lib/arachni/support/cache/base.rb +20 -8
- data/lib/arachni/support/cache/least_cost_replacement.rb +1 -1
- data/lib/arachni/support/cache/least_recently_pushed.rb +1 -1
- data/lib/arachni/support/cache/least_recently_used.rb +8 -9
- data/lib/arachni/support/cache/preference.rb +7 -20
- data/lib/arachni/support/cache/random_replacement.rb +1 -1
- data/lib/arachni/support/crypto.rb +1 -1
- data/lib/arachni/support/crypto/rsa_aes_cbc.rb +1 -1
- data/lib/arachni/support/database.rb +1 -1
- data/lib/arachni/support/database/base.rb +2 -2
- data/lib/arachni/support/database/hash.rb +1 -1
- data/lib/arachni/support/database/queue.rb +1 -1
- data/lib/arachni/support/glob.rb +35 -0
- data/lib/arachni/support/lookup.rb +1 -1
- data/lib/arachni/support/lookup/base.rb +1 -1
- data/lib/arachni/support/lookup/hash_set.rb +1 -1
- data/lib/arachni/support/lookup/moolb.rb +1 -1
- data/lib/arachni/support/mixins.rb +1 -1
- data/lib/arachni/support/mixins/observable.rb +1 -1
- data/lib/arachni/support/mixins/terminal.rb +1 -1
- data/lib/arachni/support/profiler.rb +12 -10
- data/lib/arachni/support/signature.rb +12 -5
- data/lib/arachni/trainer.rb +18 -4
- data/lib/arachni/ui/foo/output.rb +17 -1
- data/lib/arachni/uri.rb +285 -203
- data/lib/arachni/uri/scope.rb +13 -2
- data/lib/arachni/utilities.rb +22 -5
- data/lib/arachni/version.rb +1 -1
- data/lib/version +1 -1
- data/spec/arachni/browser/element_locator_spec.rb +42 -14
- data/spec/arachni/browser/javascript/dom_monitor_spec.rb +34 -304
- data/spec/arachni/browser/javascript/polyfills_spec.rb +35 -0
- data/spec/arachni/browser/javascript/taint_tracer_spec.rb +24 -4
- data/spec/arachni/browser/javascript_spec.rb +92 -65
- data/spec/arachni/browser_cluster/job_spec.rb +3 -3
- data/spec/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/event_trigger/result_spec.rb +1 -1
- data/spec/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/event_trigger_spec.rb +4 -4
- data/spec/arachni/browser_cluster/jobs/{resource_exploration → dom_exploration}/result_spec.rb +1 -1
- data/spec/arachni/browser_cluster/jobs/{resource_exploration_spec.rb → dom_exploration_spec.rb} +4 -4
- data/spec/arachni/browser_cluster/jobs/taint_tracer_spec.rb +9 -9
- data/spec/arachni/browser_cluster/worker_spec.rb +46 -67
- data/spec/arachni/browser_cluster_spec.rb +19 -17
- data/spec/arachni/browser_spec.rb +506 -183
- data/spec/arachni/check/auditor_spec.rb +70 -25
- data/spec/arachni/component/manager_spec.rb +19 -20
- data/spec/arachni/data/framework/rpc_spec.rb +1 -1
- data/spec/arachni/data/framework_spec.rb +1 -1
- data/spec/arachni/data/issues_spec.rb +3 -3
- data/spec/arachni/element/capabilities/analyzable/differential_spec.rb +44 -0
- data/spec/arachni/element/capabilities/analyzable/signature_spec.rb +33 -162
- data/spec/arachni/element/capabilities/analyzable/timeout_spec.rb +4 -4
- data/spec/arachni/element/cookie_spec.rb +98 -49
- data/spec/arachni/element/form/dom_spec.rb +1 -22
- data/spec/arachni/element/form_spec.rb +7 -7
- data/spec/arachni/element/header_spec.rb +2 -2
- data/spec/arachni/element/json_spec.rb +2 -2
- data/spec/arachni/element/link/dom_spec.rb +1 -22
- data/spec/arachni/element/link_spec.rb +17 -1
- data/spec/arachni/element/link_template/dom_spec.rb +1 -22
- data/spec/arachni/element/link_template_spec.rb +3 -3
- data/spec/arachni/element/ui_form/{ui_form_dom_spec.rb → dom_spec.rb} +72 -22
- data/spec/arachni/element/ui_form_spec.rb +1 -0
- data/spec/arachni/element/ui_input/dom_spec.rb +64 -22
- data/spec/arachni/element/ui_input_spec.rb +1 -0
- data/spec/arachni/element/xml_spec.rb +1 -0
- data/spec/arachni/framework/parts/audit_spec.rb +7 -5
- data/spec/arachni/framework/parts/browser_spec.rb +8 -8
- data/spec/arachni/framework/parts/check_spec.rb +1 -1
- data/spec/arachni/framework/parts/data_spec.rb +4 -4
- data/spec/arachni/framework/parts/scope_spec.rb +2 -2
- data/spec/arachni/framework_spec.rb +1 -1
- data/spec/arachni/http/client/dynamic_404_handlers_spec.rb +26 -13
- data/spec/arachni/http/client_spec.rb +80 -45
- data/spec/arachni/http/cookie_jar_spec.rb +6 -6
- data/spec/arachni/http/proxy_server_spec.rb +69 -66
- data/spec/arachni/http/request_spec.rb +147 -23
- data/spec/arachni/http/response/scope_spec.rb +12 -12
- data/spec/arachni/http/response_spec.rb +62 -4
- data/spec/arachni/issue_spec.rb +6 -6
- data/spec/arachni/option_groups/audit_spec.rb +25 -8
- data/spec/arachni/option_groups/browser_cluster_spec.rb +27 -1
- data/spec/arachni/option_groups/dispatcher_spec.rb +3 -3
- data/spec/arachni/option_groups/input_spec.rb +9 -9
- data/spec/arachni/option_groups/paths_spec.rb +2 -2
- data/spec/arachni/option_groups/scope_spec.rb +32 -16
- data/spec/arachni/options_spec.rb +4 -4
- data/spec/arachni/page/dom/transition_spec.rb +17 -10
- data/spec/arachni/page/dom_spec.rb +19 -0
- data/spec/arachni/page/scope_spec.rb +4 -4
- data/spec/arachni/page_spec.rb +15 -15
- data/spec/arachni/platform/manager_spec.rb +2 -2
- data/spec/arachni/plugin/base_spec.rb +1 -0
- data/spec/arachni/reporter/base_spec.rb +2 -2
- data/spec/arachni/reporter/manager_spec.rb +2 -2
- data/spec/arachni/rest/server_spec.rb +495 -0
- data/spec/arachni/rpc/server/active_options_spec.rb +63 -12
- data/spec/arachni/rpc/server/base_spec.rb +1 -1
- data/spec/arachni/rpc/server/framework/distributor_spec.rb +2 -2
- data/spec/arachni/rpc/server/framework_multi_spec.rb +6 -6
- data/spec/arachni/rpc/server/framework_spec.rb +4 -4
- data/spec/arachni/rpc/server/instance_spec.rb +24 -24
- data/spec/arachni/ruby/array_spec.rb +2 -2
- data/spec/arachni/ruby/string_spec.rb +52 -0
- data/spec/arachni/session_spec.rb +19 -2
- data/spec/arachni/snapshot_spec.rb +1 -1
- data/spec/arachni/state/audit_spec.rb +1 -1
- data/spec/arachni/state/framework_spec.rb +2 -2
- data/spec/arachni/support/cache/least_recently_used_spec.rb +0 -2
- data/spec/arachni/support/glob_spec.rb +75 -0
- data/spec/arachni/support/lookup/hash_set_spec.rb +1 -1
- data/spec/arachni/support/lookup/moolb_spec.rb +2 -2
- data/spec/arachni/support/signature_spec.rb +4 -4
- data/spec/arachni/trainer_spec.rb +48 -4
- data/spec/arachni/uri/scope_spec.rb +54 -10
- data/spec/arachni/uri_spec.rb +110 -89
- data/spec/arachni/utilities_spec.rb +8 -8
- data/spec/components/checks/active/code_injection_spec.rb +9 -9
- data/spec/components/checks/active/file_inclusion_spec.rb +20 -20
- data/spec/components/checks/active/ldap_injection_spec.rb +1 -1
- data/spec/components/checks/active/no_sql_injection_spec.rb +1 -1
- data/spec/components/checks/active/os_cmd_injection_spec.rb +3 -3
- data/spec/components/checks/active/path_traversal_spec.rb +11 -11
- data/spec/components/checks/active/response_splitting_spec.rb +2 -2
- data/spec/components/checks/active/rfi_spec.rb +3 -3
- data/spec/components/checks/active/session_fixation_spec.rb +1 -1
- data/spec/components/checks/active/source_code_disclosure_spec.rb +4 -4
- data/spec/components/checks/active/sql_injection_spec.rb +58 -59
- data/spec/components/checks/active/unvalidated_redirect_spec.rb +2 -2
- data/spec/components/checks/active/xpath_injection_spec.rb +3 -3
- data/spec/components/checks/active/xss_dom_script_context_spec.rb +1 -1
- data/spec/components/checks/active/xss_dom_spec.rb +1 -1
- data/spec/components/checks/active/xss_script_context_spec.rb +5 -5
- data/spec/components/checks/active/xss_spec.rb +5 -5
- data/spec/components/checks/passive/grep/credit_card_spec.rb +1 -1
- data/spec/components/checks/passive/grep/emails_spec.rb +12 -2
- data/spec/components/checks/passive/grep/ssn_spec.rb +1 -1
- data/spec/components/path_extractors/meta_refresh_spec.rb +3 -1
- data/spec/components/plugins/exec_spec.rb +2 -2
- data/spec/components/plugins/login_script_spec.rb +22 -2
- data/spec/components/plugins/vector_feed_spec.rb +3 -3
- data/spec/spec_helper.rb +10 -4
- data/spec/support/factories/browser_cluster/job.rb +1 -0
- data/spec/support/fixtures/check_with_invalid_platforms/with_invalid_platforms.rb +1 -1
- data/spec/support/fixtures/checks/test.rb +1 -1
- data/spec/support/fixtures/checks/test2.rb +1 -1
- data/spec/support/fixtures/checks/test3.rb +1 -1
- data/spec/support/fixtures/fingerprinters/test.rb +1 -1
- data/spec/support/fixtures/plugins/bad.rb +1 -1
- data/spec/support/fixtures/plugins/defaults/default.rb +1 -1
- data/spec/support/fixtures/plugins/distributable.rb +1 -1
- data/spec/support/fixtures/plugins/loop.rb +1 -1
- data/spec/support/fixtures/plugins/suspendable.rb +1 -1
- data/spec/support/fixtures/plugins/wait.rb +1 -1
- data/spec/support/fixtures/plugins/with_options.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p0.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p00.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p1.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p2.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p22.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p222.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p_nil.rb +1 -1
- data/spec/support/fixtures/plugins_with_priorities/p_nil2.rb +1 -1
- data/spec/support/fixtures/report.afr +0 -0
- data/spec/support/fixtures/reporters/base_spec/plugin_formatters/with_formatters/foobar.rb +1 -1
- data/spec/support/fixtures/reporters/base_spec/with_formatters.rb +1 -1
- data/spec/support/fixtures/reporters/base_spec/with_outfile.rb +1 -1
- data/spec/support/fixtures/reporters/base_spec/without_outfile.rb +1 -1
- data/spec/support/fixtures/reporters/manager_spec/afr.rb +1 -1
- data/spec/support/fixtures/reporters/manager_spec/error.rb +1 -1
- data/spec/support/fixtures/reporters/manager_spec/foo.rb +1 -1
- data/spec/support/fixtures/run_check/body.rb +1 -1
- data/spec/support/fixtures/run_check/cookies.rb +1 -1
- data/spec/support/fixtures/run_check/empty.rb +1 -1
- data/spec/support/fixtures/run_check/flch.rb +1 -1
- data/spec/support/fixtures/run_check/forms.rb +1 -1
- data/spec/support/fixtures/run_check/headers.rb +1 -1
- data/spec/support/fixtures/run_check/links.rb +1 -1
- data/spec/support/fixtures/run_check/nil.rb +1 -1
- data/spec/support/fixtures/run_check/path.rb +1 -1
- data/spec/support/fixtures/run_check/server.rb +1 -1
- data/spec/support/fixtures/signature_check/signature.rb +1 -1
- data/spec/support/fixtures/wait_check/wait.rb +1 -1
- data/spec/support/helpers/framework.rb +1 -1
- data/spec/support/helpers/misc.rb +1 -1
- data/spec/support/helpers/paths.rb +1 -1
- data/spec/support/helpers/request_helpers.rb +38 -0
- data/spec/support/helpers/requires.rb +1 -1
- data/spec/support/helpers/resets.rb +1 -1
- data/spec/support/helpers/web_server.rb +1 -1
- data/spec/support/lib/factory.rb +1 -1
- data/spec/support/lib/web_server_client.rb +1 -1
- data/spec/support/lib/web_server_dispatcher.rb +1 -1
- data/spec/support/lib/web_server_manager.rb +2 -2
- data/spec/support/servers/arachni/browser.rb +182 -15
- data/spec/support/servers/arachni/browser/javascript/angular-1.2.8.js +1 -1
- data/spec/support/servers/arachni/browser/javascript/angular-route.js +1 -1
- data/spec/support/servers/arachni/browser/javascript/dom_monitor.rb +27 -4
- data/spec/support/servers/arachni/element/capabilities/analyzable/differential.rb +103 -0
- data/spec/support/servers/arachni/element/capabilities/analyzable/timeout.rb +5 -2
- data/spec/support/servers/arachni/element/header.rb +1 -1
- data/spec/support/servers/arachni/http/client.rb +46 -0
- data/spec/support/servers/arachni/http/client/dynamic_404_handler.rb +7 -1
- data/spec/support/servers/checks/active/code_injection.rb +5 -5
- data/spec/support/servers/checks/active/no_sql_injection.rb +0 -6
- data/spec/support/servers/checks/active/no_sql_injection_differential.rb +1 -1
- data/spec/support/servers/checks/active/sql_injection.rb +5 -2
- data/spec/support/servers/checks/active/sql_injection_differential.rb +1 -1
- data/spec/support/servers/checks/active/trainer_check.rb +6 -6
- data/spec/support/servers/checks/passive/backdoors.rb +1 -0
- data/spec/support/servers/checks/passive/backup_directories.rb +2 -0
- data/spec/support/servers/checks/passive/backup_files.rb +2 -0
- data/spec/support/servers/checks/passive/grep/emails.rb +6 -6
- data/spec/support/shared/check.rb +28 -0
- data/spec/support/shared/element/capabilities/auditable.rb +76 -13
- data/spec/support/shared/element/capabilities/dom_only.rb +5 -6
- data/spec/support/shared/element/capabilities/inputtable.rb +74 -4
- data/spec/support/shared/element/capabilities/mutable.rb +86 -14
- data/spec/support/shared/element/capabilities/submittable.rb +12 -0
- data/spec/support/shared/element/capabilities/with_dom.rb +13 -4
- data/spec/support/shared/element/capabilities/with_node.rb +1 -1
- data/spec/support/shared/element/capabilities/with_source.rb +1 -6
- data/spec/support/shared/element/dom/locatable.rb +20 -0
- data/spec/support/shared/element/dom/submittable.rb +4 -17
- data/spec/support/shared/http/message.rb +37 -5
- data/spec/support/shared/support/cache.rb +5 -4
- data/ui/cli/framework.rb +4 -3
- data/ui/cli/framework/option_parser.rb +20 -8
- data/ui/cli/option_parser.rb +1 -1
- data/ui/cli/output.rb +40 -4
- data/ui/cli/reporter.rb +1 -1
- data/ui/cli/reporter/option_parser.rb +4 -4
- data/ui/cli/rest/server.rb +43 -0
- data/ui/cli/rest/server/option_parser.rb +115 -0
- data/ui/cli/restored_framework.rb +1 -1
- data/ui/cli/restored_framework/option_parser.rb +1 -1
- data/ui/cli/rpc/client/dispatcher_monitor.rb +1 -1
- data/ui/cli/rpc/client/dispatcher_monitor/option_parser.rb +1 -1
- data/ui/cli/rpc/client/instance.rb +1 -1
- data/ui/cli/rpc/client/local.rb +1 -1
- data/ui/cli/rpc/client/local/option_parser.rb +1 -1
- data/ui/cli/rpc/client/remote.rb +1 -1
- data/ui/cli/rpc/client/remote/option_parser.rb +1 -1
- data/ui/cli/rpc/server/dispatcher.rb +1 -1
- data/ui/cli/rpc/server/dispatcher/option_parser.rb +1 -1
- data/ui/cli/utilities.rb +1 -1
- metadata +197 -84
- data/components/checks/active/no_sql_injection/patterns/mongodb +0 -1
- data/components/checks/active/no_sql_injection/regexp_ignore.txt +0 -0
- data/components/checks/active/sql_injection/patterns/access +0 -3
- data/components/checks/active/sql_injection/patterns/db2 +0 -5
- data/components/checks/active/sql_injection/patterns/frontbase +0 -1
- data/components/checks/active/sql_injection/patterns/hsqldb +0 -1
- data/components/checks/active/sql_injection/patterns/ingres +0 -3
- data/components/checks/active/sql_injection/patterns/maxdb +0 -2
- data/components/checks/active/sql_injection/patterns/mssql +0 -25
- data/components/checks/active/sql_injection/patterns/oracle +0 -6
- data/components/checks/active/sql_injection/patterns/sqlite +0 -5
- data/components/checks/active/sql_injection/patterns/sybase +0 -3
- data/lib/arachni/ruby/io.rb +0 -39
- data/lib/arachni/selenium/webdriver/remote/http/typhoeus.rb +0 -63
- data/spec/arachni/ruby/io_spec.rb +0 -26
@@ -161,7 +161,7 @@ describe Arachni::Check::Auditor do
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
164
|
-
context Arachni::Element::Body do
|
164
|
+
context 'Arachni::Element::Body' do
|
165
165
|
before(:each) { auditor.class.info[:elements] = Arachni::Element::Body }
|
166
166
|
|
167
167
|
context 'and page with a non-empty body' do
|
@@ -179,19 +179,19 @@ describe Arachni::Check::Auditor do
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
|
-
context Arachni::Element::GenericDOM do
|
182
|
+
context 'Arachni::Element::GenericDOM' do
|
183
183
|
before(:each) { auditor.class.info[:elements] = Arachni::Element::GenericDOM }
|
184
184
|
let(:page) { Arachni::Page.from_data( url: url, body: 'stuff' ) }
|
185
185
|
|
186
186
|
context 'and Page#has_script? is' do
|
187
|
-
context true do
|
187
|
+
context 'true' do
|
188
188
|
it 'returns true' do
|
189
189
|
allow(page).to receive(:has_script?) { true }
|
190
190
|
expect(auditor.class.check?( page )).to be_truthy
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
context false do
|
194
|
+
context 'false' do
|
195
195
|
it 'returns false' do
|
196
196
|
allow(page).to receive(:has_script?) { false }
|
197
197
|
expect(auditor.class.check?( page )).to be_falsey
|
@@ -213,7 +213,7 @@ describe Arachni::Check::Auditor do
|
|
213
213
|
end
|
214
214
|
before(:each) { auditor.class.info[:elements] = [element] }
|
215
215
|
|
216
|
-
context true do
|
216
|
+
context 'true' do
|
217
217
|
before(:each) do
|
218
218
|
if element.type.to_s.start_with? 'link_template'
|
219
219
|
Arachni::Options.audit.link_templates =
|
@@ -247,14 +247,14 @@ describe Arachni::Check::Auditor do
|
|
247
247
|
end
|
248
248
|
|
249
249
|
context 'and Page#has_script? is' do
|
250
|
-
context true do
|
250
|
+
context 'true' do
|
251
251
|
it 'returns true' do
|
252
252
|
allow(page).to receive(:has_script?) { true }
|
253
253
|
expect(auditor.class.check?( page )).to be_truthy
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
|
-
context false do
|
257
|
+
context 'false' do
|
258
258
|
it 'returns false' do
|
259
259
|
allow(page).to receive(:has_script?) { false }
|
260
260
|
expect(auditor.class.check?( page )).to be_falsey
|
@@ -293,7 +293,7 @@ describe Arachni::Check::Auditor do
|
|
293
293
|
e == Arachni::Element::Cookie::DOM
|
294
294
|
|
295
295
|
context 'and Page#has_script? is' do
|
296
|
-
context true do
|
296
|
+
context 'true' do
|
297
297
|
it 'returns true' do
|
298
298
|
allow(page).to receive(:has_script?) { true }
|
299
299
|
auditor.class.info[:elements] = e
|
@@ -301,7 +301,7 @@ describe Arachni::Check::Auditor do
|
|
301
301
|
end
|
302
302
|
end
|
303
303
|
|
304
|
-
context false do
|
304
|
+
context 'false' do
|
305
305
|
it 'returns false' do
|
306
306
|
allow(page).to receive(:has_script?) { false }
|
307
307
|
auditor.class.info[:elements] = e
|
@@ -338,7 +338,7 @@ describe Arachni::Check::Auditor do
|
|
338
338
|
end
|
339
339
|
end
|
340
340
|
|
341
|
-
context false do
|
341
|
+
context 'false' do
|
342
342
|
before(:each) { Arachni::Options.audit.skip_elements element.type }
|
343
343
|
|
344
344
|
context "and the page contains #{element}" do
|
@@ -665,6 +665,15 @@ describe Arachni::Check::Auditor do
|
|
665
665
|
end
|
666
666
|
|
667
667
|
describe '#log' do
|
668
|
+
let(:issue_data) do
|
669
|
+
d = super()
|
670
|
+
|
671
|
+
d[:page].response.url = @opts.url
|
672
|
+
d.merge( page: d[:page] )
|
673
|
+
|
674
|
+
d
|
675
|
+
end
|
676
|
+
|
668
677
|
it 'preserves the given remarks' do
|
669
678
|
auditor.log( issue_data )
|
670
679
|
|
@@ -705,6 +714,42 @@ describe Arachni::Check::Auditor do
|
|
705
714
|
expect(issue.request).to eq(auditor.page.request)
|
706
715
|
end
|
707
716
|
end
|
717
|
+
|
718
|
+
context 'when the resource is out of scope' do
|
719
|
+
let(:issue_data) do
|
720
|
+
d = super()
|
721
|
+
|
722
|
+
d[:page].response.url = 'http://stuff/'
|
723
|
+
d.merge( page: d[:page] )
|
724
|
+
|
725
|
+
d
|
726
|
+
end
|
727
|
+
|
728
|
+
it 'returns nil' do
|
729
|
+
expect(auditor.log( issue_data )).to be_nil
|
730
|
+
end
|
731
|
+
|
732
|
+
it 'does not log the issue' do
|
733
|
+
auditor.log( issue_data )
|
734
|
+
expect(issues).to be_empty
|
735
|
+
end
|
736
|
+
|
737
|
+
context 'and the host includes the seed' do
|
738
|
+
let(:issue_data) do
|
739
|
+
d = super()
|
740
|
+
|
741
|
+
d[:page].response.url = "http://#{Arachni::Utilities.random_seed}.com/"
|
742
|
+
d.merge( page: d[:page] )
|
743
|
+
|
744
|
+
d
|
745
|
+
end
|
746
|
+
|
747
|
+
it 'does not log the issue' do
|
748
|
+
auditor.log( issue_data )
|
749
|
+
expect(issues).to be_any
|
750
|
+
end
|
751
|
+
end
|
752
|
+
end
|
708
753
|
end
|
709
754
|
|
710
755
|
describe '#audit' do
|
@@ -763,7 +808,7 @@ describe Arachni::Check::Auditor do
|
|
763
808
|
end
|
764
809
|
|
765
810
|
context 'when called with options' do
|
766
|
-
describe :elements do
|
811
|
+
describe ':elements' do
|
767
812
|
|
768
813
|
before { auditor.load_page_from( @url + '/elem_combo' ) }
|
769
814
|
|
@@ -844,7 +889,7 @@ describe Arachni::Check::Auditor do
|
|
844
889
|
end
|
845
890
|
end
|
846
891
|
|
847
|
-
describe :train do
|
892
|
+
describe ':train' do
|
848
893
|
context 'default' do
|
849
894
|
it 'parses the responses of forms submitted with their default values and feed any new elements back to the framework to be audited' do
|
850
895
|
# page feedback queue
|
@@ -870,7 +915,7 @@ describe Arachni::Check::Auditor do
|
|
870
915
|
end
|
871
916
|
end
|
872
917
|
|
873
|
-
context true do
|
918
|
+
context 'true' do
|
874
919
|
it 'parses all responses and feed any new elements back to the framework to be audited' do
|
875
920
|
# page feedback queue
|
876
921
|
pages = [ Arachni::Page.from_url( @url + '/train/true' ) ]
|
@@ -896,7 +941,7 @@ describe Arachni::Check::Auditor do
|
|
896
941
|
end
|
897
942
|
end
|
898
943
|
|
899
|
-
context false do
|
944
|
+
context 'false' do
|
900
945
|
it 'skips analysis' do
|
901
946
|
# page feedback queue
|
902
947
|
page = Arachni::Page.from_url( @url + '/train/true' )
|
@@ -984,7 +1029,7 @@ describe Arachni::Check::Auditor do
|
|
984
1029
|
end
|
985
1030
|
|
986
1031
|
context 'and the resource is a' do
|
987
|
-
context String do
|
1032
|
+
context 'String' do
|
988
1033
|
it 'loads the URL and traces the taint' do
|
989
1034
|
pages = []
|
990
1035
|
auditor.trace_taint( url, taint: taint ) do |page|
|
@@ -997,7 +1042,7 @@ describe Arachni::Check::Auditor do
|
|
997
1042
|
end
|
998
1043
|
end
|
999
1044
|
|
1000
|
-
context Arachni::HTTP::Response do
|
1045
|
+
context 'Arachni::HTTP::Response' do
|
1001
1046
|
it 'loads it and traces the taint' do
|
1002
1047
|
pages = []
|
1003
1048
|
|
@@ -1012,7 +1057,7 @@ describe Arachni::Check::Auditor do
|
|
1012
1057
|
end
|
1013
1058
|
end
|
1014
1059
|
|
1015
|
-
context Arachni::Page do
|
1060
|
+
context 'Arachni::Page' do
|
1016
1061
|
it 'loads it and traces the taint' do
|
1017
1062
|
pages = []
|
1018
1063
|
|
@@ -1036,7 +1081,7 @@ describe Arachni::Check::Auditor do
|
|
1036
1081
|
end
|
1037
1082
|
|
1038
1083
|
context 'and the resource is a' do
|
1039
|
-
context String do
|
1084
|
+
context 'String' do
|
1040
1085
|
it 'loads the URL and traces the taint' do
|
1041
1086
|
pages = []
|
1042
1087
|
auditor.trace_taint( url,
|
@@ -1051,7 +1096,7 @@ describe Arachni::Check::Auditor do
|
|
1051
1096
|
end
|
1052
1097
|
end
|
1053
1098
|
|
1054
|
-
context Arachni::HTTP::Response do
|
1099
|
+
context 'Arachni::HTTP::Response' do
|
1055
1100
|
it 'loads it and traces the taint' do
|
1056
1101
|
pages = []
|
1057
1102
|
auditor.trace_taint( Arachni::HTTP::Client.get( url, mode: :sync ),
|
@@ -1066,7 +1111,7 @@ describe Arachni::Check::Auditor do
|
|
1066
1111
|
end
|
1067
1112
|
end
|
1068
1113
|
|
1069
|
-
context Arachni::Page do
|
1114
|
+
context 'Arachni::Page' do
|
1070
1115
|
it 'loads it and traces the taint' do
|
1071
1116
|
pages = []
|
1072
1117
|
auditor.trace_taint( Arachni::Page.from_url( url ),
|
@@ -1091,7 +1136,7 @@ describe Arachni::Check::Auditor do
|
|
1091
1136
|
end
|
1092
1137
|
|
1093
1138
|
context 'and the resource is a' do
|
1094
|
-
context String do
|
1139
|
+
context 'String' do
|
1095
1140
|
it 'loads the URL and traces the taint' do
|
1096
1141
|
pages = []
|
1097
1142
|
auditor.trace_taint( url ) do |page|
|
@@ -1104,7 +1149,7 @@ describe Arachni::Check::Auditor do
|
|
1104
1149
|
end
|
1105
1150
|
end
|
1106
1151
|
|
1107
|
-
context Arachni::HTTP::Response do
|
1152
|
+
context 'Arachni::HTTP::Response' do
|
1108
1153
|
it 'loads it and traces the taint' do
|
1109
1154
|
pages = []
|
1110
1155
|
auditor.trace_taint( Arachni::HTTP::Client.get( url, mode: :sync ) ) do |page|
|
@@ -1117,7 +1162,7 @@ describe Arachni::Check::Auditor do
|
|
1117
1162
|
end
|
1118
1163
|
end
|
1119
1164
|
|
1120
|
-
context Arachni::Page do
|
1165
|
+
context 'Arachni::Page' do
|
1121
1166
|
it 'loads it and traces the taint' do
|
1122
1167
|
pages = []
|
1123
1168
|
auditor.trace_taint( Arachni::Page.from_url( url ) ) do |page|
|
@@ -1135,7 +1180,7 @@ describe Arachni::Check::Auditor do
|
|
1135
1180
|
context 'when the block returns' do
|
1136
1181
|
let(:url) { Arachni::Utilities.normalize_url( web_server_url_for( :browser ) ) + 'explore' }
|
1137
1182
|
|
1138
|
-
context true do
|
1183
|
+
context 'true' do
|
1139
1184
|
it 'marks the job as done' do
|
1140
1185
|
calls = 0
|
1141
1186
|
auditor.trace_taint( url ) do
|
@@ -1147,7 +1192,7 @@ describe Arachni::Check::Auditor do
|
|
1147
1192
|
end
|
1148
1193
|
end
|
1149
1194
|
|
1150
|
-
context false do
|
1195
|
+
context 'false' do
|
1151
1196
|
it 'allows the job to continue' do
|
1152
1197
|
calls = 0
|
1153
1198
|
auditor.trace_taint( url ) do
|
@@ -38,21 +38,21 @@ describe Arachni::Component::Manager do
|
|
38
38
|
describe '#load' do
|
39
39
|
context 'when passed a' do
|
40
40
|
|
41
|
-
context String do
|
41
|
+
context 'String' do
|
42
42
|
it 'loads the component by name' do
|
43
43
|
@components.load( 'wait' )
|
44
44
|
expect(@components.loaded).to eq(%w(wait))
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
context Symbol do
|
48
|
+
context 'Symbol' do
|
49
49
|
it 'loads the component by name' do
|
50
50
|
@components.load( :wait )
|
51
51
|
expect(@components.loaded).to eq(%w(wait))
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
context Array do
|
55
|
+
context 'Array' do
|
56
56
|
it 'loads the components by name' do
|
57
57
|
@components.load( %w(bad distributable) )
|
58
58
|
expect(@components.loaded.sort).to eq(%w(bad distributable).sort)
|
@@ -60,21 +60,21 @@ describe Arachni::Component::Manager do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
context 'vararg' do
|
63
|
-
context String do
|
63
|
+
context 'String' do
|
64
64
|
it 'loads components by name' do
|
65
65
|
@components.load( 'wait', 'bad' )
|
66
66
|
expect(@components.loaded.sort).to eq(%w(bad wait).sort)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
context Symbol do
|
70
|
+
context 'Symbol' do
|
71
71
|
it 'loads components by name' do
|
72
72
|
@components.load :wait, :distributable
|
73
73
|
expect(@components.loaded.sort).to eq(%w(wait distributable).sort)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
context Array do
|
77
|
+
context 'Array' do
|
78
78
|
it 'loads components by name' do
|
79
79
|
@components.load( :wait, %w(bad distributable) )
|
80
80
|
expect(@components.loaded.sort).to eq(%w(bad distributable wait).sort)
|
@@ -92,8 +92,8 @@ describe Arachni::Component::Manager do
|
|
92
92
|
|
93
93
|
context 'with a category name' do
|
94
94
|
it 'loads all of its components' do
|
95
|
-
@components.load( '
|
96
|
-
expect(@components.loaded.sort).to eq(
|
95
|
+
@components.load( 'defaults/*' )
|
96
|
+
expect(@components.loaded.sort).to eq(%w(default))
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -153,7 +153,7 @@ describe Arachni::Component::Manager do
|
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
156
|
-
context String do
|
156
|
+
context 'String' do
|
157
157
|
it 'loads components whose tags include the given tag (as either a String or a Symbol)' do
|
158
158
|
expect(@components.empty?).to be_truthy
|
159
159
|
|
@@ -176,7 +176,7 @@ describe Arachni::Component::Manager do
|
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
179
|
-
context Symbol do
|
179
|
+
context 'Symbol' do
|
180
180
|
it 'loads components whose tags include the given tag (as either a String or a Symbol)' do
|
181
181
|
expect(@components.empty?).to be_truthy
|
182
182
|
|
@@ -198,7 +198,7 @@ describe Arachni::Component::Manager do
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
-
context Array do
|
201
|
+
context 'Array' do
|
202
202
|
it 'loads components which include any of the given tags (as either Strings or a Symbols)' do
|
203
203
|
expect(@components.empty?).to be_truthy
|
204
204
|
|
@@ -223,19 +223,19 @@ describe Arachni::Component::Manager do
|
|
223
223
|
describe '#parse' do
|
224
224
|
context 'when passed a' do
|
225
225
|
|
226
|
-
context String do
|
226
|
+
context 'String' do
|
227
227
|
it 'returns an array including the component\'s name' do
|
228
228
|
expect(@components.parse( 'wait' )).to eq(%w(wait))
|
229
229
|
end
|
230
230
|
end
|
231
231
|
|
232
|
-
context Symbol do
|
232
|
+
context 'Symbol' do
|
233
233
|
it 'returns an array including the component\'s name' do
|
234
234
|
expect(@components.parse( :wait )).to eq(%w(wait))
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
238
|
-
context Array do
|
238
|
+
context 'Array' do
|
239
239
|
it 'loads the component by name' do
|
240
240
|
expect(@components.parse( %w(bad distributable) ).sort).to eq(
|
241
241
|
%w(bad distributable).sort
|
@@ -252,10 +252,9 @@ describe Arachni::Component::Manager do
|
|
252
252
|
|
253
253
|
context 'with a category name' do
|
254
254
|
it 'returns all of its components' do
|
255
|
-
expect(@components.parse( '
|
255
|
+
expect(@components.parse( 'defaults/*' ).sort).to eq(%w(default))
|
256
256
|
end
|
257
257
|
end
|
258
|
-
|
259
258
|
end
|
260
259
|
|
261
260
|
context 'exclusion filter (-)' do
|
@@ -346,14 +345,14 @@ describe Arachni::Component::Manager do
|
|
346
345
|
|
347
346
|
describe '#[]' do
|
348
347
|
context 'when passed a' do
|
349
|
-
context String do
|
348
|
+
context 'String' do
|
350
349
|
it 'should load and return the component' do
|
351
350
|
expect(@components.loaded).to be_empty
|
352
351
|
expect(@components['wait'].name).to eq('Arachni::Plugins::Wait')
|
353
352
|
expect(@components.loaded).to eq(%w(wait))
|
354
353
|
end
|
355
354
|
end
|
356
|
-
context Symbol do
|
355
|
+
context 'Symbol' do
|
357
356
|
it 'should load and return the component' do
|
358
357
|
expect(@components.loaded).to be_empty
|
359
358
|
expect(@components[:wait].name).to eq('Arachni::Plugins::Wait')
|
@@ -365,7 +364,7 @@ describe Arachni::Component::Manager do
|
|
365
364
|
|
366
365
|
describe '#include?' do
|
367
366
|
context 'when passed a' do
|
368
|
-
context String do
|
367
|
+
context 'String' do
|
369
368
|
context 'when the component has been loaded' do
|
370
369
|
it 'returns true' do
|
371
370
|
expect(@components.loaded).to be_empty
|
@@ -383,7 +382,7 @@ describe Arachni::Component::Manager do
|
|
383
382
|
end
|
384
383
|
end
|
385
384
|
end
|
386
|
-
context Symbol do
|
385
|
+
context 'Symbol' do
|
387
386
|
context 'when the component has been loaded' do
|
388
387
|
it 'returns true' do
|
389
388
|
expect(@components.loaded).to be_empty
|
@@ -41,7 +41,7 @@ describe Arachni::Data::Framework::RPC do
|
|
41
41
|
|
42
42
|
pages = []
|
43
43
|
Dir["#{dump_directory}/distributed_page_queue/*"].each do |page_file|
|
44
|
-
pages << Marshal.load( IO.
|
44
|
+
pages << Marshal.load( IO.binread( page_file ) )
|
45
45
|
end
|
46
46
|
expect(pages).to eq([page, page])
|
47
47
|
end
|
@@ -166,7 +166,7 @@ describe Arachni::Data::Framework do
|
|
166
166
|
|
167
167
|
pages = []
|
168
168
|
Dir["#{dump_directory}/page_queue/*"].each do |page_file|
|
169
|
-
pages << Marshal.load( IO.
|
169
|
+
pages << Marshal.load( IO.binread( page_file ) )
|
170
170
|
end
|
171
171
|
expect(pages).to eq([page, page])
|
172
172
|
end
|
@@ -200,7 +200,7 @@ describe Arachni::Data::Issues do
|
|
200
200
|
context 'when it does not includes the given issue' do
|
201
201
|
it 'returns true' do
|
202
202
|
subject << active_issue
|
203
|
-
expect(subject).
|
203
|
+
expect(subject.include?(issue)).to be_falsey
|
204
204
|
end
|
205
205
|
end
|
206
206
|
end
|
@@ -252,7 +252,7 @@ describe Arachni::Data::Issues do
|
|
252
252
|
issue_path = "#{dump_directory}/issue_#{issue.digest}"
|
253
253
|
expect(File.exists?( issue_path )).to be_truthy
|
254
254
|
|
255
|
-
loaded_issue = Marshal.load( IO.
|
255
|
+
loaded_issue = Marshal.load( IO.binread( issue_path ) )
|
256
256
|
expect(issue).to eq(loaded_issue)
|
257
257
|
end
|
258
258
|
end
|
@@ -261,7 +261,7 @@ describe Arachni::Data::Issues do
|
|
261
261
|
unsorted_issues.each { |i| subject << i }
|
262
262
|
subject.dump( dump_directory )
|
263
263
|
|
264
|
-
expect(subject.digests).to eq(Marshal.load( IO.
|
264
|
+
expect(subject.digests).to eq(Marshal.load( IO.binread( "#{dump_directory}/digests" ) ))
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|