metasploit-model 0.24.1-java

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 (380) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +27 -0
  4. data/.rspec +4 -0
  5. data/.simplecov +38 -0
  6. data/.travis.yml +6 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +43 -0
  9. data/LICENSE +27 -0
  10. data/README.md +33 -0
  11. data/Rakefile +52 -0
  12. data/app/models/metasploit/model/association/reflection.rb +46 -0
  13. data/app/models/metasploit/model/module/ancestor/spec/template.rb +125 -0
  14. data/app/models/metasploit/model/module/class/spec/template.rb +92 -0
  15. data/app/models/metasploit/model/module/instance/spec/template.rb +97 -0
  16. data/app/models/metasploit/model/search/group/base.rb +21 -0
  17. data/app/models/metasploit/model/search/group/intersection.rb +4 -0
  18. data/app/models/metasploit/model/search/group/union.rb +4 -0
  19. data/app/models/metasploit/model/search/operation/base.rb +39 -0
  20. data/app/models/metasploit/model/search/operation/boolean.rb +36 -0
  21. data/app/models/metasploit/model/search/operation/date.rb +37 -0
  22. data/app/models/metasploit/model/search/operation/integer.rb +14 -0
  23. data/app/models/metasploit/model/search/operation/null.rb +26 -0
  24. data/app/models/metasploit/model/search/operation/set.rb +34 -0
  25. data/app/models/metasploit/model/search/operation/set/integer.rb +5 -0
  26. data/app/models/metasploit/model/search/operation/set/string.rb +5 -0
  27. data/app/models/metasploit/model/search/operation/string.rb +11 -0
  28. data/app/models/metasploit/model/search/operation/union.rb +59 -0
  29. data/app/models/metasploit/model/search/operator/association.rb +43 -0
  30. data/app/models/metasploit/model/search/operator/attribute.rb +60 -0
  31. data/app/models/metasploit/model/search/operator/base.rb +34 -0
  32. data/app/models/metasploit/model/search/operator/delegation.rb +40 -0
  33. data/app/models/metasploit/model/search/operator/deprecated/app.rb +27 -0
  34. data/app/models/metasploit/model/search/operator/deprecated/author.rb +33 -0
  35. data/app/models/metasploit/model/search/operator/deprecated/authority.rb +43 -0
  36. data/app/models/metasploit/model/search/operator/deprecated/platform.rb +45 -0
  37. data/app/models/metasploit/model/search/operator/deprecated/ref.rb +50 -0
  38. data/app/models/metasploit/model/search/operator/deprecated/text.rb +32 -0
  39. data/app/models/metasploit/model/search/operator/null.rb +44 -0
  40. data/app/models/metasploit/model/search/operator/single.rb +98 -0
  41. data/app/models/metasploit/model/search/operator/union.rb +33 -0
  42. data/app/models/metasploit/model/search/query.rb +171 -0
  43. data/app/models/metasploit/model/spec/template.rb +273 -0
  44. data/app/models/metasploit/model/visitation/visitor.rb +69 -0
  45. data/app/validators/derivation_validator.rb +17 -0
  46. data/app/validators/dynamic_length_validator.rb +45 -0
  47. data/app/validators/ip_format_validator.rb +31 -0
  48. data/app/validators/nil_validator.rb +16 -0
  49. data/app/validators/parameters_validator.rb +147 -0
  50. data/app/validators/password_is_strong_validator.rb +115 -0
  51. data/config/locales/en.yml +209 -0
  52. data/lib/metasploit/model.rb +38 -0
  53. data/lib/metasploit/model/architecture.rb +346 -0
  54. data/lib/metasploit/model/association.rb +49 -0
  55. data/lib/metasploit/model/association/error.rb +40 -0
  56. data/lib/metasploit/model/author.rb +58 -0
  57. data/lib/metasploit/model/authority.rb +134 -0
  58. data/lib/metasploit/model/authority/bid.rb +10 -0
  59. data/lib/metasploit/model/authority/cve.rb +10 -0
  60. data/lib/metasploit/model/authority/msb.rb +10 -0
  61. data/lib/metasploit/model/authority/osvdb.rb +10 -0
  62. data/lib/metasploit/model/authority/pmasa.rb +10 -0
  63. data/lib/metasploit/model/authority/secunia.rb +10 -0
  64. data/lib/metasploit/model/authority/us_cert_vu.rb +10 -0
  65. data/lib/metasploit/model/authority/waraxe.rb +31 -0
  66. data/lib/metasploit/model/authority/zdi.rb +10 -0
  67. data/lib/metasploit/model/base.rb +25 -0
  68. data/lib/metasploit/model/configuration.rb +72 -0
  69. data/lib/metasploit/model/configuration/autoload.rb +109 -0
  70. data/lib/metasploit/model/configuration/child.rb +12 -0
  71. data/lib/metasploit/model/configuration/error.rb +4 -0
  72. data/lib/metasploit/model/configuration/i18n.rb +54 -0
  73. data/lib/metasploit/model/configuration/parent.rb +50 -0
  74. data/lib/metasploit/model/configured.rb +46 -0
  75. data/lib/metasploit/model/derivation.rb +110 -0
  76. data/lib/metasploit/model/derivation/full_name.rb +25 -0
  77. data/lib/metasploit/model/email_address.rb +128 -0
  78. data/lib/metasploit/model/engine.rb +34 -0
  79. data/lib/metasploit/model/error.rb +7 -0
  80. data/lib/metasploit/model/file.rb +49 -0
  81. data/lib/metasploit/model/invalid.rb +17 -0
  82. data/lib/metasploit/model/module.rb +8 -0
  83. data/lib/metasploit/model/module/action.rb +58 -0
  84. data/lib/metasploit/model/module/ancestor.rb +494 -0
  85. data/lib/metasploit/model/module/architecture.rb +40 -0
  86. data/lib/metasploit/model/module/author.rb +47 -0
  87. data/lib/metasploit/model/module/class.rb +406 -0
  88. data/lib/metasploit/model/module/handler.rb +35 -0
  89. data/lib/metasploit/model/module/instance.rb +626 -0
  90. data/lib/metasploit/model/module/path.rb +165 -0
  91. data/lib/metasploit/model/module/platform.rb +38 -0
  92. data/lib/metasploit/model/module/rank.rb +91 -0
  93. data/lib/metasploit/model/module/reference.rb +38 -0
  94. data/lib/metasploit/model/module/stance.rb +22 -0
  95. data/lib/metasploit/model/module/target.rb +80 -0
  96. data/lib/metasploit/model/module/target/architecture.rb +42 -0
  97. data/lib/metasploit/model/module/target/platform.rb +42 -0
  98. data/lib/metasploit/model/module/type.rb +44 -0
  99. data/lib/metasploit/model/nilify_blanks.rb +53 -0
  100. data/lib/metasploit/model/platform.rb +250 -0
  101. data/lib/metasploit/model/real_pathname.rb +18 -0
  102. data/lib/metasploit/model/reference.rb +108 -0
  103. data/lib/metasploit/model/search.rb +63 -0
  104. data/lib/metasploit/model/search/association.rb +32 -0
  105. data/lib/metasploit/model/search/attribute.rb +51 -0
  106. data/lib/metasploit/model/search/operation.rb +31 -0
  107. data/lib/metasploit/model/search/operation/integer/value.rb +33 -0
  108. data/lib/metasploit/model/search/operation/string/value.rb +14 -0
  109. data/lib/metasploit/model/search/operator.rb +10 -0
  110. data/lib/metasploit/model/search/operator/help.rb +47 -0
  111. data/lib/metasploit/model/search/with.rb +40 -0
  112. data/lib/metasploit/model/spec.rb +140 -0
  113. data/lib/metasploit/model/spec/error.rb +9 -0
  114. data/lib/metasploit/model/spec/i18n_exception_handler.rb +19 -0
  115. data/lib/metasploit/model/spec/pathname_collision.rb +28 -0
  116. data/lib/metasploit/model/spec/template/write.rb +42 -0
  117. data/lib/metasploit/model/spec/temporary_pathname.rb +59 -0
  118. data/lib/metasploit/model/translation.rb +31 -0
  119. data/lib/metasploit/model/version.rb +31 -0
  120. data/lib/metasploit/model/visitation.rb +9 -0
  121. data/lib/metasploit/model/visitation/visit.rb +103 -0
  122. data/lib/tasks/yard.rake +30 -0
  123. data/metasploit-model.gemspec +39 -0
  124. data/script/rails +9 -0
  125. data/spec/app/models/metasploit/model/association/reflection_spec.rb +48 -0
  126. data/spec/app/models/metasploit/model/module/ancestor/spec/template_spec.rb +174 -0
  127. data/spec/app/models/metasploit/model/module/class/spec/template_spec.rb +222 -0
  128. data/spec/app/models/metasploit/model/module/instance/spec/template_spec.rb +201 -0
  129. data/spec/app/models/metasploit/model/search/group/base_spec.rb +5 -0
  130. data/spec/app/models/metasploit/model/search/group/intersection_spec.rb +5 -0
  131. data/spec/app/models/metasploit/model/search/group/union_spec.rb +5 -0
  132. data/spec/app/models/metasploit/model/search/operation/base_spec.rb +70 -0
  133. data/spec/app/models/metasploit/model/search/operation/boolean_spec.rb +56 -0
  134. data/spec/app/models/metasploit/model/search/operation/date_spec.rb +89 -0
  135. data/spec/app/models/metasploit/model/search/operation/integer_spec.rb +9 -0
  136. data/spec/app/models/metasploit/model/search/operation/null_spec.rb +64 -0
  137. data/spec/app/models/metasploit/model/search/operation/set/integer_spec.rb +7 -0
  138. data/spec/app/models/metasploit/model/search/operation/set/string_spec.rb +7 -0
  139. data/spec/app/models/metasploit/model/search/operation/set_spec.rb +126 -0
  140. data/spec/app/models/metasploit/model/search/operation/string_spec.rb +9 -0
  141. data/spec/app/models/metasploit/model/search/operation/union_spec.rb +124 -0
  142. data/spec/app/models/metasploit/model/search/operator/association_spec.rb +108 -0
  143. data/spec/app/models/metasploit/model/search/operator/attribute_spec.rb +104 -0
  144. data/spec/app/models/metasploit/model/search/operator/base_spec.rb +34 -0
  145. data/spec/app/models/metasploit/model/search/operator/delegation_spec.rb +108 -0
  146. data/spec/app/models/metasploit/model/search/operator/deprecated/app_spec.rb +62 -0
  147. data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +161 -0
  148. data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +123 -0
  149. data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +112 -0
  150. data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +327 -0
  151. data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +357 -0
  152. data/spec/app/models/metasploit/model/search/operator/null_spec.rb +41 -0
  153. data/spec/app/models/metasploit/model/search/operator/single_spec.rb +327 -0
  154. data/spec/app/models/metasploit/model/search/operator/union_spec.rb +92 -0
  155. data/spec/app/models/metasploit/model/search/query_spec.rb +742 -0
  156. data/spec/app/models/metasploit/model/spec/template_spec.rb +23 -0
  157. data/spec/app/models/metasploit/model/visitation/visitor_spec.rb +45 -0
  158. data/spec/app/validators/derivation_validator_spec.rb +92 -0
  159. data/spec/app/validators/dynamic_length_validator_spec.rb +293 -0
  160. data/spec/app/validators/ip_format_validator_spec.rb +124 -0
  161. data/spec/app/validators/nil_validator_spec.rb +69 -0
  162. data/spec/app/validators/parameters_validator_spec.rb +342 -0
  163. data/spec/app/validators/password_is_strong_validator_spec.rb +250 -0
  164. data/spec/dummy/Rakefile +7 -0
  165. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  166. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  167. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  168. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  169. data/spec/dummy/app/mailers/.gitkeep +0 -0
  170. data/spec/dummy/app/models/dummy/architecture.rb +92 -0
  171. data/spec/dummy/app/models/dummy/author.rb +15 -0
  172. data/spec/dummy/app/models/dummy/authority.rb +130 -0
  173. data/spec/dummy/app/models/dummy/email_address.rb +27 -0
  174. data/spec/dummy/app/models/dummy/module/action.rb +25 -0
  175. data/spec/dummy/app/models/dummy/module/ancestor.rb +67 -0
  176. data/spec/dummy/app/models/dummy/module/architecture.rb +19 -0
  177. data/spec/dummy/app/models/dummy/module/author.rb +28 -0
  178. data/spec/dummy/app/models/dummy/module/class.rb +69 -0
  179. data/spec/dummy/app/models/dummy/module/instance.rb +209 -0
  180. data/spec/dummy/app/models/dummy/module/path.rb +64 -0
  181. data/spec/dummy/app/models/dummy/module/platform.rb +19 -0
  182. data/spec/dummy/app/models/dummy/module/rank.rb +44 -0
  183. data/spec/dummy/app/models/dummy/module/reference.rb +19 -0
  184. data/spec/dummy/app/models/dummy/module/target.rb +62 -0
  185. data/spec/dummy/app/models/dummy/module/target/architecture.rb +19 -0
  186. data/spec/dummy/app/models/dummy/module/target/platform.rb +19 -0
  187. data/spec/dummy/app/models/dummy/platform.rb +58 -0
  188. data/spec/dummy/app/models/dummy/reference.rb +31 -0
  189. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  190. data/spec/dummy/config.ru +4 -0
  191. data/spec/dummy/config/application.rb +43 -0
  192. data/spec/dummy/config/boot.rb +10 -0
  193. data/spec/dummy/config/environment.rb +5 -0
  194. data/spec/dummy/config/environments/development.rb +27 -0
  195. data/spec/dummy/config/environments/production.rb +63 -0
  196. data/spec/dummy/config/environments/test.rb +29 -0
  197. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  198. data/spec/dummy/config/initializers/inflections.rb +15 -0
  199. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  200. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  201. data/spec/dummy/config/initializers/session_store.rb +3 -0
  202. data/spec/dummy/config/initializers/wrap_parameters.rb +9 -0
  203. data/spec/dummy/config/locales/en.yml +1 -0
  204. data/spec/dummy/config/routes.rb +2 -0
  205. data/spec/dummy/db/schema.rb +707 -0
  206. data/spec/dummy/lib/assets/.gitkeep +0 -0
  207. data/spec/dummy/log/.gitkeep +0 -0
  208. data/spec/dummy/public/404.html +26 -0
  209. data/spec/dummy/public/422.html +26 -0
  210. data/spec/dummy/public/500.html +25 -0
  211. data/spec/dummy/public/favicon.ico +0 -0
  212. data/spec/dummy/script/rails +6 -0
  213. data/spec/dummy/spec/factories/dummy/architectures.rb +13 -0
  214. data/spec/dummy/spec/factories/dummy/authorities.rb +32 -0
  215. data/spec/dummy/spec/factories/dummy/authors.rb +8 -0
  216. data/spec/dummy/spec/factories/dummy/email_addresses.rb +8 -0
  217. data/spec/dummy/spec/factories/dummy/module/actions.rb +13 -0
  218. data/spec/dummy/spec/factories/dummy/module/ancestors.rb +45 -0
  219. data/spec/dummy/spec/factories/dummy/module/architectures.rb +35 -0
  220. data/spec/dummy/spec/factories/dummy/module/authors.rb +10 -0
  221. data/spec/dummy/spec/factories/dummy/module/classes.rb +40 -0
  222. data/spec/dummy/spec/factories/dummy/module/instances.rb +86 -0
  223. data/spec/dummy/spec/factories/dummy/module/paths.rb +16 -0
  224. data/spec/dummy/spec/factories/dummy/module/platforms.rb +35 -0
  225. data/spec/dummy/spec/factories/dummy/module/ranks.rb +14 -0
  226. data/spec/dummy/spec/factories/dummy/module/references.rb +17 -0
  227. data/spec/dummy/spec/factories/dummy/module/target/architectures.rb +40 -0
  228. data/spec/dummy/spec/factories/dummy/module/target/platforms.rb +41 -0
  229. data/spec/dummy/spec/factories/dummy/module/targets.rb +46 -0
  230. data/spec/dummy/spec/factories/dummy/platforms.rb +3 -0
  231. data/spec/dummy/spec/factories/dummy/references.rb +26 -0
  232. data/spec/factories/metasploit/model/architectures.rb +6 -0
  233. data/spec/factories/metasploit/model/association/reflections.rb +9 -0
  234. data/spec/factories/metasploit/model/authorities.rb +28 -0
  235. data/spec/factories/metasploit/model/authors.rb +9 -0
  236. data/spec/factories/metasploit/model/bases.rb +10 -0
  237. data/spec/factories/metasploit/model/email_addresses.rb +14 -0
  238. data/spec/factories/metasploit/model/module/actions.rb +9 -0
  239. data/spec/factories/metasploit/model/module/ancestors.rb +180 -0
  240. data/spec/factories/metasploit/model/module/architectures.rb +15 -0
  241. data/spec/factories/metasploit/model/module/classes.rb +47 -0
  242. data/spec/factories/metasploit/model/module/handlers.rb +3 -0
  243. data/spec/factories/metasploit/model/module/instances.rb +83 -0
  244. data/spec/factories/metasploit/model/module/paths.rb +51 -0
  245. data/spec/factories/metasploit/model/module/platforms.rb +15 -0
  246. data/spec/factories/metasploit/model/module/ranks.rb +9 -0
  247. data/spec/factories/metasploit/model/module/references.rb +11 -0
  248. data/spec/factories/metasploit/model/module/stances.rb +3 -0
  249. data/spec/factories/metasploit/model/module/targets.rb +22 -0
  250. data/spec/factories/metasploit/model/module/types.rb +5 -0
  251. data/spec/factories/metasploit/model/references.rb +88 -0
  252. data/spec/factories/metasploit/model/search/operator/associations.rb +5 -0
  253. data/spec/factories/metasploit/model/search/operator/attributes.rb +7 -0
  254. data/spec/factories/metasploit/model/search/operator/bases.rb +5 -0
  255. data/spec/lib/metasploit/model/architecture_spec.rb +52 -0
  256. data/spec/lib/metasploit/model/association/error_spec.rb +48 -0
  257. data/spec/lib/metasploit/model/association_spec.rb +145 -0
  258. data/spec/lib/metasploit/model/author_spec.rb +6 -0
  259. data/spec/lib/metasploit/model/authority/bid_spec.rb +17 -0
  260. data/spec/lib/metasploit/model/authority/cve_spec.rb +17 -0
  261. data/spec/lib/metasploit/model/authority/msb_spec.rb +17 -0
  262. data/spec/lib/metasploit/model/authority/osvdb_spec.rb +17 -0
  263. data/spec/lib/metasploit/model/authority/pmasa_spec.rb +17 -0
  264. data/spec/lib/metasploit/model/authority/secunia_spec.rb +17 -0
  265. data/spec/lib/metasploit/model/authority/us_cert_vu_spec.rb +17 -0
  266. data/spec/lib/metasploit/model/authority/waraxe_spec.rb +51 -0
  267. data/spec/lib/metasploit/model/authority/zdi_spec.rb +21 -0
  268. data/spec/lib/metasploit/model/authority_spec.rb +10 -0
  269. data/spec/lib/metasploit/model/base_spec.rb +58 -0
  270. data/spec/lib/metasploit/model/configuration/autoload_spec.rb +165 -0
  271. data/spec/lib/metasploit/model/configuration/child_spec.rb +24 -0
  272. data/spec/lib/metasploit/model/configuration/error_spec.rb +5 -0
  273. data/spec/lib/metasploit/model/configuration/i18n_spec.rb +103 -0
  274. data/spec/lib/metasploit/model/configuration_spec.rb +106 -0
  275. data/spec/lib/metasploit/model/configured_spec.rb +41 -0
  276. data/spec/lib/metasploit/model/derivation/full_name_spec.rb +75 -0
  277. data/spec/lib/metasploit/model/derivation_spec.rb +217 -0
  278. data/spec/lib/metasploit/model/email_address_spec.rb +19 -0
  279. data/spec/lib/metasploit/model/engine_spec.rb +84 -0
  280. data/spec/lib/metasploit/model/file_spec.rb +43 -0
  281. data/spec/lib/metasploit/model/invalid_spec.rb +54 -0
  282. data/spec/lib/metasploit/model/module/action_spec.rb +6 -0
  283. data/spec/lib/metasploit/model/module/ancestor_spec.rb +6 -0
  284. data/spec/lib/metasploit/model/module/architecture_spec.rb +9 -0
  285. data/spec/lib/metasploit/model/module/author_spec.rb +6 -0
  286. data/spec/lib/metasploit/model/module/class_spec.rb +19 -0
  287. data/spec/lib/metasploit/model/module/handler_spec.rb +61 -0
  288. data/spec/lib/metasploit/model/module/instance_spec.rb +183 -0
  289. data/spec/lib/metasploit/model/module/path_spec.rb +6 -0
  290. data/spec/lib/metasploit/model/module/platform_spec.rb +9 -0
  291. data/spec/lib/metasploit/model/module/rank_spec.rb +29 -0
  292. data/spec/lib/metasploit/model/module/reference_spec.rb +9 -0
  293. data/spec/lib/metasploit/model/module/stance_spec.rb +30 -0
  294. data/spec/lib/metasploit/model/module/target/architecture_spec.rb +9 -0
  295. data/spec/lib/metasploit/model/module/target/platform_spec.rb +9 -0
  296. data/spec/lib/metasploit/model/module/target_spec.rb +9 -0
  297. data/spec/lib/metasploit/model/module/type_spec.rb +125 -0
  298. data/spec/lib/metasploit/model/nilify_blanks_spec.rb +156 -0
  299. data/spec/lib/metasploit/model/platform_spec.rb +100 -0
  300. data/spec/lib/metasploit/model/reference_spec.rb +21 -0
  301. data/spec/lib/metasploit/model/search/association_spec.rb +33 -0
  302. data/spec/lib/metasploit/model/search/attribute_spec.rb +99 -0
  303. data/spec/lib/metasploit/model/search/operation/integer/value_spec.rb +20 -0
  304. data/spec/lib/metasploit/model/search/operation/string/value_spec.rb +20 -0
  305. data/spec/lib/metasploit/model/search/operation_spec.rb +144 -0
  306. data/spec/lib/metasploit/model/search/operator/help_spec.rb +41 -0
  307. data/spec/lib/metasploit/model/search/with_spec.rb +81 -0
  308. data/spec/lib/metasploit/model/search_spec.rb +230 -0
  309. data/spec/lib/metasploit/model/spec/error_spec.rb +5 -0
  310. data/spec/lib/metasploit/model/spec/i18n_exception_handler_spec.rb +42 -0
  311. data/spec/lib/metasploit/model/spec/pathname_collision_spec.rb +55 -0
  312. data/spec/lib/metasploit/model/spec_spec.rb +114 -0
  313. data/spec/lib/metasploit/model/translation_spec.rb +82 -0
  314. data/spec/lib/metasploit/model/version_spec.rb +141 -0
  315. data/spec/lib/metasploit/model/visitation/visit_spec.rb +316 -0
  316. data/spec/lib/metasploit/model_spec.rb +68 -0
  317. data/spec/spec_helper.rb +48 -0
  318. data/spec/support/shared/contexts/metasploit/model/configuration.rb +11 -0
  319. data/spec/support/shared/contexts/metasploit/model/module/ancestor/contents/metasploit_module.rb +12 -0
  320. data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents.rb +10 -0
  321. data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents/metasploit_module.rb +15 -0
  322. data/spec/support/shared/contexts/metasploit/model/search/operator/union/children.rb +13 -0
  323. data/spec/support/shared/examples/derives.rb +115 -0
  324. data/spec/support/shared/examples/metasploit/model/architecture.rb +425 -0
  325. data/spec/support/shared/examples/metasploit/model/architecture/seed.rb +25 -0
  326. data/spec/support/shared/examples/metasploit/model/author.rb +27 -0
  327. data/spec/support/shared/examples/metasploit/model/authority.rb +124 -0
  328. data/spec/support/shared/examples/metasploit/model/authority/seed.rb +49 -0
  329. data/spec/support/shared/examples/metasploit/model/configuration/parent/child.rb +60 -0
  330. data/spec/support/shared/examples/metasploit/model/email_address.rb +220 -0
  331. data/spec/support/shared/examples/metasploit/model/module/action.rb +26 -0
  332. data/spec/support/shared/examples/metasploit/model/module/ancestor.rb +2004 -0
  333. data/spec/support/shared/examples/metasploit/model/module/ancestor/payload_factory.rb +63 -0
  334. data/spec/support/shared/examples/metasploit/model/module/architecture.rb +36 -0
  335. data/spec/support/shared/examples/metasploit/model/module/author.rb +29 -0
  336. data/spec/support/shared/examples/metasploit/model/module/class.rb +1514 -0
  337. data/spec/support/shared/examples/metasploit/model/module/handler.rb +21 -0
  338. data/spec/support/shared/examples/metasploit/model/module/instance.rb +1384 -0
  339. data/spec/support/shared/examples/metasploit/model/module/instance/class_methods.rb +537 -0
  340. data/spec/support/shared/examples/metasploit/model/module/instance/is_not_stanced_with_module_type.rb +22 -0
  341. data/spec/support/shared/examples/metasploit/model/module/instance/is_stanced_with_module_type.rb +38 -0
  342. data/spec/support/shared/examples/metasploit/model/module/instance/validates/dynamic_length_of.rb +131 -0
  343. data/spec/support/shared/examples/metasploit/model/module/path.rb +493 -0
  344. data/spec/support/shared/examples/metasploit/model/module/platform.rb +36 -0
  345. data/spec/support/shared/examples/metasploit/model/module/rank.rb +92 -0
  346. data/spec/support/shared/examples/metasploit/model/module/reference.rb +16 -0
  347. data/spec/support/shared/examples/metasploit/model/module/target.rb +29 -0
  348. data/spec/support/shared/examples/metasploit/model/module/target/architecture.rb +56 -0
  349. data/spec/support/shared/examples/metasploit/model/module/target/platform.rb +56 -0
  350. data/spec/support/shared/examples/metasploit/model/platform.rb +213 -0
  351. data/spec/support/shared/examples/metasploit/model/real_pathname.rb +29 -0
  352. data/spec/support/shared/examples/metasploit/model/reference.rb +410 -0
  353. data/spec/support/shared/examples/metasploit/model/search/operation/integer/value.rb +79 -0
  354. data/spec/support/shared/examples/metasploit/model/search/operation/string/value.rb +53 -0
  355. data/spec/support/shared/examples/metasploit/model/search/operator/help.rb +134 -0
  356. data/spec/support/shared/examples/metasploit/model/translation.rb +37 -0
  357. data/spec/support/shared/examples/search/query.rb +43 -0
  358. data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/app.rb +44 -0
  359. data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +60 -0
  360. data/spec/support/shared/examples/search_association.rb +13 -0
  361. data/spec/support/shared/examples/search_attribute.rb +27 -0
  362. data/spec/support/shared/examples/search_with.rb +36 -0
  363. data/spec/support/shared/matchers/allow_attribute.rb +17 -0
  364. data/spec/support/templates/metasploit/model/module/ancestors/_attributes.rb.erb +9 -0
  365. data/spec/support/templates/metasploit/model/module/ancestors/_methods.rb.erb +8 -0
  366. data/spec/support/templates/metasploit/model/module/ancestors/_validations.rb.erb +6 -0
  367. data/spec/support/templates/metasploit/model/module/ancestors/base.rb.erb +3 -0
  368. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_auxiliary.rb.erb +1 -0
  369. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_encoder.rb.erb +1 -0
  370. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_exploit.rb.erb +1 -0
  371. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_non_payload.rb.erb +5 -0
  372. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_nop.rb.erb +1 -0
  373. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_payload.rb.erb +4 -0
  374. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_post.rb.erb +1 -0
  375. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_handled.rb.erb +20 -0
  376. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_single.rb.erb +1 -0
  377. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stage.rb.erb +0 -0
  378. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stager.rb.erb +1 -0
  379. data/spec/support/templates/metasploit/model/module/classes/_methods.rb.erb +9 -0
  380. metadata +747 -0
@@ -0,0 +1,40 @@
1
+ module Metasploit
2
+ module Model
3
+ module Module
4
+ # Model that joins {Metasploit::Model::Architecture} and {Metasploit::Model::Module::Instance}.
5
+ module Architecture
6
+ extend ActiveModel::Naming
7
+ extend ActiveSupport::Concern
8
+
9
+ include Metasploit::Model::Translation
10
+
11
+ included do
12
+ include ActiveModel::Validations
13
+
14
+ #
15
+ # Validations
16
+ #
17
+
18
+ validates :architecture,
19
+ :presence => true
20
+ validates :module_instance,
21
+ :presence => true
22
+ end
23
+
24
+ #
25
+ # Attributes
26
+ #
27
+
28
+ # @!attribute [rw] architecture
29
+ # The architecture supported by the {#module_instance}.
30
+ #
31
+ # @return [Metasploit::Model::Architecture]
32
+
33
+ # @!attribute [rw] module_instance
34
+ # The module instance that supports {#architecture}.
35
+ #
36
+ # @return [Metasploit::Model::Module::Instance]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ module Metasploit
2
+ module Model
3
+ module Module
4
+ # Code shared between `Mdm::Module::Author` and `Metasploit::Framework::Module::Author`.
5
+ module Author
6
+ extend ActiveModel::Naming
7
+ extend ActiveSupport::Concern
8
+
9
+ include Metasploit::Model::Translation
10
+
11
+ included do
12
+ include ActiveModel::Validations
13
+
14
+ #
15
+ # Validations
16
+ #
17
+
18
+ validates :author,
19
+ :presence => true
20
+ validates :module_instance,
21
+ :presence => true
22
+ end
23
+
24
+ #
25
+ # Associations
26
+ #
27
+
28
+ # @!attribute [rw] author
29
+ # Author who wrote the {#module_instance module}.
30
+ #
31
+ # @return [Metasploit::Model::Author]
32
+
33
+ # @!attribute [rw] email_address
34
+ # Email address {#author} used when writing {#module_instance module}.
35
+ #
36
+ # @return [Metasploit::Model::EmailAddress] if {#author} gave an email address.
37
+ # @return [nil] if {#author} only gave a name.
38
+
39
+ # @!attribute [rw] module_instance
40
+ # Module written by {#author}.
41
+ #
42
+ # @return [Metasploit::Model::Module::Instance]
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -0,0 +1,406 @@
1
+ module Metasploit
2
+ module Model
3
+ module Module
4
+ # Code shared between `Mdm::Module::Class` and `Metasploit::Framework::Module::Class`.
5
+ module Class
6
+ extend ActiveModel::Naming
7
+ extend ActiveSupport::Concern
8
+
9
+ include Metasploit::Model::Translation
10
+
11
+ #
12
+ # CONSTANTS
13
+ #
14
+
15
+ # Valid values for {#payload_type} when {#payload?} is `true`.
16
+ PAYLOAD_TYPES = [
17
+ 'single',
18
+ 'staged'
19
+ ]
20
+
21
+ # The {Metasploit::Model::Module::Ancestor#payload_type} when {#payload_type} is 'staged'.
22
+ STAGED_ANCESTOR_PAYLOAD_TYPES = [
23
+ 'stage',
24
+ 'stager'
25
+ ]
26
+
27
+ included do
28
+ include ActiveModel::Validations
29
+ include Metasploit::Model::Derivation
30
+ include Metasploit::Model::Derivation::FullName
31
+ include Metasploit::Model::Search
32
+
33
+ #
34
+ # Derivations
35
+ #
36
+
37
+ derives :module_type, :validate => true
38
+ derives :payload_type, :validate => true
39
+ # reference_name depends on module_type and conditionally depends on payload_type if module_type is 'payload'
40
+ derives :reference_name, :validate => true
41
+
42
+ # full_name depends on module_type and reference_name
43
+ derives :full_name, :validate => true
44
+
45
+ #
46
+ # Search Attributes
47
+ #
48
+
49
+ search_attribute :full_name, :type => :string
50
+ search_attribute :module_type, :type => :string
51
+ search_attribute :payload_type, :type => :string
52
+ search_attribute :reference_name, :type => :string
53
+
54
+ #
55
+ # Validations
56
+ #
57
+
58
+ validate :ancestors_size
59
+ validate :ancestor_payload_types
60
+ validate :ancestor_module_types
61
+
62
+ validates :module_type,
63
+ :inclusion => {
64
+ :in => Metasploit::Model::Module::Type::ALL
65
+ }
66
+ validates :payload_type,
67
+ :inclusion => {
68
+ :if => :payload?,
69
+ :in => PAYLOAD_TYPES
70
+ },
71
+ :nil => {
72
+ :unless => :payload?
73
+ }
74
+ validates :rank,
75
+ :presence => true
76
+ validates :reference_name,
77
+ :presence => true
78
+ end
79
+
80
+ #
81
+ # Associations
82
+ #
83
+
84
+ # @!attribute [rw] rank
85
+ # The reliability of the module and likelyhood that the module won't knock over the service or host being
86
+ # exploited. Bigger values is better.
87
+ #
88
+ # @return [Metasploit::Model::Module::Rank]
89
+
90
+ # @!attribute [r] ancestors
91
+ # The Class or Modules that were loaded to make this module Class.
92
+ #
93
+ # @return [Array<Metasploit::Model::Module::Ancestor>]
94
+
95
+ #
96
+ # Attributes
97
+ #
98
+
99
+ # @!attribute [rw] full_name
100
+ # The full name (type + reference) for the Class<Msf::Module>. This is merely a denormalized cache of
101
+ # `"#{{#module_type}}/#{{#reference_name}}"` as full_name is used in numerous queries and reports.
102
+ #
103
+ # @return [String]
104
+
105
+ # @!attribute [rw] module_type
106
+ # A denormalized cache of the {Metasploit::Model::Module::Class#module_type ancestors' module_types}, which
107
+ # must all be the same. This cache exists so that queries for modules of a given type don't need include the
108
+ # {#ancestors}.
109
+ #
110
+ # @return [String]
111
+
112
+ # @!attribute [rw] payload_type
113
+ # For payload modules, the {PAYLOAD_TYPES type} of payload, either 'single' or 'staged'.
114
+ #
115
+ # @return [String] if {#payload?} is `true`.
116
+ # @return [nil] if {#payload?} is `false`
117
+
118
+ # @!attribute [rw] reference_name
119
+ # The reference name for the Class<Msf::Module>. For non-payloads, this will just be
120
+ # {Metasploit::Model::Module::Ancestor#reference_name} for the only element in {#ancestors}. For payloads
121
+ # composed of a stage and stager, the reference name will be derived from the
122
+ # {Metasploit::Model::Module::Ancestor#reference_name} of each element {#ancestors} or an alias defined in
123
+ # those Modules.
124
+ #
125
+ # @return [String]
126
+
127
+ #
128
+ # Instance Methods
129
+ #
130
+
131
+ # Derives {#module_type} from the consensus of {#ancestors ancestors'}
132
+ # {Metasploit::Model::Module::Ancestor#module_type module_types}.
133
+ #
134
+ # @return [String] if all {#ancestors} have the same
135
+ # {Metasploit::Model::Module::Ancestor#module_type module_type}.
136
+ # @return [nil] if there are no {#ancestors}.
137
+ # @return [nil] if {#ancestors} do not have the same
138
+ # {Metasploit::Model::Module::Ancestor#module_type module_type}.
139
+ def derived_module_type
140
+ module_type_consensus = nil
141
+ module_type_set = Set.new
142
+
143
+ ancestors.each do |ancestor|
144
+ module_type_set.add ancestor.module_type
145
+ end
146
+
147
+ if module_type_set.length == 1
148
+ module_type_consensus = module_type_set.to_a.first
149
+ end
150
+
151
+ module_type_consensus
152
+ end
153
+
154
+ # Derives {#payload_type} based on {#ancestors ancestor's}
155
+ # {Metasploit::Model::Module::Ancestor#payload_type payload_type}.
156
+ #
157
+ # @return ['single'] if {#payload?} and single ancestor with
158
+ # {Metasploit::Model::Module::Ancestor#payload_type payload_tye} 'single'.
159
+ # @return ['staged'] if {#payload?} and one ancestor with
160
+ # {Metasploit::Model::Module::Ancestor#payload_type payload_type} 'stager' and another ancestor with
161
+ # {Metasploit::Model::Module::Ancestor#payload_type payload_type} 'stage'.
162
+ # @return [nil] otherwise
163
+ def derived_payload_type
164
+ derived = nil
165
+
166
+ if payload?
167
+ case ancestors.length
168
+ when 1
169
+ if ancestors.first.payload_type == 'single'
170
+ derived = 'single'
171
+ end
172
+ when 2
173
+ payload_type_set = Set.new
174
+
175
+ ancestors.each do |ancestor|
176
+ payload_type_set.add ancestor.payload_type
177
+ end
178
+
179
+ if payload_type_set.include? 'stager' and payload_type_set.include? 'stage'
180
+ derived = 'staged'
181
+ end
182
+ end
183
+ end
184
+
185
+ derived
186
+ end
187
+
188
+ # Derives {#reference_name} from {#ancestors}.
189
+ #
190
+ # @return [String] '<single_ancestor.reference_name>/<single_ancestor.handler_type>' if {#payload_type} is
191
+ # 'single'.
192
+ # @return [String] '<stage_ancestor.reference_name>/<stager_ancestor.handler_type>' if {#payload_type} is
193
+ # 'staged'.
194
+ # @return [String] '<ancestor.reference_name>' if not {#payload?}.
195
+ # @return [nil] otherwise
196
+ def derived_reference_name
197
+ derived = nil
198
+
199
+ if payload?
200
+ case payload_type
201
+ when 'single'
202
+ derived = derived_single_payload_reference_name
203
+ when 'staged'
204
+ derived = derived_staged_payload_reference_name
205
+ end
206
+ else
207
+ if ancestors.length == 1
208
+ derived = ancestors.first.reference_name
209
+ end
210
+ end
211
+
212
+ derived
213
+ end
214
+
215
+ # Returns whether this represents a Class<Msf::Payload>.
216
+ #
217
+ # @return [true] if {#module_type} == 'payload'
218
+ # @return [false] if {#module_type} != 'payload'
219
+ def payload?
220
+ if module_type == 'payload'
221
+ true
222
+ else
223
+ false
224
+ end
225
+ end
226
+
227
+ private
228
+
229
+ # Validates that {#ancestors} all have the same {Metasploit::Model::Module::Ancestor#module_type} as
230
+ # {#module_type}.
231
+ #
232
+ # @return [void]
233
+ def ancestor_module_types
234
+ ancestor_module_type_set = Set.new
235
+
236
+ ancestors.each do |ancestor|
237
+ if module_type and ancestor.module_type != module_type
238
+ errors[:ancestors] << "can contain ancestors only with same module_type (#{module_type}); " \
239
+ "#{ancestor.full_name} cannot be an ancestor due to its module_type " \
240
+ "(#{ancestor.module_type})"
241
+ end
242
+
243
+ ancestor_module_type_set.add ancestor.module_type
244
+ end
245
+
246
+ if ancestor_module_type_set.length > 1
247
+ ancestor_module_type_sentence = ancestor_module_type_set.sort.to_sentence
248
+ errors[:ancestors] << "can only contain ancestors with one module_type, " \
249
+ "but contains multiple module_types (#{ancestor_module_type_sentence})"
250
+ end
251
+ end
252
+
253
+ # Validates that {#ancestors} have correct {Metasploit::Model::Module::Ancestor#payload_type payload_types} for
254
+ # the {#module_type} and {#payload_type}.
255
+ #
256
+ # @return [void]
257
+ def ancestor_payload_types
258
+ if payload?
259
+ case payload_type
260
+ when 'single'
261
+ ancestors.each do |ancestor|
262
+ unless ancestor.payload_type == 'single'
263
+ errors[:ancestors] << "cannot have an ancestor (#{ancestor.full_name}) " \
264
+ "with payload_type (#{ancestor.payload_type}) " \
265
+ "for class payload_type (#{payload_type})"
266
+ end
267
+ end
268
+ when 'staged'
269
+ ancestors_by_payload_type = ancestors.group_by(&:payload_type)
270
+
271
+ STAGED_ANCESTOR_PAYLOAD_TYPES.each do |ancestor_payload_type|
272
+ staged_payload_type_count(ancestors_by_payload_type, ancestor_payload_type)
273
+ end
274
+
275
+ ancestors_by_payload_type.each do |ancestor_payload_type, ancestors|
276
+ unless STAGED_ANCESTOR_PAYLOAD_TYPES.include? ancestor_payload_type
277
+ full_names = ancestors.map(&:full_name)
278
+ full_name_sentence = full_names.to_sentence
279
+
280
+ errors[:ancestors] << "cannot have ancestors (#{full_name_sentence}) " \
281
+ "with payload_type (#{ancestor_payload_type}) " \
282
+ "for class payload_type (#{payload_type}); " \
283
+ "only one stage and one stager ancestor is allowed"
284
+ end
285
+ end
286
+ end
287
+ else
288
+ ancestors.each do |ancestor|
289
+ if ancestor.payload_type
290
+ errors[:ancestors] << "cannot have an ancestor (#{ancestor.full_name}) " \
291
+ "with a payload_type (#{ancestor.payload_type}) " \
292
+ "for class module_type (#{module_type})"
293
+ end
294
+ end
295
+ end
296
+ end
297
+
298
+ # Validates that number of {#ancestors} is correct for the {#module_type}.
299
+ #
300
+ # @return [void]
301
+ def ancestors_size
302
+ if payload?
303
+ case payload_type
304
+ when 'single'
305
+ unless ancestors.size == 1
306
+ errors[:ancestors] << 'must have exactly one ancestor for single payload module class'
307
+ end
308
+ when 'staged'
309
+ unless ancestors.size == 2
310
+ errors[:ancestors] << 'must have exactly two ancestors (stager + stage) for staged payload module class'
311
+ end
312
+ # other (invalid) types are handled by validation on payload_type
313
+ end
314
+ else
315
+ unless ancestors.size == 1
316
+ errors[:ancestors] << 'must have exactly one ancestor as a non-payload module class'
317
+ end
318
+ end
319
+ end
320
+
321
+ # @note Caller should check that {#payload?} is `true` and {#payload_type} is 'single' before calling
322
+ # {#derived_single_payload_reference_name}.
323
+ #
324
+ # Derives {#reference_name} for single payload.
325
+ #
326
+ # @return [String, nil] '<ancestor.payload_name>'
327
+ # @return [nil] unless exactly one {#ancestors ancestor}.
328
+ # @return [nil] unless ancestor's {Metasploit::Model::Module::Ancestor#payload_type} is `'single'`.
329
+ def derived_single_payload_reference_name
330
+ derived = nil
331
+
332
+ if ancestors.length == 1
333
+ ancestor = ancestors.first
334
+
335
+ if ancestor.payload_type == 'single'
336
+ derived = ancestor.payload_name
337
+ end
338
+ end
339
+
340
+ derived
341
+ end
342
+
343
+ # @note Caller should check that {#payload?} is `true` and {#payload_type} is 'staged' before calling
344
+ # {#derived_staged_payload_reference_name}.
345
+ #
346
+ # Derives {#reference_name} for staged payload.
347
+ #
348
+ # @return [String] '<stage_ancestor.payload_name>/<stager_ancestor.payload_name>'
349
+ # @return [nil] unless exactly two {#ancestors ancestor}.
350
+ # @return [nil] unless {Metasploit::Model::Module::Ancestor#payload_type} is 'single'.
351
+ # @return [nil] if {Metasploit::Model::Module::Ancestor#payload_name} is `nil` for the stage.
352
+ # @return [nil] if {Metasploit::Model::Module::Ancestor#payload_name} is `nil` for the stager.
353
+ def derived_staged_payload_reference_name
354
+ derived = nil
355
+
356
+ if ancestors.length == 2
357
+ ancestors_by_payload_type = ancestors.group_by(&:payload_type)
358
+ stage_ancestors = ancestors_by_payload_type.fetch('stage', [])
359
+
360
+ # length can be 0..2
361
+ if stage_ancestors.length == 1
362
+ stage_ancestor = stage_ancestors.first
363
+
364
+ if stage_ancestor.payload_name
365
+ stager_ancestors = ancestors_by_payload_type.fetch('stager', [])
366
+
367
+ # length can be 0..1
368
+ if stager_ancestors.length == 1
369
+ stager_ancestor = stager_ancestors.first
370
+
371
+ if stager_ancestor.payload_name
372
+ derived = "#{stage_ancestor.payload_name}/#{stager_ancestor.payload_name}"
373
+ end
374
+ end
375
+ end
376
+ end
377
+ end
378
+
379
+ derived
380
+ end
381
+
382
+ # Validates that only 1 ancestor with the given payload_type exists.
383
+ #
384
+ # @param ancestors_by_payload_type [Hash{String => Array<Metasploit::Model::Module::Ancestor>}] Maps
385
+ # {Metasploit::Model::Module::Ancestor#payload_type} to the Array of {Metasploit::Model::Module::Ancestor}
386
+ # with that {Metasploit::Model::Module::Ancestor#payload_type}.
387
+ # @param ancestor_payload_type [String] {Metasploit::Model::Module::Ancestor#payload_type}.
388
+ # @return [void]
389
+ def staged_payload_type_count(ancestors_by_payload_type, ancestor_payload_type)
390
+ payload_type_ancestors = ancestors_by_payload_type.fetch(ancestor_payload_type, [])
391
+ payload_type_ancestor_count = payload_type_ancestors.length
392
+
393
+ if payload_type_ancestor_count < 1
394
+ errors[:ancestors] << "needs exactly one ancestor with payload_type (#{ancestor_payload_type}), " \
395
+ "but there are none."
396
+ elsif payload_type_ancestor_count > 1
397
+ full_names = payload_type_ancestors.map(&:full_name).sort
398
+ full_name_sentence = full_names.to_sentence
399
+ errors[:ancestors] << "needs exactly one ancestor with payload_type (#{ancestor_payload_type}), " \
400
+ "but there are #{payload_type_ancestor_count} (#{full_name_sentence})"
401
+ end
402
+ end
403
+ end
404
+ end
405
+ end
406
+ end