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,16 @@
1
+ r57shell.php
2
+ r57.php
3
+ c99shell.php
4
+ c99.php
5
+ nstview.php
6
+ nst.php
7
+ rst.php
8
+ r57eng.php
9
+ shell.php
10
+ r.php
11
+ lol.php
12
+ zehir.php
13
+ c-h.v2.php
14
+ php-backdoor.php
15
+ simple-backdoor.php
16
+ cmdasp.asp
@@ -0,0 +1,177 @@
1
+ =begin
2
+ Arachni
3
+ Copyright (c) 2010-2011 Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
4
+
5
+ This is free software; you can copy and distribute and modify
6
+ this program under the term of the GPL v2.0 License
7
+ (See LICENSE file for details)
8
+
9
+ =end
10
+
11
+ module Arachni
12
+
13
+ module Modules
14
+
15
+ #
16
+ # Backup file discovery module.
17
+ #
18
+ # Appends common backup extesions to the filename of the page under audit<br/>
19
+ # and checks for its existence.
20
+ #
21
+ # @author: Tasos "Zapotek" Laskos
22
+ # <tasos.laskos@gmail.com>
23
+ # <zapotek@segfault.gr>
24
+ # @version: 0.1.5
25
+ #
26
+ #
27
+ class BackupFiles < Arachni::Module::Base
28
+
29
+ include Arachni::Module::Utilities
30
+
31
+ def initialize( page )
32
+ super( page )
33
+ end
34
+
35
+ def prepare
36
+ # to keep track of the requests and not repeat them
37
+ @@__audited ||= Set.new
38
+
39
+ # our results array
40
+ @results = []
41
+
42
+ @@__extensions ||=[]
43
+ return if !@@__extensions.empty?
44
+
45
+ read_file( 'extensions.txt' ) {
46
+ |file|
47
+ @@__extensions << file
48
+ }
49
+ end
50
+
51
+ def run( )
52
+
53
+ filename = File.basename( URI( normalize_url( @page.url ) ).path )
54
+ path = get_path( @page.url )
55
+
56
+ return if @@__audited.include?( path )
57
+
58
+ print_status( "Scanning..." )
59
+
60
+ if( !filename )
61
+ print_info( 'Backing out. ' +
62
+ 'Can\'t extract filename from url: ' + @page.url )
63
+ return
64
+ end
65
+
66
+ @@__extensions.each {
67
+ |ext|
68
+
69
+ #
70
+ # Test for the existance of the file + extension.
71
+ #
72
+
73
+ file = ext % filename # Example: index.php.bak
74
+ url = path + file
75
+ next if !( req1 = __request_once( url ) )
76
+
77
+
78
+ req1.on_complete {
79
+ |res|
80
+ __log_results( res, file )
81
+ }
82
+
83
+ file = ext % filename.gsub( /\.(.*)/, '' ) # Example: index.bak
84
+ url = path + file
85
+ next if !( req2 = __request_once( url ) )
86
+
87
+ req2.on_complete {
88
+ |res|
89
+ __log_results( res, file )
90
+ }
91
+ }
92
+
93
+ @@__audited << path
94
+ end
95
+
96
+
97
+ def self.info
98
+ {
99
+ :name => 'BackupFiles',
100
+ :description => %q{Tries to find sensitive backup files.},
101
+ :elements => [ ],
102
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
103
+ :version => '0.1.5',
104
+ :references => {},
105
+ :targets => { 'Generic' => 'all' },
106
+ :issue => {
107
+ :name => %q{A backup file exists on the server.},
108
+ :description => %q{},
109
+ :tags => [ 'path', 'backup', 'file' ],
110
+ :cew => '530',
111
+ :severity => Issue::Severity::HIGH,
112
+ :cvssv2 => '',
113
+ :remedy_guidance => '',
114
+ :remedy_code => '',
115
+ }
116
+
117
+ }
118
+ end
119
+
120
+ #
121
+ # Adds an issue to the @results array<br/>
122
+ # and outputs an "OK" message with the filename and its url.
123
+ #
124
+ # @param [Net::HTTPResponse] res the HTTP response
125
+ # @param [String] filename the discovered filename
126
+ #
127
+ def __log_results( res, filename )
128
+
129
+ # some webapps disregard the extension and load the page anyway
130
+ # which will lead to false positives, take care of that.
131
+ return if res.body == @page.html
132
+
133
+ return if( res.code != 200 || @http.custom_404?( res ) )
134
+
135
+ url = res.effective_url
136
+ # append the result to the results array
137
+ @results << Issue.new( {
138
+ :url => url,
139
+ :injected => filename,
140
+ :id => filename,
141
+ :elem => Issue::Element::PATH,
142
+ :response => res.body,
143
+ :headers => {
144
+ :request => res.request.headers,
145
+ :response => res.headers,
146
+ }
147
+ }.merge( self.class.info ) )
148
+
149
+ # register our results with the system
150
+ register_results( @results )
151
+
152
+ # inform the user that we have a match
153
+ print_ok( "Found #{filename} at " + url )
154
+ end
155
+
156
+ #
157
+ # Gets a URL only once
158
+ #
159
+ # @param [String] url the url to get
160
+ #
161
+ # @return [FalseClass/HTTPResponse] false if the url has been
162
+ # previously requested,<br/>
163
+ # the HTTPResponse otherwise
164
+ #
165
+ def __request_once( url )
166
+
167
+ print_status( "Checking for #{url}" )
168
+
169
+ # force the Trainer to analyze it and if it's HTML it'll extract any new attack vectors.
170
+ req = @http.get( url, :train => true )
171
+
172
+ return req
173
+ end
174
+
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,28 @@
1
+ %s.old
2
+ %s.OLD
3
+ %s.bak
4
+ %s.BAK
5
+ %s.zip
6
+ %s.ZIP
7
+ %s.gz
8
+ %s.tar.gz
9
+ %s.temp
10
+ %s.save
11
+ %s.orig
12
+ %s.backup
13
+ %s.000
14
+ %s~
15
+ %s~1
16
+ %s.cs
17
+ %s.pas
18
+ %s.vb
19
+ %s.java
20
+ %s.class
21
+ %s.sav
22
+ %s.saved
23
+ %s.rar
24
+ %s.src
25
+ %s.tmp
26
+ %s.inc
27
+ %s.copy
28
+ Copy%%20of%%20%s
@@ -0,0 +1,138 @@
1
+ =begin
2
+ Arachni
3
+ Copyright (c) 2010-2011 Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
4
+
5
+ This is free software; you can copy and distribute and modify
6
+ this program under the term of the GPL v2.0 License
7
+ (See LICENSE file for details)
8
+
9
+ =end
10
+
11
+ require 'digest/sha1'
12
+
13
+ module Arachni
14
+
15
+ module Modules
16
+
17
+ #
18
+ # Common directories discovery module.
19
+ #
20
+ # Looks for common, possibly sensitive, directories on the server.
21
+ #
22
+ # @author: Tasos "Zapotek" Laskos
23
+ # <tasos.laskos@gmail.com>
24
+ # <zapotek@segfault.gr>
25
+ # @version: 0.1.4
26
+ #
27
+ # @see http://cwe.mitre.org/data/definitions/538.html
28
+ #
29
+ #
30
+ class CommonDirectories < Arachni::Module::Base
31
+
32
+ include Arachni::Module::Utilities
33
+
34
+ def initialize( page )
35
+ super( page )
36
+ end
37
+
38
+ def prepare
39
+ # to keep track of the requests and not repeat them
40
+ @@__audited ||= Set.new
41
+
42
+ # our results array
43
+ @results = []
44
+
45
+ @@__directories ||=[]
46
+ return if !@@__directories.empty?
47
+
48
+ read_file( 'directories.txt' ) {
49
+ |file|
50
+ @@__directories << file
51
+ }
52
+ end
53
+
54
+ def run( )
55
+
56
+ path = get_path( @page.url )
57
+ return if @@__audited.include?( path )
58
+
59
+ print_status( "Scanning..." )
60
+
61
+ @@__directories.each {
62
+ |dirname|
63
+
64
+ url = path + dirname + '/'
65
+ print_status( "Checking for #{url}" )
66
+
67
+ req = @http.get( url, :train => true )
68
+
69
+ req.on_complete {
70
+ |res|
71
+ print_status( "Analyzing #{res.effective_url}" )
72
+ __log_results( res, dirname )
73
+ }
74
+ }
75
+
76
+ @@__audited << path
77
+ end
78
+
79
+ def self.info
80
+ {
81
+ :name => 'CommonDirectories',
82
+ :description => %q{Tries to find common directories on the server.},
83
+ :elements => [ ],
84
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
85
+ :version => '0.1.4',
86
+ :references => {},
87
+ :targets => { 'Generic' => 'all' },
88
+ :issue => {
89
+ :name => %q{A common directory exists on the server.},
90
+ :description => %q{},
91
+ :tags => [ 'path', 'directory', 'common' ],
92
+ :cwe => '538',
93
+ :severity => Issue::Severity::MEDIUM,
94
+ :cvssv2 => '',
95
+ :remedy_guidance => '',
96
+ :remedy_code => '',
97
+ }
98
+
99
+ }
100
+ end
101
+
102
+ #
103
+ # Adds an issue to the @results array<br/>
104
+ # and outputs an "OK" message with the dirname and its url.
105
+ #
106
+ # @param [Net::HTTPResponse] res the HTTP response
107
+ # @param [String] dirname the discovered dirname
108
+ # @param [String] url the url of the discovered file
109
+ #
110
+ def __log_results( res, dirname )
111
+
112
+ return if( res.code != 200 || @http.custom_404?( res ) )
113
+
114
+ url = res.effective_url
115
+ # append the result to the results array
116
+ @results << Issue.new( {
117
+ :url => url,
118
+ :injected => dirname,
119
+ :id => dirname,
120
+ :elem => Issue::Element::PATH,
121
+ :response => res.body,
122
+ :headers => {
123
+ :request => res.request.headers,
124
+ :response => res.headers,
125
+ }
126
+ }.merge( self.class.info ) )
127
+
128
+ # inform the user that we have a match
129
+ print_ok( "Found #{dirname} at " + url )
130
+
131
+ # register our results with the system
132
+ register_results( @results )
133
+
134
+ end
135
+
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,265 @@
1
+ _private
2
+ _vti_bin
3
+ cgi-bin
4
+ cgi-sys
5
+ mailman
6
+ iishelp
7
+ iisadmin
8
+ uploader
9
+ uploads
10
+ tsweb
11
+ query
12
+ recent
13
+ cache
14
+ common
15
+ wp-content
16
+ shell
17
+ readme
18
+ main
19
+ logfiles
20
+ index
21
+ default
22
+ details
23
+ example
24
+ examples
25
+ send
26
+ settings
27
+ feedback
28
+ global
29
+ globals
30
+ guestbook
31
+ admin_
32
+ admin_login
33
+ admin_logon
34
+ adminlogon
35
+ client
36
+ clients
37
+ cmd
38
+ INSTALL_admin
39
+ incomming
40
+ upload
41
+ backend
42
+ webmail
43
+ WebService
44
+ aspnet
45
+ Exchange
46
+ usage
47
+ WebApplication1
48
+ WebApplication2
49
+ WebApplication3
50
+ sign
51
+ signup
52
+ scans
53
+ webaccess
54
+ restricted
55
+ blog
56
+ pics
57
+ _logs
58
+ _errors
59
+ _tests
60
+ .adm
61
+ .admin
62
+ ~admin
63
+ secret
64
+ owa
65
+ db2
66
+ mrtg
67
+ other
68
+ accounts
69
+ warez
70
+ my
71
+ cc
72
+ creditcards
73
+ contact
74
+ press
75
+ p0rn
76
+ pron
77
+ pron
78
+ new%20folder
79
+ New%20Folder
80
+ oldfiles
81
+ old_files
82
+ sysbackup
83
+ temp
84
+ code
85
+ secure
86
+ secured
87
+ staff
88
+ src
89
+ manage
90
+ personal
91
+ publish
92
+ system
93
+ work
94
+ tests
95
+ stuff
96
+ mail
97
+ email
98
+ php
99
+ jsp
100
+ dev
101
+ devel
102
+ development
103
+ tools
104
+ share
105
+ update
106
+ updates
107
+ util
108
+ utils
109
+ register
110
+ search
111
+ service
112
+ services
113
+ report
114
+ reports
115
+ purchase
116
+ retail
117
+ reseller
118
+ app
119
+ beta
120
+ boot
121
+ bug
122
+ bugs
123
+ buy
124
+ auth
125
+ authadmin
126
+ import
127
+ apps
128
+ application
129
+ access-log
130
+ catalog
131
+ cert
132
+ crypto
133
+ cfdocs
134
+ classes
135
+ cdrom
136
+ css
137
+ doc
138
+ docs
139
+ download
140
+ downloads
141
+ down
142
+ excel
143
+ forum
144
+ etc
145
+ help
146
+ prv
147
+ source
148
+ backup
149
+ bak
150
+ old
151
+ include
152
+ inc
153
+ info
154
+ dat
155
+ data
156
+ test
157
+ tmp
158
+ save
159
+ archive
160
+ marketing
161
+ pass
162
+ passwd
163
+ passwords
164
+ password
165
+ jdbc
166
+ files
167
+ site
168
+ files
169
+ sales
170
+ log
171
+ logs
172
+ login
173
+ logon
174
+ logfile
175
+ guests
176
+ root
177
+ htdocs
178
+ account
179
+ sql
180
+ file
181
+ setup
182
+ website
183
+ conf
184
+ config
185
+ install
186
+ installer
187
+ shop
188
+ private
189
+ fpadmin
190
+ administrator
191
+ intranet
192
+ inventory
193
+ webadmin
194
+ employees
195
+ accounting
196
+ tree
197
+ pages
198
+ users
199
+ access
200
+ library
201
+ database
202
+ html
203
+ bin
204
+ Admin_files
205
+ credit
206
+ public
207
+ dbase
208
+ priv
209
+ customer
210
+ customers
211
+ asp
212
+ java
213
+ jdbc
214
+ jrun
215
+ job
216
+ zipfiles
217
+ pw
218
+ public
219
+ admin
220
+ new
221
+ adm
222
+ oracle
223
+ odbc
224
+ mall_log_files
225
+ WebTrend
226
+ order
227
+ support
228
+ msql
229
+ user
230
+ demo
231
+ demos
232
+ bkup
233
+ mp3
234
+ db
235
+ ftp
236
+ ibill
237
+ incoming
238
+ member
239
+ members
240
+ orders
241
+ sample
242
+ samples
243
+ scripts
244
+ stats
245
+ sitestats
246
+ support
247
+ www
248
+ errors
249
+ siteadmin
250
+ backups
251
+ testing
252
+ internal
253
+ ~home
254
+ home
255
+ ~guest
256
+ ~nobody
257
+ export
258
+ testweb
259
+ ~log
260
+ error_log
261
+ ccbill
262
+ network
263
+ xamp
264
+ xampp
265
+ lamp