arachni 0.2.2.1
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.
- data/ACKNOWLEDGMENTS.md +14 -0
- data/AUTHORS.md +6 -0
- data/CHANGELOG.md +162 -0
- data/CONTRIBUTORS.md +10 -0
- data/EXPLOITATION.md +429 -0
- data/HACKING.md +101 -0
- data/LICENSE.md +341 -0
- data/README.md +350 -0
- data/Rakefile +86 -0
- data/bin/arachni +22 -0
- data/bin/arachni_web +77 -0
- data/bin/arachni_xmlrpc +21 -0
- data/bin/arachni_xmlrpcd +82 -0
- data/bin/arachni_xmlrpcd_monitor +74 -0
- data/conf/README.webui.yaml.txt +44 -0
- data/conf/webui.yaml +11 -0
- data/external/metasploit/LICENSE +24 -0
- data/external/metasploit/modules/exploits/unix/webapp/arachni_exec.rb +142 -0
- data/external/metasploit/modules/exploits/unix/webapp/arachni_path_traversal.rb +113 -0
- data/external/metasploit/modules/exploits/unix/webapp/arachni_php_eval.rb +150 -0
- data/external/metasploit/modules/exploits/unix/webapp/arachni_php_include.rb +141 -0
- data/external/metasploit/modules/exploits/unix/webapp/arachni_sqlmap.rb +92 -0
- data/external/metasploit/plugins/arachni.rb +536 -0
- data/getoptslong.rb +241 -0
- data/lib/anemone.rb +2 -0
- data/lib/anemone/cookie_store.rb +35 -0
- data/lib/anemone/core.rb +371 -0
- data/lib/anemone/exceptions.rb +5 -0
- data/lib/anemone/http.rb +144 -0
- data/lib/anemone/page.rb +337 -0
- data/lib/anemone/page_store.rb +160 -0
- data/lib/anemone/storage.rb +34 -0
- data/lib/anemone/storage/base.rb +75 -0
- data/lib/anemone/storage/exceptions.rb +15 -0
- data/lib/anemone/storage/mongodb.rb +89 -0
- data/lib/anemone/storage/pstore.rb +50 -0
- data/lib/anemone/storage/redis.rb +90 -0
- data/lib/anemone/storage/tokyo_cabinet.rb +57 -0
- data/lib/anemone/tentacle.rb +40 -0
- data/lib/arachni.rb +16 -0
- data/lib/audit_store.rb +346 -0
- data/lib/component_manager.rb +293 -0
- data/lib/component_options.rb +395 -0
- data/lib/exceptions.rb +76 -0
- data/lib/framework.rb +637 -0
- data/lib/http.rb +809 -0
- data/lib/issue.rb +302 -0
- data/lib/module.rb +4 -0
- data/lib/module/auditor.rb +455 -0
- data/lib/module/base.rb +188 -0
- data/lib/module/element_db.rb +158 -0
- data/lib/module/key_filler.rb +87 -0
- data/lib/module/manager.rb +87 -0
- data/lib/module/output.rb +68 -0
- data/lib/module/trainer.rb +240 -0
- data/lib/module/utilities.rb +110 -0
- data/lib/options.rb +547 -0
- data/lib/parser.rb +2 -0
- data/lib/parser/auditable.rb +522 -0
- data/lib/parser/elements.rb +296 -0
- data/lib/parser/page.rb +149 -0
- data/lib/parser/parser.rb +717 -0
- data/lib/plugin.rb +4 -0
- data/lib/plugin/base.rb +110 -0
- data/lib/plugin/manager.rb +162 -0
- data/lib/report.rb +4 -0
- data/lib/report/base.rb +119 -0
- data/lib/report/manager.rb +92 -0
- data/lib/rpc/xml/client/base.rb +71 -0
- data/lib/rpc/xml/client/dispatcher.rb +49 -0
- data/lib/rpc/xml/client/instance.rb +88 -0
- data/lib/rpc/xml/server/base.rb +90 -0
- data/lib/rpc/xml/server/dispatcher.rb +357 -0
- data/lib/rpc/xml/server/framework.rb +206 -0
- data/lib/rpc/xml/server/instance.rb +191 -0
- data/lib/rpc/xml/server/module/manager.rb +46 -0
- data/lib/rpc/xml/server/options.rb +124 -0
- data/lib/rpc/xml/server/output.rb +299 -0
- data/lib/rpc/xml/server/plugin/manager.rb +58 -0
- data/lib/ruby.rb +5 -0
- data/lib/ruby/object.rb +32 -0
- data/lib/ruby/string.rb +74 -0
- data/lib/ruby/xmlrpc/server.rb +27 -0
- data/lib/spider.rb +200 -0
- data/lib/typhoeus/request.rb +91 -0
- data/lib/typhoeus/response.rb +34 -0
- data/lib/ui/cli/cli.rb +744 -0
- data/lib/ui/cli/output.rb +279 -0
- data/lib/ui/web/log.rb +82 -0
- data/lib/ui/web/output_stream.rb +94 -0
- data/lib/ui/web/report_manager.rb +222 -0
- data/lib/ui/web/server.rb +903 -0
- data/lib/ui/web/server/db/placeholder +0 -0
- data/lib/ui/web/server/public/banner.png +0 -0
- data/lib/ui/web/server/public/bodybg-small.png +0 -0
- data/lib/ui/web/server/public/bodybg.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/pbar-ani.gif +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/ui/web/server/public/css/smoothness/jquery-ui-1.8.9.custom.css +573 -0
- data/lib/ui/web/server/public/favicon.ico +0 -0
- data/lib/ui/web/server/public/footer.jpg +0 -0
- data/lib/ui/web/server/public/icons/error.png +0 -0
- data/lib/ui/web/server/public/icons/info.png +0 -0
- data/lib/ui/web/server/public/icons/ok.png +0 -0
- data/lib/ui/web/server/public/icons/status.png +0 -0
- data/lib/ui/web/server/public/js/jquery-1.4.4.min.js +167 -0
- data/lib/ui/web/server/public/js/jquery-ui-1.8.9.custom.min.js +781 -0
- data/lib/ui/web/server/public/logo.png +0 -0
- data/lib/ui/web/server/public/nav-left.jpg +0 -0
- data/lib/ui/web/server/public/nav-right.jpg +0 -0
- data/lib/ui/web/server/public/nav-selected-left.jpg +0 -0
- data/lib/ui/web/server/public/nav-selected-right.jpg +0 -0
- data/lib/ui/web/server/public/reports/placeholder +1 -0
- data/lib/ui/web/server/public/sidebar-bottom.jpg +0 -0
- data/lib/ui/web/server/public/sidebar-h4.jpg +0 -0
- data/lib/ui/web/server/public/sidebar-top.jpg +0 -0
- data/lib/ui/web/server/public/spider.png +0 -0
- data/lib/ui/web/server/public/style.css +604 -0
- data/lib/ui/web/server/tmp/placeholder +0 -0
- data/lib/ui/web/server/views/dispatcher.erb +85 -0
- data/lib/ui/web/server/views/dispatcher_error.erb +14 -0
- data/lib/ui/web/server/views/error.erb +1 -0
- data/lib/ui/web/server/views/flash.erb +18 -0
- data/lib/ui/web/server/views/home.erb +14 -0
- data/lib/ui/web/server/views/instance.erb +213 -0
- data/lib/ui/web/server/views/layout.erb +95 -0
- data/lib/ui/web/server/views/log.erb +40 -0
- data/lib/ui/web/server/views/modules.erb +71 -0
- data/lib/ui/web/server/views/options.erb +23 -0
- data/lib/ui/web/server/views/output_results.erb +51 -0
- data/lib/ui/web/server/views/plugins.erb +42 -0
- data/lib/ui/web/server/views/report_formats.erb +30 -0
- data/lib/ui/web/server/views/reports.erb +55 -0
- data/lib/ui/web/server/views/settings.erb +120 -0
- data/lib/ui/web/server/views/welcome.erb +38 -0
- data/lib/ui/xmlrpc/dispatcher_monitor.rb +204 -0
- data/lib/ui/xmlrpc/xmlrpc.rb +843 -0
- data/logs/placeholder +0 -0
- data/metamodules/autothrottle.rb +74 -0
- data/metamodules/timeout_notice.rb +118 -0
- data/metamodules/uniformity.rb +98 -0
- data/modules/audit/code_injection.rb +136 -0
- data/modules/audit/code_injection_timing.rb +115 -0
- data/modules/audit/code_injection_timing/payloads.txt +4 -0
- data/modules/audit/csrf.rb +301 -0
- data/modules/audit/ldapi.rb +103 -0
- data/modules/audit/ldapi/errors.txt +26 -0
- data/modules/audit/os_cmd_injection.rb +103 -0
- data/modules/audit/os_cmd_injection/payloads.txt +2 -0
- data/modules/audit/os_cmd_injection_timing.rb +104 -0
- data/modules/audit/os_cmd_injection_timing/payloads.txt +3 -0
- data/modules/audit/path_traversal.rb +141 -0
- data/modules/audit/response_splitting.rb +105 -0
- data/modules/audit/rfi.rb +193 -0
- data/modules/audit/sqli.rb +120 -0
- data/modules/audit/sqli/regexp_ids.txt +90 -0
- data/modules/audit/sqli_blind_rdiff.rb +321 -0
- data/modules/audit/sqli_blind_timing.rb +103 -0
- data/modules/audit/sqli_blind_timing/payloads.txt +51 -0
- data/modules/audit/trainer.rb +89 -0
- data/modules/audit/unvalidated_redirect.rb +90 -0
- data/modules/audit/xpath.rb +104 -0
- data/modules/audit/xpath/errors.txt +26 -0
- data/modules/audit/xss.rb +99 -0
- data/modules/audit/xss_event.rb +134 -0
- data/modules/audit/xss_path.rb +125 -0
- data/modules/audit/xss_script_tag.rb +112 -0
- data/modules/audit/xss_tag.rb +112 -0
- data/modules/audit/xss_uri.rb +125 -0
- data/modules/recon/allowed_methods.rb +104 -0
- data/modules/recon/backdoors.rb +131 -0
- data/modules/recon/backdoors/filenames.txt +16 -0
- data/modules/recon/backup_files.rb +177 -0
- data/modules/recon/backup_files/extensions.txt +28 -0
- data/modules/recon/common_directories.rb +138 -0
- data/modules/recon/common_directories/directories.txt +265 -0
- data/modules/recon/common_files.rb +138 -0
- data/modules/recon/common_files/filenames.txt +17 -0
- data/modules/recon/directory_listing.rb +171 -0
- data/modules/recon/grep/captcha.rb +62 -0
- data/modules/recon/grep/credit_card.rb +85 -0
- data/modules/recon/grep/cvs_svn_users.rb +73 -0
- data/modules/recon/grep/emails.rb +59 -0
- data/modules/recon/grep/html_objects.rb +53 -0
- data/modules/recon/grep/private_ip.rb +54 -0
- data/modules/recon/grep/ssn.rb +53 -0
- data/modules/recon/htaccess_limit.rb +82 -0
- data/modules/recon/http_put.rb +95 -0
- data/modules/recon/interesting_responses.rb +118 -0
- data/modules/recon/unencrypted_password_forms.rb +119 -0
- data/modules/recon/webdav.rb +126 -0
- data/modules/recon/xst.rb +107 -0
- data/path_extractors/anchors.rb +35 -0
- data/path_extractors/forms.rb +35 -0
- data/path_extractors/frames.rb +38 -0
- data/path_extractors/generic.rb +39 -0
- data/path_extractors/links.rb +35 -0
- data/path_extractors/meta_refresh.rb +39 -0
- data/path_extractors/scripts.rb +37 -0
- data/path_extractors/sitemap.rb +31 -0
- data/plugins/autologin.rb +137 -0
- data/plugins/content_types.rb +90 -0
- data/plugins/cookie_collector.rb +99 -0
- data/plugins/form_dicattack.rb +185 -0
- data/plugins/healthmap.rb +94 -0
- data/plugins/http_dicattack.rb +133 -0
- data/plugins/metamodules.rb +118 -0
- data/plugins/proxy.rb +248 -0
- data/plugins/proxy/server.rb +66 -0
- data/plugins/waf_detector.rb +184 -0
- data/profiles/comprehensive.afp +74 -0
- data/profiles/full.afp +75 -0
- data/reports/afr.rb +59 -0
- data/reports/ap.rb +55 -0
- data/reports/html.rb +179 -0
- data/reports/html/default.erb +967 -0
- data/reports/metareport.rb +139 -0
- data/reports/metareport/arachni_metareport.rb +174 -0
- data/reports/plugin_formatters/html/content_types.rb +82 -0
- data/reports/plugin_formatters/html/cookie_collector.rb +66 -0
- data/reports/plugin_formatters/html/form_dicattack.rb +54 -0
- data/reports/plugin_formatters/html/healthmap.rb +76 -0
- data/reports/plugin_formatters/html/http_dicattack.rb +54 -0
- data/reports/plugin_formatters/html/metaformatters/timeout_notice.rb +65 -0
- data/reports/plugin_formatters/html/metaformatters/uniformity.rb +71 -0
- data/reports/plugin_formatters/html/metamodules.rb +93 -0
- data/reports/plugin_formatters/html/waf_detector.rb +54 -0
- data/reports/plugin_formatters/stdout/content_types.rb +73 -0
- data/reports/plugin_formatters/stdout/cookie_collector.rb +61 -0
- data/reports/plugin_formatters/stdout/form_dicattack.rb +52 -0
- data/reports/plugin_formatters/stdout/healthmap.rb +72 -0
- data/reports/plugin_formatters/stdout/http_dicattack.rb +53 -0
- data/reports/plugin_formatters/stdout/metaformatters/timeout_notice.rb +55 -0
- data/reports/plugin_formatters/stdout/metaformatters/uniformity.rb +68 -0
- data/reports/plugin_formatters/stdout/metamodules.rb +89 -0
- data/reports/plugin_formatters/stdout/waf_detector.rb +48 -0
- data/reports/plugin_formatters/xml/content_types.rb +91 -0
- data/reports/plugin_formatters/xml/cookie_collector.rb +70 -0
- data/reports/plugin_formatters/xml/form_dicattack.rb +57 -0
- data/reports/plugin_formatters/xml/healthmap.rb +82 -0
- data/reports/plugin_formatters/xml/http_dicattack.rb +57 -0
- data/reports/plugin_formatters/xml/metaformatters/timeout_notice.rb +67 -0
- data/reports/plugin_formatters/xml/metaformatters/uniformity.rb +82 -0
- data/reports/plugin_formatters/xml/metamodules.rb +91 -0
- data/reports/plugin_formatters/xml/waf_detector.rb +58 -0
- data/reports/stdout.rb +182 -0
- data/reports/txt.rb +77 -0
- data/reports/xml.rb +231 -0
- data/reports/xml/buffer.rb +98 -0
- metadata +516 -0
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
|
|
2
|
+
<div id="page-intro">
|
|
3
|
+
<h2>Dispatcher</h2>
|
|
4
|
+
<p>The dispatcher is the central magement system.
|
|
5
|
+
It spawns an XMLRPC server per scan and provides statistics for all running server instances.<br/>
|
|
6
|
+
This interface allows you to "Attach" to (see the output of), pause, resume and shutdown instances.
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<% if !stats['running_jobs'].empty? %>
|
|
10
|
+
<form action="/dispatcher/shutdown" method="post">
|
|
11
|
+
<%= csrf_tag %>
|
|
12
|
+
<input type="submit" value="Shut all down" />
|
|
13
|
+
</form>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
<%= erb :flash, {:layout => false} %>
|
|
19
|
+
|
|
20
|
+
<% if !stats['running_jobs'].empty? %>
|
|
21
|
+
<table>
|
|
22
|
+
<tr>
|
|
23
|
+
<th>PID</th>
|
|
24
|
+
<th>Port</th>
|
|
25
|
+
<th>Owner</th>
|
|
26
|
+
<th>State</th>
|
|
27
|
+
<th>Start time (Server-side)</th>
|
|
28
|
+
<th>Current time (Server-side)</th>
|
|
29
|
+
<th>Runtime</th>
|
|
30
|
+
<th>Memory consumption</th>
|
|
31
|
+
<th>Action</th>
|
|
32
|
+
</tr>
|
|
33
|
+
<% stats['running_jobs'].each do |job| %>
|
|
34
|
+
<tr>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<td><%=job['pid']%></td>
|
|
38
|
+
<td><%=job['port']%></td>
|
|
39
|
+
<td><%=job['owner']%></td>
|
|
40
|
+
|
|
41
|
+
<%if !job['paused'] %>
|
|
42
|
+
<td>Running</td>
|
|
43
|
+
<% else %>
|
|
44
|
+
<td>Paused</td>
|
|
45
|
+
<% end %>
|
|
46
|
+
|
|
47
|
+
<td><%=job['starttime'].to_time%></td>
|
|
48
|
+
<td><%=job['currtime'].to_time%></td>
|
|
49
|
+
<td><%=secs_to_hms( job['runtime'] )%></td>
|
|
50
|
+
<td><%=proc_mem( job['proc']['rss'] )%></td>
|
|
51
|
+
|
|
52
|
+
<td>
|
|
53
|
+
<% if !( job['owner'] =~/WebUI helper/ ) %>
|
|
54
|
+
|
|
55
|
+
<form action="/instance/<%=job['port']%>" method="get" target="_blank">
|
|
56
|
+
<input type="submit" value="Attach" />
|
|
57
|
+
</form>
|
|
58
|
+
|
|
59
|
+
<%if !job['paused'] %>
|
|
60
|
+
<form action="/dispatcher/<%=job['port']%>/pause" method="post">
|
|
61
|
+
<%= csrf_tag %>
|
|
62
|
+
<input type="submit" value="Pause" />
|
|
63
|
+
</form>
|
|
64
|
+
<%end%>
|
|
65
|
+
|
|
66
|
+
<%if job['paused'] %>
|
|
67
|
+
<form action="/dispatcher/<%=job['port']%>/resume" method="post">
|
|
68
|
+
<%= csrf_tag %>
|
|
69
|
+
<input type="submit" value="Resume" />
|
|
70
|
+
</form>
|
|
71
|
+
<% end %>
|
|
72
|
+
|
|
73
|
+
<% end %>
|
|
74
|
+
|
|
75
|
+
<form action="/dispatcher/<%=job['port']%>/shutdown" method="post" <% if !( job['owner'] =~/WebUI helper/ ) %> target="_blank" <%end%> >
|
|
76
|
+
<%= csrf_tag %>
|
|
77
|
+
<input type="submit" value="Shutdown" />
|
|
78
|
+
</form>
|
|
79
|
+
</td>
|
|
80
|
+
</tr>
|
|
81
|
+
<% end %>
|
|
82
|
+
</table>
|
|
83
|
+
<% else %>
|
|
84
|
+
<span class="notice"> There are no running scans at the moment.</span>
|
|
85
|
+
<% end %>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
<form action="/dispatcher" method="post">
|
|
3
|
+
|
|
4
|
+
<%= csrf_tag %>
|
|
5
|
+
<input type="submit" value="Connect" />
|
|
6
|
+
|
|
7
|
+
<div id="page-intro">
|
|
8
|
+
<p> Couldn't connect to the dispatcher, if you have indeed started one please enter its URL bellow in the form of <em>http://server:port</em>.</p>
|
|
9
|
+
<h2>URL: <input name="url"/></h2>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
</form>
|
|
13
|
+
|
|
14
|
+
<%= erb :flash, {:layout => false} %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h1 style="font-size:110%;font-family:Arial, sans-serif;"><%= error %></h1>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
<% [:err, :ok, :notice ].each do |name| %>
|
|
3
|
+
|
|
4
|
+
<% if flash.has?( name ) %>
|
|
5
|
+
<div class="flash">
|
|
6
|
+
<div class="<%= name %>">
|
|
7
|
+
<%= flash[name] %>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<% end %>
|
|
13
|
+
|
|
14
|
+
<script type="text/javascript">
|
|
15
|
+
if( $( '.flash' ) ){
|
|
16
|
+
setTimeout( "$( '.flash' ).fadeOut( 1600, \"linear\" );", 2500 );
|
|
17
|
+
}
|
|
18
|
+
</script>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
<form action="/scan" method="post">
|
|
3
|
+
|
|
4
|
+
<%= csrf_tag %>
|
|
5
|
+
<input type="submit" value="Launch Scan" />
|
|
6
|
+
|
|
7
|
+
<div id="page-intro">
|
|
8
|
+
<p> No need to configure anything, all you need to do is insert a URL and hit "Launch Scan"; Arachni will take care of the rest.</p>
|
|
9
|
+
<h2>URL: <input name="url" value="<%=session['opts']['settings']['url']%>" size="50" /></h2>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
</form>
|
|
13
|
+
|
|
14
|
+
<%= erb :flash, {:layout => false} %>
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
|
|
2
|
+
<div id="page-intro">
|
|
3
|
+
<h2 id="page_header">Attached to instance on port <%=params['port']%></h2>
|
|
4
|
+
<p id="page_description">
|
|
5
|
+
This page allows you to see what's going on at the other end of the wire (i.e. get status messages directly from the remote scanner).
|
|
6
|
+
<br/>
|
|
7
|
+
<br/>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<div id="control_buttons">
|
|
11
|
+
<%if !shutdown %>
|
|
12
|
+
|
|
13
|
+
<%if !paused %>
|
|
14
|
+
<form action="/instance/<%=params['port']%>/pause" method="post">
|
|
15
|
+
<%= csrf_tag %>
|
|
16
|
+
<input type="submit" value="Pause" />
|
|
17
|
+
</form>
|
|
18
|
+
<%end%>
|
|
19
|
+
|
|
20
|
+
<%if paused %>
|
|
21
|
+
<form action="/instance/<%=params['port']%>/resume" method="post">
|
|
22
|
+
<%= csrf_tag %>
|
|
23
|
+
<input type="submit" value="Resume" />
|
|
24
|
+
</form>
|
|
25
|
+
<%end%>
|
|
26
|
+
|
|
27
|
+
<form action="/instance/<%=params['port']%>/shutdown" method="post" target="_blank">
|
|
28
|
+
<%= csrf_tag %>
|
|
29
|
+
<input type="submit" value="Shutdown" />
|
|
30
|
+
</form>
|
|
31
|
+
|
|
32
|
+
<% end %>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<%= erb :flash, {:layout => false} %>
|
|
37
|
+
|
|
38
|
+
<div id="scan_data">
|
|
39
|
+
<h3>Scan statisics</h3>
|
|
40
|
+
<div class="left">
|
|
41
|
+
<ul>
|
|
42
|
+
<li>Pages audited: <span id="audited">0</span></li>
|
|
43
|
+
<li>Pages crawled: <span id="crawled">0</span></li>
|
|
44
|
+
<li>Progress: <span id="percentage">0</span>%</li>
|
|
45
|
+
</ul>
|
|
46
|
+
</div>
|
|
47
|
+
<div>
|
|
48
|
+
<ul>
|
|
49
|
+
<li>Current max concurrency: <span id="max_concurrency">0</span> requests</li>
|
|
50
|
+
<li>Average response time: <span id="average_res_time">0</span> ms</li>
|
|
51
|
+
<li>Current page: <span id="current_page">0</span></li>
|
|
52
|
+
</ul>
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<p><em>
|
|
57
|
+
(Due to the fact that Arachni discovers pages using 2 complementary systems (the Spider and the Trainer)
|
|
58
|
+
you may see some backwards progress or other weird progress behavior.)
|
|
59
|
+
</em></p>
|
|
60
|
+
<div id="progressbar"></div>
|
|
61
|
+
|
|
62
|
+
<div class="left">
|
|
63
|
+
<h3>Scanner output:</h3>
|
|
64
|
+
<div class="output" id="output"></div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="right">
|
|
68
|
+
<h3>Results thus far:</h3>
|
|
69
|
+
<div class="output" id="output_results"></div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<div style="display: none" id="dialog-loading" title="Loading the scan report...">
|
|
73
|
+
<p>
|
|
74
|
+
Please wait while the scan report is being loaded. <br/>
|
|
75
|
+
This process maybe take a while depending on the size of the report.
|
|
76
|
+
</p>
|
|
77
|
+
<p>
|
|
78
|
+
<em>
|
|
79
|
+
If the loading process takes an unusually long time the zombie reaper
|
|
80
|
+
may have beaten you to it.<br/>
|
|
81
|
+
Use the "Reports" tab to view the report.
|
|
82
|
+
</em>
|
|
83
|
+
</p>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div style="display: none" id="dialog-shutdown" title="The scanner has been shutdown...">
|
|
87
|
+
<p>
|
|
88
|
+
The report is waiting for you <a href="/reports">here</a>.
|
|
89
|
+
</p>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<script type="text/javascript">
|
|
93
|
+
//<![CDATA[
|
|
94
|
+
|
|
95
|
+
function inspect( id ){
|
|
96
|
+
$( id ).dialog({
|
|
97
|
+
height: 500,
|
|
98
|
+
width: 1000,
|
|
99
|
+
modal: true
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function setProgressBar( progress ) {
|
|
104
|
+
$( "#progressbar" ).progressbar({
|
|
105
|
+
value: progress
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function showReport( html ){
|
|
110
|
+
document.getElementById( 'control_buttons' ).innerHTML = ""
|
|
111
|
+
document.getElementById( 'page_header' ).innerHTML = "Report"
|
|
112
|
+
document.getElementById( 'page_description' ).innerHTML =
|
|
113
|
+
"The scan has completed succesfully, you can review the results using this report.<br/>" +
|
|
114
|
+
"This report has been saved and you can view or export it in various format via the Reports tab."
|
|
115
|
+
|
|
116
|
+
document.getElementById( 'scan_data' ).innerHTML = "<iframe class='report' src=" + html + "></iframe>"
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function setStats( stats ){
|
|
120
|
+
if( stats == undefined ){ return }
|
|
121
|
+
|
|
122
|
+
document.getElementById( 'audited' ).innerHTML = stats.auditmap_size;
|
|
123
|
+
document.getElementById( 'crawled' ).innerHTML = stats.sitemap_size;
|
|
124
|
+
document.getElementById( 'current_page' ).innerHTML = stats.current_page;
|
|
125
|
+
document.getElementById( 'average_res_time' ).innerHTML = stats.average_res_time;
|
|
126
|
+
document.getElementById( 'max_concurrency' ).innerHTML = stats.max_concurrency;
|
|
127
|
+
|
|
128
|
+
percentage = (stats.auditmap_size / stats.sitemap_size) * 100
|
|
129
|
+
document.getElementById( 'percentage' ).innerHTML = parseInt( percentage );
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function updateProgressBar(){
|
|
133
|
+
var stats_url = "/instance/<%= params['port'].to_i.to_s %>/stats.json";
|
|
134
|
+
$.getJSON( stats_url, function(data) {
|
|
135
|
+
if( data.stats == undefined ){ return }
|
|
136
|
+
setStats( data.stats );
|
|
137
|
+
percentage = (data.stats.auditmap_size / data.stats.sitemap_size) * 100
|
|
138
|
+
setProgressBar( percentage );
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function updateOutput() {
|
|
143
|
+
if( !document.getElementById( 'output' ) ) return;
|
|
144
|
+
|
|
145
|
+
var output_url = "/instance/<%= params['port'].to_i.to_s %>/output.json";
|
|
146
|
+
$.getJSON( output_url, function(data) {
|
|
147
|
+
|
|
148
|
+
if( data.status == 'finished' ){
|
|
149
|
+
showShutdownDialog( );
|
|
150
|
+
} else {
|
|
151
|
+
if( data.report == undefined ) {
|
|
152
|
+
document.getElementById( 'output' ).innerHTML = data.data;
|
|
153
|
+
} else {
|
|
154
|
+
showReportLoadingDialog();
|
|
155
|
+
showReport( data.report );
|
|
156
|
+
$( "#dialog-loading" ).dialog('close')
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function updateResults() {
|
|
164
|
+
if( !document.getElementById( 'output_results' ) ) return;
|
|
165
|
+
|
|
166
|
+
var output_results_url = "/instance/<%= params['port'].to_i.to_s %>/output_results.json";
|
|
167
|
+
$.getJSON( output_results_url, function(data) {
|
|
168
|
+
document.getElementById( 'output_results' ).innerHTML = data.data;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function showReportLoadingDialog( ) {
|
|
173
|
+
$( "#dialog-loading" ).dialog({
|
|
174
|
+
height: 200,
|
|
175
|
+
width: 720,
|
|
176
|
+
modal: true
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function showShutdownDialog( ) {
|
|
181
|
+
$( "#dialog-shutdown" ).dialog({
|
|
182
|
+
height: 100,
|
|
183
|
+
modal: true
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
$( document ).ready(function() {
|
|
189
|
+
|
|
190
|
+
setProgressBar( 0 );
|
|
191
|
+
|
|
192
|
+
updateProgressBar();
|
|
193
|
+
setInterval( function() {
|
|
194
|
+
updateProgressBar();
|
|
195
|
+
}, 3000 );
|
|
196
|
+
|
|
197
|
+
updateOutput( );
|
|
198
|
+
setInterval( function() {
|
|
199
|
+
updateOutput( );
|
|
200
|
+
}, 1500 );
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
updateResults( )
|
|
204
|
+
setInterval( function() {
|
|
205
|
+
updateResults( );
|
|
206
|
+
}, 5000 );
|
|
207
|
+
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
//]]>
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
</div>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" dir="ltr">
|
|
3
|
+
<head>
|
|
4
|
+
<title>Arachni - Web Application Security Scanner Framework</title>
|
|
5
|
+
<link rel="shortcut icon" href="/favicon.ico" />
|
|
6
|
+
|
|
7
|
+
<link type="text/css" href="/css/smoothness/jquery-ui-1.8.9.custom.css" rel="Stylesheet" />
|
|
8
|
+
<link rel="stylesheet" href="/style.css" type="text/css" />
|
|
9
|
+
|
|
10
|
+
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
|
|
11
|
+
<script type="text/javascript" src="/js/jquery-ui-1.8.9.custom.min.js"></script>
|
|
12
|
+
|
|
13
|
+
<script type="text/javascript">
|
|
14
|
+
function checkAll( type ) {
|
|
15
|
+
$( "." + type ).attr( "checked", true )
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function uncheckAll( type ) {
|
|
19
|
+
$( "." + type ).attr( "checked", false )
|
|
20
|
+
}
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<div class="wrapper">
|
|
26
|
+
<div id="container">
|
|
27
|
+
<div class="spider">
|
|
28
|
+
<div id="header">
|
|
29
|
+
<h1><a href="/">Arachni v<%=Arachni::VERSION%></a></h1>
|
|
30
|
+
<h2>Web Application Security Scanner Framework</h2>
|
|
31
|
+
<h3>WebUI v<%=Arachni::UI::Web::VERSION%></h3>
|
|
32
|
+
</div>
|
|
33
|
+
<div id="nav">
|
|
34
|
+
<ul>
|
|
35
|
+
<li <% if selected_tab?( '/' )%>class="selected" <%end%>> <a href="/">Start a scan</a></li>
|
|
36
|
+
<li <% if selected_tab?( 'modules' )%>class="selected" <%end%>><a href="/modules">Modules</a></li>
|
|
37
|
+
<li <% if selected_tab?( 'plugins' )%>class="selected" <%end%>><a href="/plugins">Plugins</a></li>
|
|
38
|
+
<li <% if selected_tab?( 'settings' )%>class="selected" <%end%>><a href="/settings">Settings</a></li>
|
|
39
|
+
<li <% if selected_tab?( 'reports' )%>class="selected" <%end%>><a href="/reports">Reports [<%=report_count%>]</a></li>
|
|
40
|
+
<li <% if selected_tab?( 'dispatcher' )%>class="selected" <%end%>><a href="/dispatcher">Dispatcher</a></li>
|
|
41
|
+
<li <% if selected_tab?( 'log' )%>class="selected" <%end%>><a href="/log">Log</a></li>
|
|
42
|
+
</ul>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div id="body">
|
|
46
|
+
<div id="content">
|
|
47
|
+
<%= yield %>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<div class="clear"></div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div id="footer">
|
|
55
|
+
<div class="footer-content">
|
|
56
|
+
|
|
57
|
+
<div class="footer-box">
|
|
58
|
+
<h4><a href="https://github.com/Zapotek/arachni">About Arachni</a></h4>
|
|
59
|
+
<p>
|
|
60
|
+
Arachni is a feature-full, modular, high-performance Ruby framework aimed towards <br/>
|
|
61
|
+
helping penetration testers and administrators evaluate the security of web applications.
|
|
62
|
+
</p>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="footer-box">
|
|
66
|
+
<h4>Help</h4>
|
|
67
|
+
<ul>
|
|
68
|
+
<li><a href="http://github.com/Zapotek/arachni/wiki">Wiki</a></li>
|
|
69
|
+
<li><a href="http://groups.google.com/group/arachni">Google Group</a></li>
|
|
70
|
+
<li><a href="https://github.com/Zapotek/arachni/issues">Found a bug?</a></li>
|
|
71
|
+
<li><a href="http://zapotek.github.com/arachni/">API documentation</a></li>
|
|
72
|
+
|
|
73
|
+
</ul>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="footer-box">
|
|
77
|
+
|
|
78
|
+
<h4>Interesting links</h4>
|
|
79
|
+
<ul>
|
|
80
|
+
<li><a href="http://trainofthought.segfault.gr/category/projects/arachni/">News straight from the developer's blog</a></li>
|
|
81
|
+
<li><a href="http://twitter.com/Zap0tek">Developer's Twitter feed</a></li>
|
|
82
|
+
<li><a href="https://github.com/Zapotek/arachni/tree/experimental">The bleeding edge, Arachni's experimental branch</a></li>
|
|
83
|
+
</ul>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="footer-box end-footer-box">
|
|
87
|
+
</div>
|
|
88
|
+
<div class="clear"></div>
|
|
89
|
+
</div>
|
|
90
|
+
<div id="footer-links">
|
|
91
|
+
<p>© <a href="mailto:tasos.laskos@gmail.com">Tasos "Zapotek" Laskos</a> 2011 <a href="http://www.spyka.net"></a></p>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</body>
|
|
95
|
+
</html>
|