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.
Files changed (262) hide show
  1. data/ACKNOWLEDGMENTS.md +14 -0
  2. data/AUTHORS.md +6 -0
  3. data/CHANGELOG.md +162 -0
  4. data/CONTRIBUTORS.md +10 -0
  5. data/EXPLOITATION.md +429 -0
  6. data/HACKING.md +101 -0
  7. data/LICENSE.md +341 -0
  8. data/README.md +350 -0
  9. data/Rakefile +86 -0
  10. data/bin/arachni +22 -0
  11. data/bin/arachni_web +77 -0
  12. data/bin/arachni_xmlrpc +21 -0
  13. data/bin/arachni_xmlrpcd +82 -0
  14. data/bin/arachni_xmlrpcd_monitor +74 -0
  15. data/conf/README.webui.yaml.txt +44 -0
  16. data/conf/webui.yaml +11 -0
  17. data/external/metasploit/LICENSE +24 -0
  18. data/external/metasploit/modules/exploits/unix/webapp/arachni_exec.rb +142 -0
  19. data/external/metasploit/modules/exploits/unix/webapp/arachni_path_traversal.rb +113 -0
  20. data/external/metasploit/modules/exploits/unix/webapp/arachni_php_eval.rb +150 -0
  21. data/external/metasploit/modules/exploits/unix/webapp/arachni_php_include.rb +141 -0
  22. data/external/metasploit/modules/exploits/unix/webapp/arachni_sqlmap.rb +92 -0
  23. data/external/metasploit/plugins/arachni.rb +536 -0
  24. data/getoptslong.rb +241 -0
  25. data/lib/anemone.rb +2 -0
  26. data/lib/anemone/cookie_store.rb +35 -0
  27. data/lib/anemone/core.rb +371 -0
  28. data/lib/anemone/exceptions.rb +5 -0
  29. data/lib/anemone/http.rb +144 -0
  30. data/lib/anemone/page.rb +337 -0
  31. data/lib/anemone/page_store.rb +160 -0
  32. data/lib/anemone/storage.rb +34 -0
  33. data/lib/anemone/storage/base.rb +75 -0
  34. data/lib/anemone/storage/exceptions.rb +15 -0
  35. data/lib/anemone/storage/mongodb.rb +89 -0
  36. data/lib/anemone/storage/pstore.rb +50 -0
  37. data/lib/anemone/storage/redis.rb +90 -0
  38. data/lib/anemone/storage/tokyo_cabinet.rb +57 -0
  39. data/lib/anemone/tentacle.rb +40 -0
  40. data/lib/arachni.rb +16 -0
  41. data/lib/audit_store.rb +346 -0
  42. data/lib/component_manager.rb +293 -0
  43. data/lib/component_options.rb +395 -0
  44. data/lib/exceptions.rb +76 -0
  45. data/lib/framework.rb +637 -0
  46. data/lib/http.rb +809 -0
  47. data/lib/issue.rb +302 -0
  48. data/lib/module.rb +4 -0
  49. data/lib/module/auditor.rb +455 -0
  50. data/lib/module/base.rb +188 -0
  51. data/lib/module/element_db.rb +158 -0
  52. data/lib/module/key_filler.rb +87 -0
  53. data/lib/module/manager.rb +87 -0
  54. data/lib/module/output.rb +68 -0
  55. data/lib/module/trainer.rb +240 -0
  56. data/lib/module/utilities.rb +110 -0
  57. data/lib/options.rb +547 -0
  58. data/lib/parser.rb +2 -0
  59. data/lib/parser/auditable.rb +522 -0
  60. data/lib/parser/elements.rb +296 -0
  61. data/lib/parser/page.rb +149 -0
  62. data/lib/parser/parser.rb +717 -0
  63. data/lib/plugin.rb +4 -0
  64. data/lib/plugin/base.rb +110 -0
  65. data/lib/plugin/manager.rb +162 -0
  66. data/lib/report.rb +4 -0
  67. data/lib/report/base.rb +119 -0
  68. data/lib/report/manager.rb +92 -0
  69. data/lib/rpc/xml/client/base.rb +71 -0
  70. data/lib/rpc/xml/client/dispatcher.rb +49 -0
  71. data/lib/rpc/xml/client/instance.rb +88 -0
  72. data/lib/rpc/xml/server/base.rb +90 -0
  73. data/lib/rpc/xml/server/dispatcher.rb +357 -0
  74. data/lib/rpc/xml/server/framework.rb +206 -0
  75. data/lib/rpc/xml/server/instance.rb +191 -0
  76. data/lib/rpc/xml/server/module/manager.rb +46 -0
  77. data/lib/rpc/xml/server/options.rb +124 -0
  78. data/lib/rpc/xml/server/output.rb +299 -0
  79. data/lib/rpc/xml/server/plugin/manager.rb +58 -0
  80. data/lib/ruby.rb +5 -0
  81. data/lib/ruby/object.rb +32 -0
  82. data/lib/ruby/string.rb +74 -0
  83. data/lib/ruby/xmlrpc/server.rb +27 -0
  84. data/lib/spider.rb +200 -0
  85. data/lib/typhoeus/request.rb +91 -0
  86. data/lib/typhoeus/response.rb +34 -0
  87. data/lib/ui/cli/cli.rb +744 -0
  88. data/lib/ui/cli/output.rb +279 -0
  89. data/lib/ui/web/log.rb +82 -0
  90. data/lib/ui/web/output_stream.rb +94 -0
  91. data/lib/ui/web/report_manager.rb +222 -0
  92. data/lib/ui/web/server.rb +903 -0
  93. data/lib/ui/web/server/db/placeholder +0 -0
  94. data/lib/ui/web/server/public/banner.png +0 -0
  95. data/lib/ui/web/server/public/bodybg-small.png +0 -0
  96. data/lib/ui/web/server/public/bodybg.png +0 -0
  97. data/lib/ui/web/server/public/css/smoothness/images/pbar-ani.gif +0 -0
  98. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  99. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  100. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  101. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  102. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  103. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  104. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  105. data/lib/ui/web/server/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  106. data/lib/ui/web/server/public/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  107. data/lib/ui/web/server/public/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  108. data/lib/ui/web/server/public/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  109. data/lib/ui/web/server/public/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  110. data/lib/ui/web/server/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  111. data/lib/ui/web/server/public/css/smoothness/jquery-ui-1.8.9.custom.css +573 -0
  112. data/lib/ui/web/server/public/favicon.ico +0 -0
  113. data/lib/ui/web/server/public/footer.jpg +0 -0
  114. data/lib/ui/web/server/public/icons/error.png +0 -0
  115. data/lib/ui/web/server/public/icons/info.png +0 -0
  116. data/lib/ui/web/server/public/icons/ok.png +0 -0
  117. data/lib/ui/web/server/public/icons/status.png +0 -0
  118. data/lib/ui/web/server/public/js/jquery-1.4.4.min.js +167 -0
  119. data/lib/ui/web/server/public/js/jquery-ui-1.8.9.custom.min.js +781 -0
  120. data/lib/ui/web/server/public/logo.png +0 -0
  121. data/lib/ui/web/server/public/nav-left.jpg +0 -0
  122. data/lib/ui/web/server/public/nav-right.jpg +0 -0
  123. data/lib/ui/web/server/public/nav-selected-left.jpg +0 -0
  124. data/lib/ui/web/server/public/nav-selected-right.jpg +0 -0
  125. data/lib/ui/web/server/public/reports/placeholder +1 -0
  126. data/lib/ui/web/server/public/sidebar-bottom.jpg +0 -0
  127. data/lib/ui/web/server/public/sidebar-h4.jpg +0 -0
  128. data/lib/ui/web/server/public/sidebar-top.jpg +0 -0
  129. data/lib/ui/web/server/public/spider.png +0 -0
  130. data/lib/ui/web/server/public/style.css +604 -0
  131. data/lib/ui/web/server/tmp/placeholder +0 -0
  132. data/lib/ui/web/server/views/dispatcher.erb +85 -0
  133. data/lib/ui/web/server/views/dispatcher_error.erb +14 -0
  134. data/lib/ui/web/server/views/error.erb +1 -0
  135. data/lib/ui/web/server/views/flash.erb +18 -0
  136. data/lib/ui/web/server/views/home.erb +14 -0
  137. data/lib/ui/web/server/views/instance.erb +213 -0
  138. data/lib/ui/web/server/views/layout.erb +95 -0
  139. data/lib/ui/web/server/views/log.erb +40 -0
  140. data/lib/ui/web/server/views/modules.erb +71 -0
  141. data/lib/ui/web/server/views/options.erb +23 -0
  142. data/lib/ui/web/server/views/output_results.erb +51 -0
  143. data/lib/ui/web/server/views/plugins.erb +42 -0
  144. data/lib/ui/web/server/views/report_formats.erb +30 -0
  145. data/lib/ui/web/server/views/reports.erb +55 -0
  146. data/lib/ui/web/server/views/settings.erb +120 -0
  147. data/lib/ui/web/server/views/welcome.erb +38 -0
  148. data/lib/ui/xmlrpc/dispatcher_monitor.rb +204 -0
  149. data/lib/ui/xmlrpc/xmlrpc.rb +843 -0
  150. data/logs/placeholder +0 -0
  151. data/metamodules/autothrottle.rb +74 -0
  152. data/metamodules/timeout_notice.rb +118 -0
  153. data/metamodules/uniformity.rb +98 -0
  154. data/modules/audit/code_injection.rb +136 -0
  155. data/modules/audit/code_injection_timing.rb +115 -0
  156. data/modules/audit/code_injection_timing/payloads.txt +4 -0
  157. data/modules/audit/csrf.rb +301 -0
  158. data/modules/audit/ldapi.rb +103 -0
  159. data/modules/audit/ldapi/errors.txt +26 -0
  160. data/modules/audit/os_cmd_injection.rb +103 -0
  161. data/modules/audit/os_cmd_injection/payloads.txt +2 -0
  162. data/modules/audit/os_cmd_injection_timing.rb +104 -0
  163. data/modules/audit/os_cmd_injection_timing/payloads.txt +3 -0
  164. data/modules/audit/path_traversal.rb +141 -0
  165. data/modules/audit/response_splitting.rb +105 -0
  166. data/modules/audit/rfi.rb +193 -0
  167. data/modules/audit/sqli.rb +120 -0
  168. data/modules/audit/sqli/regexp_ids.txt +90 -0
  169. data/modules/audit/sqli_blind_rdiff.rb +321 -0
  170. data/modules/audit/sqli_blind_timing.rb +103 -0
  171. data/modules/audit/sqli_blind_timing/payloads.txt +51 -0
  172. data/modules/audit/trainer.rb +89 -0
  173. data/modules/audit/unvalidated_redirect.rb +90 -0
  174. data/modules/audit/xpath.rb +104 -0
  175. data/modules/audit/xpath/errors.txt +26 -0
  176. data/modules/audit/xss.rb +99 -0
  177. data/modules/audit/xss_event.rb +134 -0
  178. data/modules/audit/xss_path.rb +125 -0
  179. data/modules/audit/xss_script_tag.rb +112 -0
  180. data/modules/audit/xss_tag.rb +112 -0
  181. data/modules/audit/xss_uri.rb +125 -0
  182. data/modules/recon/allowed_methods.rb +104 -0
  183. data/modules/recon/backdoors.rb +131 -0
  184. data/modules/recon/backdoors/filenames.txt +16 -0
  185. data/modules/recon/backup_files.rb +177 -0
  186. data/modules/recon/backup_files/extensions.txt +28 -0
  187. data/modules/recon/common_directories.rb +138 -0
  188. data/modules/recon/common_directories/directories.txt +265 -0
  189. data/modules/recon/common_files.rb +138 -0
  190. data/modules/recon/common_files/filenames.txt +17 -0
  191. data/modules/recon/directory_listing.rb +171 -0
  192. data/modules/recon/grep/captcha.rb +62 -0
  193. data/modules/recon/grep/credit_card.rb +85 -0
  194. data/modules/recon/grep/cvs_svn_users.rb +73 -0
  195. data/modules/recon/grep/emails.rb +59 -0
  196. data/modules/recon/grep/html_objects.rb +53 -0
  197. data/modules/recon/grep/private_ip.rb +54 -0
  198. data/modules/recon/grep/ssn.rb +53 -0
  199. data/modules/recon/htaccess_limit.rb +82 -0
  200. data/modules/recon/http_put.rb +95 -0
  201. data/modules/recon/interesting_responses.rb +118 -0
  202. data/modules/recon/unencrypted_password_forms.rb +119 -0
  203. data/modules/recon/webdav.rb +126 -0
  204. data/modules/recon/xst.rb +107 -0
  205. data/path_extractors/anchors.rb +35 -0
  206. data/path_extractors/forms.rb +35 -0
  207. data/path_extractors/frames.rb +38 -0
  208. data/path_extractors/generic.rb +39 -0
  209. data/path_extractors/links.rb +35 -0
  210. data/path_extractors/meta_refresh.rb +39 -0
  211. data/path_extractors/scripts.rb +37 -0
  212. data/path_extractors/sitemap.rb +31 -0
  213. data/plugins/autologin.rb +137 -0
  214. data/plugins/content_types.rb +90 -0
  215. data/plugins/cookie_collector.rb +99 -0
  216. data/plugins/form_dicattack.rb +185 -0
  217. data/plugins/healthmap.rb +94 -0
  218. data/plugins/http_dicattack.rb +133 -0
  219. data/plugins/metamodules.rb +118 -0
  220. data/plugins/proxy.rb +248 -0
  221. data/plugins/proxy/server.rb +66 -0
  222. data/plugins/waf_detector.rb +184 -0
  223. data/profiles/comprehensive.afp +74 -0
  224. data/profiles/full.afp +75 -0
  225. data/reports/afr.rb +59 -0
  226. data/reports/ap.rb +55 -0
  227. data/reports/html.rb +179 -0
  228. data/reports/html/default.erb +967 -0
  229. data/reports/metareport.rb +139 -0
  230. data/reports/metareport/arachni_metareport.rb +174 -0
  231. data/reports/plugin_formatters/html/content_types.rb +82 -0
  232. data/reports/plugin_formatters/html/cookie_collector.rb +66 -0
  233. data/reports/plugin_formatters/html/form_dicattack.rb +54 -0
  234. data/reports/plugin_formatters/html/healthmap.rb +76 -0
  235. data/reports/plugin_formatters/html/http_dicattack.rb +54 -0
  236. data/reports/plugin_formatters/html/metaformatters/timeout_notice.rb +65 -0
  237. data/reports/plugin_formatters/html/metaformatters/uniformity.rb +71 -0
  238. data/reports/plugin_formatters/html/metamodules.rb +93 -0
  239. data/reports/plugin_formatters/html/waf_detector.rb +54 -0
  240. data/reports/plugin_formatters/stdout/content_types.rb +73 -0
  241. data/reports/plugin_formatters/stdout/cookie_collector.rb +61 -0
  242. data/reports/plugin_formatters/stdout/form_dicattack.rb +52 -0
  243. data/reports/plugin_formatters/stdout/healthmap.rb +72 -0
  244. data/reports/plugin_formatters/stdout/http_dicattack.rb +53 -0
  245. data/reports/plugin_formatters/stdout/metaformatters/timeout_notice.rb +55 -0
  246. data/reports/plugin_formatters/stdout/metaformatters/uniformity.rb +68 -0
  247. data/reports/plugin_formatters/stdout/metamodules.rb +89 -0
  248. data/reports/plugin_formatters/stdout/waf_detector.rb +48 -0
  249. data/reports/plugin_formatters/xml/content_types.rb +91 -0
  250. data/reports/plugin_formatters/xml/cookie_collector.rb +70 -0
  251. data/reports/plugin_formatters/xml/form_dicattack.rb +57 -0
  252. data/reports/plugin_formatters/xml/healthmap.rb +82 -0
  253. data/reports/plugin_formatters/xml/http_dicattack.rb +57 -0
  254. data/reports/plugin_formatters/xml/metaformatters/timeout_notice.rb +67 -0
  255. data/reports/plugin_formatters/xml/metaformatters/uniformity.rb +82 -0
  256. data/reports/plugin_formatters/xml/metamodules.rb +91 -0
  257. data/reports/plugin_formatters/xml/waf_detector.rb +58 -0
  258. data/reports/stdout.rb +182 -0
  259. data/reports/txt.rb +77 -0
  260. data/reports/xml.rb +231 -0
  261. data/reports/xml/buffer.rb +98 -0
  262. metadata +516 -0
@@ -0,0 +1,40 @@
1
+
2
+ <div id="page-intro">
3
+ <h2>Log</h2>
4
+ <p>
5
+ This page provides information about all actions (performed using and/or by this WebUI) that are worth knowing.
6
+ <br/>
7
+ To clear the log entries you will need to delete this file: <%=settings.db%>/log.db
8
+ <br/>
9
+ </p>
10
+ </div>
11
+ <%= erb :flash, {:layout => false} %>
12
+
13
+ <% if !entries.empty? %>
14
+ <table>
15
+ <tr>
16
+ <th>ID</th>
17
+ <th>Owner</th>
18
+ <th>Action</th>
19
+ <th>Object</th>
20
+ <th>Client IP address</th>
21
+ <th>Client hostname</th>
22
+ <th>Datestamp</th>
23
+ </tr>
24
+ <% entries.each do |entry| %>
25
+ <tr>
26
+
27
+
28
+ <td><%=entry.id%></td>
29
+ <td><%=entry.owner%></td>
30
+ <td><%=entry.action%></td>
31
+ <td><%=entry.object%></td>
32
+ <td><%=entry.client_addr%></td>
33
+ <td><%=entry.client_host%></td>
34
+ <td><%=entry.datestamp%></td>
35
+ </tr>
36
+ <% end %>
37
+ </table>
38
+ <% else %>
39
+ <span class="notice"> The log is empty.</span>
40
+ <% end %>
@@ -0,0 +1,71 @@
1
+
2
+ <form action="/modules" method="post">
3
+
4
+ <%= csrf_tag %>
5
+ <div id="page-intro">
6
+ <h2>Modules</h2>
7
+ <p>
8
+ Module components assert and log entities of security interest about a web application.
9
+ <br/><br/>
10
+ </p>
11
+ <p>
12
+ <input type="button" onclick="javascript:checkAll( 'audit' );checkAll( 'recon' );" value="Check all"/>
13
+ <input type="button" onclick="javascript:uncheckAll( 'audit' );uncheckAll( 'recon' );" value="Uncheck all"/>
14
+ <input type="submit" value="Save" />
15
+ </p>
16
+ </div>
17
+
18
+ <%= erb :flash, {:layout => false} %>
19
+ <div class="left">
20
+ <fieldset>
21
+ <h3>Audit</h3>
22
+ <p>Audit modules actively test the web application via inputs like link parameters, forms, cookies and headers in order to assert the existence of security Issues.</p>
23
+ <p>
24
+ <input type="button" onclick="javascript:checkAll( 'audit' );" value="Check all"/>
25
+ <input type="button" onclick="javascript:uncheckAll( 'audit' );" value="Uncheck all"/>
26
+ </p>
27
+
28
+ <% modules.each do |mod|%>
29
+ <% next if mod['path'] =~ /recon/ %>
30
+ <h4>
31
+ <input type="checkbox" class="audit" name="modules[<%=mod['mod_name']%>]"
32
+ <% if session['opts']['modules'] && ( session['opts']['modules'][0] == '*' || session['opts']['modules'].include?( mod['mod_name'] ) ) %> checked="checked" <% end %> />
33
+ <%=escape( mod['name'] )%>
34
+ </h4>
35
+ <pre class="notice"> <%=prep_description( escape( mod['description'] ) )%></pre>
36
+ <p>
37
+ <strong>Version:</strong> <%=mod['version']%><br/>
38
+ <strong>Author:</strong> <%=escape( mod['author'])%>
39
+ </p>
40
+
41
+ <% end %>
42
+ </fieldset>
43
+ </div>
44
+
45
+ <div class="right">
46
+ <fieldset>
47
+ <h3>Recon</h3>
48
+ <p>Recon modules passively test the web application, mainly analyzing server configuration, responses and looking for directories and files.</p>
49
+ <p>
50
+ <input type="button" onclick="javascript:checkAll( 'recon' );" value="Check all"/>
51
+ <input type="button" onclick="javascript:uncheckAll( 'recon' );" value="Uncheck all"/>
52
+ </p>
53
+
54
+ <% modules.each do |mod|%>
55
+ <% next if mod['path'] =~ /audit/ %>
56
+ <h4>
57
+ <input type="checkbox" class="recon" name="modules[<%=mod['mod_name']%>]"
58
+ <% if session['opts']['modules'] && ( session['opts']['modules'][0] == '*' || session['opts']['modules'].include?( mod['mod_name'] ) ) %> checked="checked" <% end %> />
59
+ <%=escape( mod['name'] )%>
60
+ </h4>
61
+ <pre class="notice"> <%=prep_description( escape( mod['description'] ) )%></pre>
62
+ <p>
63
+ <strong>Version:</strong> <%=mod['version']%><br/>
64
+ <strong>Author:</strong> <%=escape( mod['author'])%>
65
+ </p>
66
+ <% end %>
67
+ </fieldset>
68
+ </div>
69
+
70
+
71
+ </form>
@@ -0,0 +1,23 @@
1
+
2
+ <% if !component['options'].empty? && !plugin_has_required_file_option?( component['options'] )%> <h5>Options</h5>
3
+ <% component['options'].each do |opt| %>
4
+ <p class="options">
5
+
6
+ <%=escape(opt['desc'])%> <% if opt['required'] %> <strong>*</strong> <%end%>
7
+
8
+ <input name="options[<%=component['plug_name']%>][<%=opt['name']%>]"
9
+
10
+ <% if opt['type'] == 'path' %>
11
+ disabled="disabled" type="file" value="<%=opt['default']%>"
12
+ <% elsif opt['type'] == 'bool' %>
13
+ type="checkbox" <% if opt['default']%> checked="checked" <%end%>
14
+ <% else %>
15
+ value="<%=opt['default']%>"
16
+ <%end%>
17
+
18
+ />
19
+
20
+
21
+ </p>
22
+ <%end%>
23
+ <%end%>
@@ -0,0 +1,51 @@
1
+ <% if issues.size > 0 %>
2
+
3
+ <h4>Total: <%=issues.size%></h4>
4
+ <% issues.each_with_index do |issue, i|%>
5
+ <p>
6
+ <h5>[<%=i+1%>] <%= issue.name %> ( Severity: <%= issue.severity %> )</h5>
7
+ In <%= issue.elem %>
8
+
9
+ <% if issue.var%>
10
+ input <em><%= issue.var %></em>
11
+ <%end%>
12
+
13
+ <% if issue.method %>
14
+ using <%= issue.method %>
15
+ <%end%>
16
+
17
+ at <a href="<%= issue.url %>"><%= issue.url %></a>.
18
+ <br/>
19
+
20
+ <% if (issue.variations[0]['response'] && !issue.variations[0]['response'].empty?) && issue.variations[0]['regexp_match'] %>
21
+
22
+ <div style="display: none" id="inspection-dialog_<%=i%>" title="Relevant content is shown in red.">
23
+ <% match = CGI.escapeHTML( issue.variations[0]['regexp_match'] )%>
24
+ <pre> <%=CGI.escapeHTML( issue.variations[0]['response'] ).gsub( match, '<strong style="color: red">' + match + '</strong>' ) %> </pre>
25
+ </div>
26
+
27
+ <form style="display:inline" action="#">
28
+ <input onclick="javascript:inspect( '#inspection-dialog_<%=i%>')" type="button" value="Inspect" />
29
+ </form>
30
+
31
+ <%end%>
32
+
33
+
34
+ <% if issue.method && (issue.elem.downcase == 'form' || issue.elem.downcase == 'link' ) &&
35
+ ( issue.method.downcase == 'get' || issue.method.downcase == 'post' ) %>
36
+ <form style="display:inline" action="<%=issue.url%>" target="_blank" method="<%=issue.method.downcase%>">
37
+ <% if issue.variations[0]['opts'][:combo]%>
38
+ <%issue.variations[0]['opts'][:combo].each_pair do |name, value|%>
39
+ <input type="hidden" name="<%=escape(name)%>" value="<%=escape( value )%>" />
40
+ <%end%>
41
+ <%end%>
42
+ <input type="submit" value="Replay" />
43
+ </form>
44
+ <%end%>
45
+
46
+ </p>
47
+ <%end%>
48
+
49
+ <%else%>
50
+ <h4> Nothing yet, once something is found you'll be the first to know...</h4>
51
+ <%end%>
@@ -0,0 +1,42 @@
1
+
2
+ <form action="/plugins" method="post">
3
+
4
+ <%= csrf_tag %>
5
+ <div id="page-intro">
6
+ <h2>Plugins</h2>
7
+ <p>
8
+ Plugin components extend the functionality of the framework in abstract ways.
9
+ <br/>
10
+ <br/>
11
+ </p>
12
+ <p>
13
+ <input type="button" onclick="javascript:checkAll( 'plugin' );" value="Check all"/>
14
+ <input type="button" onclick="javascript:uncheckAll( 'plugin' );" value="Uncheck all"/>
15
+ <input type="submit" value="Save" />
16
+ </p>
17
+ </div>
18
+
19
+ <%= erb :flash, {:layout => false} %>
20
+ <% plugins.each do |plugin|%>
21
+ <fieldset>
22
+ <legend>
23
+ <input <%if plugin_has_required_file_option?( plugin['options'] )%> disabled="disabled" <%end%> type="checkbox" class="plugin" name="plugins[<%=plugin['plug_name']%>]"
24
+ <% if session['opts']['plugins'] && session['opts']['plugins'].include?( plugin['plug_name'] ) %> checked="checked" <% end %> />
25
+ <%=plugin['name']%>
26
+ <%if plugin_has_required_file_option?( plugin['options'] )%>
27
+ <em> (This plugin requires an option type which is not yet supported by the WebUI)</em>
28
+ <%end%>
29
+ </legend>
30
+ <h5>Description</h5>
31
+ <pre class="notice"> <%=prep_description( escape( plugin['description'] ) )%></pre>
32
+
33
+ <%= erb :options, { :layout => false }, :component => plugin%>
34
+
35
+ <p>
36
+ <strong>Version:</strong> <%=plugin['version']%><br/>
37
+ <strong>Author:</strong> <%=escape( plugin['author'])%>
38
+ </p>
39
+ </fieldset>
40
+ <% end %>
41
+
42
+ </form>
@@ -0,0 +1,30 @@
1
+
2
+ <%= erb :flash, {:layout => false} %>
3
+
4
+ <%= csrf_tag %>
5
+ <div id="page-intro">
6
+ <h2>Report formats</h2>
7
+ <p>
8
+ This page lists all available report formats.
9
+ <br/>
10
+ <br/>
11
+ </p>
12
+
13
+ <form action="/reports" method="get">
14
+ <input type="submit" value="Back to reports" />
15
+ </form>
16
+
17
+ </div>
18
+
19
+ <% reports.each do |report|%>
20
+ <fieldset>
21
+ <h3><%=escape( report['name'] )%></h3>
22
+ <h4>Description</h4>
23
+ <div class="notice"> <%=escape( report['description'] )%></div>
24
+
25
+ <p>
26
+ <strong>Version:</strong> <%=report['version']%><br/>
27
+ <strong>Author:</strong> <%=escape( report['author'])%>
28
+ </p>
29
+ </fieldset>
30
+ <% end %>
@@ -0,0 +1,55 @@
1
+
2
+ <div id="page-intro">
3
+ <h2>Reports</h2>
4
+ <p>This page allows you to review the results of the scans you have performed and export them in various formats.
5
+ <br/><br/>
6
+ </p>
7
+
8
+ <% if report_count > 0 %>
9
+ <form action="/reports/formats" method="get">
10
+ <input type="submit" value="View formats" />
11
+ </form>
12
+
13
+ <form action="/reports/delete" method="post">
14
+ <%= csrf_tag %>
15
+ <input type="submit" value="Delete all" />
16
+ </form>
17
+ <% end %>
18
+
19
+ </div>
20
+ <%= erb :flash, {:layout => false} %>
21
+
22
+ <% if !reports.empty? %>
23
+ <table>
24
+ <tr>
25
+ <th>Host</th>
26
+ <th>Audit date</th>
27
+ <th>Report formats</th>
28
+ </tr>
29
+ <% reports.each do |report| %>
30
+ <tr>
31
+
32
+
33
+ <td><%=report['host']%></td>
34
+ <td><%=report['date']%></td>
35
+
36
+ <td>
37
+ <ul class="reports">
38
+ <% available.each do |avail| %>
39
+ <li><a href="/report/<%=CGI.escape(report['name'])%>.<%=avail['rep_name']%>"><%=escape(avail['name'])%></a></li>
40
+ <%end%>
41
+ </ul>
42
+ </td>
43
+
44
+ <td>
45
+ <form action="/report/<%=CGI.escape(report['name'])%>/delete" method="post">
46
+ <%= csrf_tag %>
47
+ <input type="submit" value="Delete" />
48
+ </form>
49
+ </td>
50
+ </tr>
51
+ <% end %>
52
+ </table>
53
+ <% else %>
54
+ <span class="notice"> There are no available reports at the moment.</span>
55
+ <% end %>
@@ -0,0 +1,120 @@
1
+ <script type="text/javascript">
2
+ $(function() {
3
+ $( "#slider" ).slider({
4
+ value: <%=session['opts']['settings']['http_req_limit']%>,
5
+ min: 1,
6
+ max: 200,
7
+ step: 1,
8
+ slide: function( event, ui ) {
9
+ $( "#http_req_limit" ).val( ui.value );
10
+ }
11
+ });
12
+ $( "#http_req_limit" ).val( $( "#slider" ).slider( "value" ) );
13
+ });
14
+ </script>
15
+
16
+ <form action="/settings" method="post" enctype="multipart/form-data">
17
+
18
+ <%= csrf_tag %>
19
+ <div id="page-intro">
20
+ <h2>Settings</h2>
21
+ <p>General settings regarding the internals of the Arachni Framework.
22
+ <br/>
23
+ <br/>
24
+ </p>
25
+ <p>
26
+ <input type="submit" class="reset" value="Save" />
27
+ </p>
28
+ </div>
29
+
30
+ <%= erb :flash, {:layout => false} %>
31
+
32
+ <div class="left options">
33
+ <fieldset>
34
+ <legend>Auditor</legend>
35
+ <p>
36
+ Audit links: <input type="checkbox" name="audit_links" <% if session['opts']['settings']['audit_links'] == true %> checked="checked" <% end %> />
37
+ </p>
38
+ <p>
39
+ Audit forms: <input type="checkbox" name="audit_forms" <% if session['opts']['settings']['audit_forms'] == true %> checked="checked" <% end %> />
40
+ </p>
41
+ <p>
42
+ Audit cookies: <input type="checkbox" name="audit_cookies" <% if session['opts']['settings']['audit_cookies'] == true %> checked="checked" <% end %> />
43
+ </p>
44
+ <p>
45
+ Audit headers: <input type="checkbox" name="audit_headers" <% if session['opts']['settings']['audit_headers'] == true %> checked="checked" <% end %> />
46
+ </p>
47
+ <p>
48
+ Cookies to exclude: <textarea rows="2" cols="20" name="exclude_cookies"><%=session['opts']['settings']['exclude_cookies']%></textarea>
49
+ <br/>(Newline separated)
50
+ </p>
51
+ </fieldset>
52
+
53
+ <fieldset>
54
+ <legend>HTTP options</legend>
55
+ <p>
56
+ Cocurrent HTTP request limit: <label for="http_req_limit"></label>
57
+ <input id="http_req_limit" name="http_req_limit"/>
58
+ <div id="slider"></div>
59
+ <br/>
60
+ </p>
61
+ <p>
62
+ HTTP harvest last: <input type="checkbox" name="http_harvest_last" <% if session['opts']['settings']['http_harvest_last'] == true %> checked="checked" <% end %> />
63
+ </p>
64
+ <p>
65
+ Cookie jar: <input type="file" name="cookiejar" size="25" />
66
+ </p>
67
+ <p>
68
+ User agent: <input name="user_agent" value="<%=session['opts']['settings']['user_agent']%>"/>
69
+ </p>
70
+ <p>
71
+ Authorized by: <input name="authed_by" value="<%=session['opts']['settings']['authed_by']%>"/>
72
+ </p>
73
+
74
+ </fieldset>
75
+ </div>
76
+
77
+ <div class="right options">
78
+
79
+ <fieldset>
80
+ <legend>Crawler options</legend>
81
+ <p>
82
+ Exclude rules: <textarea rows="2" cols="20" name="exclude"><% if session['opts']['settings']['exclude']%><%=session['opts']['settings']['exclude'].join( "\r\n" )%><%end%></textarea>
83
+ <br/>(Newline separated)
84
+ </p>
85
+ <p>
86
+ Include rules: <textarea rows="2" cols="20" name="include"><% if session['opts']['settings']['include']%><%=session['opts']['settings']['include'].join( "\r\n" )%><%end%></textarea>
87
+ <br/>(Newline separated)
88
+ </p>
89
+ <p>
90
+ Redundant rules: <textarea rows="2" cols="20" name="redundant"><%=format_redundants( session['opts']['settings']['redundant'] )%></textarea>
91
+ <br/>(Newline separated)
92
+ <br/>(<em>regexp:counter</em>)
93
+ </p>
94
+ <p>
95
+ Depth: <input name="depth_limit" value="<%=session['opts']['settings']['depth_limit']%>"/>
96
+ <br/>(Default: infinite)
97
+ </p>
98
+ <p>
99
+ Link count limit: <input name="link_count_limit" value="<%=session['opts']['settings']['link_count_limit']%>"/>
100
+ <br/>(Default: infinite)
101
+ </p>
102
+ <p>
103
+ Redirect limit: <input name="redirect_limit" value="<%=session['opts']['settings']['redirect_limit']%>"/>
104
+ <br/>(Default: infinite)
105
+ </p>
106
+ <p>
107
+ Follow subdomain: <input type="checkbox" name="follow_subdomains" <% if session['opts']['settings']['follow_subdomains'] == true %> checked="checked" <% end %> />
108
+ </p>
109
+ <p>
110
+ Obey robot.txt file: <input type="checkbox" name="obey_robots_txt" <% if session['opts']['settings']['obey_robots_txt'] == true %> checked="checked" <% end %> />
111
+ </p>
112
+ <p>
113
+ Spider first: <input type="checkbox" name="spider_first" <% if session['opts']['settings']['spider_first'] == true %> checked="checked" <% end %> />
114
+ </p>
115
+ </fieldset>
116
+
117
+ </div>
118
+
119
+ </form>
120
+
@@ -0,0 +1,38 @@
1
+
2
+ <div id="page-intro">
3
+ <h2>Welcome to the Arachni WebUI v<%=Arachni::UI::Web::VERSION%>.</h2>
4
+ <p>Pardon the splash-screen, it's an one-time thing, but you really <strong>should</strong> read this stuff.</p>
5
+ </div>
6
+
7
+ <h2>General</h2>
8
+ <p>
9
+ This is the first version of this UI, scratch that, it's not even a real version..hence the "pre".<br/>
10
+ In the software world this means that the WebUI may empty your fridge, drink all your coffee, eat your puppy, slash your tires and/or burn down your house.<br/>
11
+ Nevertheless, I'd appreciate it if you gave it a shot and <a href="https://github.com/Zapotek/arachni/issues">let me know</a> if you find anything wrong with it.
12
+ </p>
13
+
14
+ <h2>What it is</h2>
15
+ <p>
16
+ It is a way to:
17
+ <ul>
18
+ <li>make working with Arachni easier</li>
19
+ <li>make report management easier</li>
20
+ <li>run and manage multiple scans at the same time <em>(each scan will try its best for maximum bandwidth utilization so it'll be like lions fighting in a cage -- make sure you have sufficient resources)</em></li>
21
+ </ul>
22
+ </p>
23
+
24
+ <h2>What it isn't (yet)</h2>
25
+ <p>
26
+ It isn't:
27
+ <ul>
28
+ <li>stable</li>
29
+ <li>a way to make Arachni's goodies available to multiple users <em>(you could but it wouldn't be safe)</em></li>
30
+ <li>a way to work with and manage multiple Dispatchers <em>(you can clear your session cookies to force the WebUI to ask you for a new Dispatcher to connect to but there are no guarantees)</em></li>
31
+ </ul>
32
+ </p>
33
+
34
+ <h2>What now</h2>
35
+ <p>
36
+ Now you can enjoy this system, everything is fairly user friendly and intuitive so you shouldn't have a problem.<br/>
37
+ This page won't bother you again, go ahead and take a look around.
38
+ </p>