metasploit-model 0.28.0-java → 0.29.0-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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -1
- data/config/locales/en.yml +0 -171
- data/lib/metasploit/model.rb +0 -2
- data/lib/metasploit/model/spec.rb +0 -130
- data/lib/metasploit/model/version.rb +1 -1
- data/spec/support/shared/examples/metasploit/model/search/operator/help.rb +4 -6
- data/spec/support/shared/examples/metasploit/model/translation.rb +1 -1
- data/spec/support/shared/examples/search_association.rb +1 -1
- data/spec/support/shared/examples/search_with.rb +4 -2
- metadata +2 -348
- data/app/models/metasploit/model/module/ancestor/spec/template.rb +0 -125
- data/app/models/metasploit/model/module/class/spec/template.rb +0 -92
- data/app/models/metasploit/model/module/instance/spec/template.rb +0 -97
- data/app/models/metasploit/model/spec/template.rb +0 -277
- data/app/validators/derivation_validator.rb +0 -17
- data/app/validators/dynamic_length_validator.rb +0 -45
- data/lib/metasploit/model/architecture.rb +0 -342
- data/lib/metasploit/model/author.rb +0 -54
- data/lib/metasploit/model/authority.rb +0 -141
- data/lib/metasploit/model/authority/bid.rb +0 -10
- data/lib/metasploit/model/authority/cve.rb +0 -10
- data/lib/metasploit/model/authority/msb.rb +0 -10
- data/lib/metasploit/model/authority/osvdb.rb +0 -10
- data/lib/metasploit/model/authority/pmasa.rb +0 -10
- data/lib/metasploit/model/authority/secunia.rb +0 -10
- data/lib/metasploit/model/authority/us_cert_vu.rb +0 -10
- data/lib/metasploit/model/authority/waraxe.rb +0 -31
- data/lib/metasploit/model/authority/zdi.rb +0 -10
- data/lib/metasploit/model/derivation.rb +0 -109
- data/lib/metasploit/model/derivation/full_name.rb +0 -19
- data/lib/metasploit/model/email_address.rb +0 -124
- data/lib/metasploit/model/module.rb +0 -20
- data/lib/metasploit/model/module/action.rb +0 -52
- data/lib/metasploit/model/module/ancestor.rb +0 -491
- data/lib/metasploit/model/module/ancestor/spec.rb +0 -6
- data/lib/metasploit/model/module/architecture.rb +0 -34
- data/lib/metasploit/model/module/author.rb +0 -40
- data/lib/metasploit/model/module/class.rb +0 -403
- data/lib/metasploit/model/module/class/spec.rb +0 -6
- data/lib/metasploit/model/module/handler.rb +0 -29
- data/lib/metasploit/model/module/instance.rb +0 -622
- data/lib/metasploit/model/module/instance/spec.rb +0 -6
- data/lib/metasploit/model/module/path.rb +0 -159
- data/lib/metasploit/model/module/platform.rb +0 -32
- data/lib/metasploit/model/module/rank.rb +0 -85
- data/lib/metasploit/model/module/reference.rb +0 -32
- data/lib/metasploit/model/module/stance.rb +0 -16
- data/lib/metasploit/model/module/target.rb +0 -78
- data/lib/metasploit/model/module/target/architecture.rb +0 -34
- data/lib/metasploit/model/module/target/platform.rb +0 -34
- data/lib/metasploit/model/module/type.rb +0 -38
- data/lib/metasploit/model/platform.rb +0 -246
- data/lib/metasploit/model/real_pathname.rb +0 -16
- data/lib/metasploit/model/reference.rb +0 -104
- data/spec/app/models/metasploit/model/module/ancestor/spec/template_spec.rb +0 -174
- data/spec/app/models/metasploit/model/module/class/spec/template_spec.rb +0 -222
- data/spec/app/models/metasploit/model/module/instance/spec/template_spec.rb +0 -201
- data/spec/app/models/metasploit/model/search/operator/deprecated/app_spec.rb +0 -62
- data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +0 -197
- data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +0 -135
- data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +0 -124
- data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +0 -387
- data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +0 -399
- data/spec/app/models/metasploit/model/spec/template_spec.rb +0 -23
- data/spec/app/validators/derivation_validator_spec.rb +0 -92
- data/spec/app/validators/dynamic_length_validator_spec.rb +0 -293
- data/spec/dummy/app/models/dummy/architecture.rb +0 -92
- data/spec/dummy/app/models/dummy/author.rb +0 -15
- data/spec/dummy/app/models/dummy/authority.rb +0 -130
- data/spec/dummy/app/models/dummy/email_address.rb +0 -27
- data/spec/dummy/app/models/dummy/module/action.rb +0 -25
- data/spec/dummy/app/models/dummy/module/ancestor.rb +0 -67
- data/spec/dummy/app/models/dummy/module/architecture.rb +0 -19
- data/spec/dummy/app/models/dummy/module/author.rb +0 -28
- data/spec/dummy/app/models/dummy/module/class.rb +0 -69
- data/spec/dummy/app/models/dummy/module/instance.rb +0 -209
- data/spec/dummy/app/models/dummy/module/path.rb +0 -64
- data/spec/dummy/app/models/dummy/module/platform.rb +0 -19
- data/spec/dummy/app/models/dummy/module/rank.rb +0 -44
- data/spec/dummy/app/models/dummy/module/reference.rb +0 -19
- data/spec/dummy/app/models/dummy/module/target.rb +0 -62
- data/spec/dummy/app/models/dummy/module/target/architecture.rb +0 -19
- data/spec/dummy/app/models/dummy/module/target/platform.rb +0 -19
- data/spec/dummy/app/models/dummy/platform.rb +0 -58
- data/spec/dummy/app/models/dummy/reference.rb +0 -31
- data/spec/dummy/spec/factories/dummy/architectures.rb +0 -13
- data/spec/dummy/spec/factories/dummy/authorities.rb +0 -32
- data/spec/dummy/spec/factories/dummy/authors.rb +0 -8
- data/spec/dummy/spec/factories/dummy/email_addresses.rb +0 -8
- data/spec/dummy/spec/factories/dummy/module/actions.rb +0 -13
- data/spec/dummy/spec/factories/dummy/module/ancestors.rb +0 -45
- data/spec/dummy/spec/factories/dummy/module/architectures.rb +0 -35
- data/spec/dummy/spec/factories/dummy/module/authors.rb +0 -10
- data/spec/dummy/spec/factories/dummy/module/classes.rb +0 -40
- data/spec/dummy/spec/factories/dummy/module/instances.rb +0 -86
- data/spec/dummy/spec/factories/dummy/module/paths.rb +0 -16
- data/spec/dummy/spec/factories/dummy/module/platforms.rb +0 -35
- data/spec/dummy/spec/factories/dummy/module/ranks.rb +0 -14
- data/spec/dummy/spec/factories/dummy/module/references.rb +0 -17
- data/spec/dummy/spec/factories/dummy/module/target/architectures.rb +0 -40
- data/spec/dummy/spec/factories/dummy/module/target/platforms.rb +0 -41
- data/spec/dummy/spec/factories/dummy/module/targets.rb +0 -46
- data/spec/dummy/spec/factories/dummy/platforms.rb +0 -3
- data/spec/dummy/spec/factories/dummy/references.rb +0 -26
- data/spec/factories/metasploit/model/architectures.rb +0 -6
- data/spec/factories/metasploit/model/authorities.rb +0 -28
- data/spec/factories/metasploit/model/authors.rb +0 -9
- data/spec/factories/metasploit/model/email_addresses.rb +0 -14
- data/spec/factories/metasploit/model/module/actions.rb +0 -9
- data/spec/factories/metasploit/model/module/ancestors.rb +0 -180
- data/spec/factories/metasploit/model/module/architectures.rb +0 -15
- data/spec/factories/metasploit/model/module/classes.rb +0 -47
- data/spec/factories/metasploit/model/module/handlers.rb +0 -3
- data/spec/factories/metasploit/model/module/instances.rb +0 -83
- data/spec/factories/metasploit/model/module/paths.rb +0 -51
- data/spec/factories/metasploit/model/module/platforms.rb +0 -15
- data/spec/factories/metasploit/model/module/ranks.rb +0 -9
- data/spec/factories/metasploit/model/module/references.rb +0 -11
- data/spec/factories/metasploit/model/module/stances.rb +0 -3
- data/spec/factories/metasploit/model/module/targets.rb +0 -22
- data/spec/factories/metasploit/model/module/types.rb +0 -5
- data/spec/factories/metasploit/model/references.rb +0 -88
- data/spec/lib/metasploit/model/architecture_spec.rb +0 -52
- data/spec/lib/metasploit/model/author_spec.rb +0 -6
- data/spec/lib/metasploit/model/authority/bid_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/cve_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/msb_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/osvdb_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/pmasa_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/secunia_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/us_cert_vu_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/waraxe_spec.rb +0 -51
- data/spec/lib/metasploit/model/authority/zdi_spec.rb +0 -21
- data/spec/lib/metasploit/model/authority_spec.rb +0 -10
- data/spec/lib/metasploit/model/derivation/full_name_spec.rb +0 -75
- data/spec/lib/metasploit/model/derivation_spec.rb +0 -217
- data/spec/lib/metasploit/model/email_address_spec.rb +0 -19
- data/spec/lib/metasploit/model/module/action_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/ancestor_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/architecture_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/author_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/class_spec.rb +0 -19
- data/spec/lib/metasploit/model/module/handler_spec.rb +0 -61
- data/spec/lib/metasploit/model/module/instance_spec.rb +0 -183
- data/spec/lib/metasploit/model/module/path_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/platform_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/rank_spec.rb +0 -29
- data/spec/lib/metasploit/model/module/reference_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/stance_spec.rb +0 -30
- data/spec/lib/metasploit/model/module/target/architecture_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/target/platform_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/target_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/type_spec.rb +0 -125
- data/spec/lib/metasploit/model/platform_spec.rb +0 -100
- data/spec/lib/metasploit/model/reference_spec.rb +0 -21
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/contents/metasploit_module.rb +0 -12
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents.rb +0 -10
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents/metasploit_module.rb +0 -15
- data/spec/support/shared/examples/derives.rb +0 -115
- data/spec/support/shared/examples/metasploit/model/architecture.rb +0 -425
- data/spec/support/shared/examples/metasploit/model/architecture/seed.rb +0 -25
- data/spec/support/shared/examples/metasploit/model/author.rb +0 -27
- data/spec/support/shared/examples/metasploit/model/authority.rb +0 -124
- data/spec/support/shared/examples/metasploit/model/authority/seed.rb +0 -49
- data/spec/support/shared/examples/metasploit/model/email_address.rb +0 -220
- data/spec/support/shared/examples/metasploit/model/module/action.rb +0 -26
- data/spec/support/shared/examples/metasploit/model/module/ancestor.rb +0 -2004
- data/spec/support/shared/examples/metasploit/model/module/ancestor/payload_factory.rb +0 -63
- data/spec/support/shared/examples/metasploit/model/module/architecture.rb +0 -36
- data/spec/support/shared/examples/metasploit/model/module/author.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/module/class.rb +0 -1514
- data/spec/support/shared/examples/metasploit/model/module/handler.rb +0 -21
- data/spec/support/shared/examples/metasploit/model/module/instance.rb +0 -1384
- data/spec/support/shared/examples/metasploit/model/module/instance/class_methods.rb +0 -537
- data/spec/support/shared/examples/metasploit/model/module/instance/is_not_stanced_with_module_type.rb +0 -22
- data/spec/support/shared/examples/metasploit/model/module/instance/is_stanced_with_module_type.rb +0 -38
- data/spec/support/shared/examples/metasploit/model/module/instance/validates/dynamic_length_of.rb +0 -131
- data/spec/support/shared/examples/metasploit/model/module/path.rb +0 -493
- data/spec/support/shared/examples/metasploit/model/module/platform.rb +0 -36
- data/spec/support/shared/examples/metasploit/model/module/rank.rb +0 -92
- data/spec/support/shared/examples/metasploit/model/module/reference.rb +0 -16
- data/spec/support/shared/examples/metasploit/model/module/target.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/module/target/architecture.rb +0 -56
- data/spec/support/shared/examples/metasploit/model/module/target/platform.rb +0 -56
- data/spec/support/shared/examples/metasploit/model/platform.rb +0 -213
- data/spec/support/shared/examples/metasploit/model/real_pathname.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/reference.rb +0 -410
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/app.rb +0 -44
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +0 -72
- data/spec/support/templates/metasploit/model/module/ancestors/_attributes.rb.erb +0 -9
- data/spec/support/templates/metasploit/model/module/ancestors/_methods.rb.erb +0 -8
- data/spec/support/templates/metasploit/model/module/ancestors/_validations.rb.erb +0 -6
- data/spec/support/templates/metasploit/model/module/ancestors/base.rb.erb +0 -3
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_auxiliary.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_encoder.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_exploit.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_non_payload.rb.erb +0 -5
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_nop.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_payload.rb.erb +0 -4
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_post.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_handled.rb.erb +0 -20
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_single.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stage.rb.erb +0 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stager.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/classes/_methods.rb.erb +0 -9
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Model that joins {Metasploit::Model::Platform} and {Metasploit::Model::Module::Target}.
|
|
2
|
-
module Metasploit::Model::Module::Target::Platform
|
|
3
|
-
extend ActiveModel::Naming
|
|
4
|
-
extend ActiveSupport::Concern
|
|
5
|
-
|
|
6
|
-
include Metasploit::Model::Translation
|
|
7
|
-
|
|
8
|
-
included do
|
|
9
|
-
include ActiveModel::Validations
|
|
10
|
-
|
|
11
|
-
#
|
|
12
|
-
# Validations
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
validates :module_target,
|
|
16
|
-
presence: true
|
|
17
|
-
validates :platform,
|
|
18
|
-
presence: true
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
#
|
|
22
|
-
# Associations
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
# @!attribute [rw] module_target
|
|
26
|
-
# The module target that supports {#platform}.
|
|
27
|
-
#
|
|
28
|
-
# @return [Metasploit::Model::Module::Target]
|
|
29
|
-
|
|
30
|
-
# @!attribute [rw] platform
|
|
31
|
-
# The platform supported by the {#module_target}.
|
|
32
|
-
#
|
|
33
|
-
# @return [Metasploit::Model::Platform]
|
|
34
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Defines constants for {Metasploit::Model::Module} types as used in {Metasploit::Model::Module::Ancestor}.
|
|
2
|
-
module Metasploit::Model::Module::Type
|
|
3
|
-
#
|
|
4
|
-
# CONSTANTS
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
# Symbolizes any module type is allowed.
|
|
8
|
-
ANY = '_any_'
|
|
9
|
-
# Auxiliary modules
|
|
10
|
-
AUX = 'auxiliary'
|
|
11
|
-
# Encoder modules
|
|
12
|
-
ENCODER = 'encoder'
|
|
13
|
-
# Exploit modules
|
|
14
|
-
EXPLOIT = 'exploit'
|
|
15
|
-
# No operation modules
|
|
16
|
-
NOP = 'nop'
|
|
17
|
-
# Payload modules
|
|
18
|
-
PAYLOAD = 'payload'
|
|
19
|
-
# Post-exploitation modules
|
|
20
|
-
POST = 'post'
|
|
21
|
-
|
|
22
|
-
# Array<String> of all supported module types (except {ANY} since that's a symbolic type)
|
|
23
|
-
ALL = [
|
|
24
|
-
AUX,
|
|
25
|
-
ENCODER,
|
|
26
|
-
EXPLOIT,
|
|
27
|
-
NOP,
|
|
28
|
-
PAYLOAD,
|
|
29
|
-
POST
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
# Array<String> of all module types that aren't {PAYLOAD} because {PAYLOAD}
|
|
33
|
-
# {Metasploit::Model::Module::Ancestor#contents} define `Modules` instead of `Classes` and so need to be loaded
|
|
34
|
-
# differently.
|
|
35
|
-
NON_PAYLOAD = ALL.reject { |module_type|
|
|
36
|
-
module_type == PAYLOAD
|
|
37
|
-
}
|
|
38
|
-
end
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
# Code shared between `Mdm::Platform` and `Metasploit::Framework::Platform`.
|
|
2
|
-
module Metasploit::Model::Platform
|
|
3
|
-
extend ActiveModel::Naming
|
|
4
|
-
extend ActiveSupport::Concern
|
|
5
|
-
|
|
6
|
-
include Metasploit::Model::Translation
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
# CONSTANTS
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
# Platforms are seeded in a hierarchy with deeper levels refining higher levels, so 'Windows 98 SE' is a
|
|
13
|
-
# refinement of 'Windows 98', which is a refinement of 'Windows'.
|
|
14
|
-
SEED_RELATIVE_NAME_TREE = {
|
|
15
|
-
'AIX' => nil,
|
|
16
|
-
'Android' => nil,
|
|
17
|
-
'BSD' => nil,
|
|
18
|
-
'BSDi' => nil,
|
|
19
|
-
'Cisco' => nil,
|
|
20
|
-
'Firefox' => nil,
|
|
21
|
-
'FreeBSD' => nil,
|
|
22
|
-
'HPUX' => nil,
|
|
23
|
-
'IRIX' => nil,
|
|
24
|
-
'Java' => nil,
|
|
25
|
-
'Javascript' => nil,
|
|
26
|
-
'Linux' => nil,
|
|
27
|
-
'NetBSD' => nil,
|
|
28
|
-
'Netware' => nil,
|
|
29
|
-
'NodeJS' => nil,
|
|
30
|
-
'OpenBSD' => nil,
|
|
31
|
-
'OSX' => nil,
|
|
32
|
-
'PHP' => nil,
|
|
33
|
-
'Python' => nil,
|
|
34
|
-
'Ruby' => nil,
|
|
35
|
-
'Solaris' => {
|
|
36
|
-
'4' => nil,
|
|
37
|
-
'5' => nil,
|
|
38
|
-
'6' => nil,
|
|
39
|
-
'7' => nil,
|
|
40
|
-
'8' => nil,
|
|
41
|
-
'9' => nil,
|
|
42
|
-
'10' => nil
|
|
43
|
-
},
|
|
44
|
-
'Windows' => {
|
|
45
|
-
'95' => nil,
|
|
46
|
-
'98' => {
|
|
47
|
-
'FE' => nil,
|
|
48
|
-
'SE' => nil
|
|
49
|
-
},
|
|
50
|
-
'ME' => nil,
|
|
51
|
-
'NT' => {
|
|
52
|
-
'SP0' => nil,
|
|
53
|
-
'SP1' => nil,
|
|
54
|
-
'SP2' => nil,
|
|
55
|
-
'SP3' => nil,
|
|
56
|
-
'SP4' => nil,
|
|
57
|
-
'SP5' => nil,
|
|
58
|
-
'SP6' => nil,
|
|
59
|
-
'SP6a' => nil
|
|
60
|
-
},
|
|
61
|
-
'2000' => {
|
|
62
|
-
'SP0' => nil,
|
|
63
|
-
'SP1' => nil,
|
|
64
|
-
'SP2' => nil,
|
|
65
|
-
'SP3' => nil,
|
|
66
|
-
'SP4' => nil
|
|
67
|
-
},
|
|
68
|
-
'XP' => {
|
|
69
|
-
'SP0' => nil,
|
|
70
|
-
'SP1' => nil,
|
|
71
|
-
'SP2' => nil,
|
|
72
|
-
'SP3' => nil
|
|
73
|
-
},
|
|
74
|
-
'2003' => {
|
|
75
|
-
'SP0' => nil,
|
|
76
|
-
'SP1' => nil
|
|
77
|
-
},
|
|
78
|
-
'Vista' => {
|
|
79
|
-
'SP0' => nil,
|
|
80
|
-
'SP1' => nil
|
|
81
|
-
},
|
|
82
|
-
'7' => nil
|
|
83
|
-
},
|
|
84
|
-
'UNIX' => nil
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
included do
|
|
88
|
-
include ActiveModel::MassAssignmentSecurity
|
|
89
|
-
include ActiveModel::Validations
|
|
90
|
-
include Metasploit::Model::Derivation
|
|
91
|
-
include Metasploit::Model::Search
|
|
92
|
-
|
|
93
|
-
#
|
|
94
|
-
# Derivations
|
|
95
|
-
#
|
|
96
|
-
|
|
97
|
-
derives :fully_qualified_name, :validate => true
|
|
98
|
-
|
|
99
|
-
#
|
|
100
|
-
# Mass Assignment Security
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
attr_accessible :relative_name
|
|
104
|
-
|
|
105
|
-
#
|
|
106
|
-
# Search
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
search_attribute :fully_qualified_name,
|
|
110
|
-
type: {
|
|
111
|
-
set: :string
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
# Validation
|
|
116
|
-
#
|
|
117
|
-
|
|
118
|
-
validates :fully_qualified_name,
|
|
119
|
-
inclusion: {
|
|
120
|
-
in: Metasploit::Model::Platform.fully_qualified_name_set
|
|
121
|
-
}
|
|
122
|
-
validates :relative_name,
|
|
123
|
-
presence: true
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
# Adds {#fully_qualified_name_set} to class.
|
|
127
|
-
module ClassMethods
|
|
128
|
-
# Set of valid {Metasploit::Model::Platform#fully_qualified_name}.
|
|
129
|
-
#
|
|
130
|
-
# @return [Set<String>]
|
|
131
|
-
def fully_qualified_name_set
|
|
132
|
-
Metasploit::Model::Platform.fully_qualified_name_set
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
#
|
|
137
|
-
# Attributes
|
|
138
|
-
#
|
|
139
|
-
|
|
140
|
-
# @!attribute [rw] fully_qualified_name
|
|
141
|
-
# The fully qualified name of this platform, as would be used in the platform list in a metasploit-framework
|
|
142
|
-
# module.
|
|
143
|
-
#
|
|
144
|
-
# @return [String]
|
|
145
|
-
|
|
146
|
-
# @!attribute [rw] parent
|
|
147
|
-
# The parent platform of this platform. For example, Windows is parent of Windows 98, which is the parent of
|
|
148
|
-
# Windows 98 FE.
|
|
149
|
-
#
|
|
150
|
-
# @return [nil] if this is a top-level platform, such as Windows or Linux.
|
|
151
|
-
# @return [Metasploit::Model::Platform]
|
|
152
|
-
|
|
153
|
-
# @!attribute [rw] relative_name
|
|
154
|
-
# The name of this platform relative to the {#fully_qualified_name} of {#parent}.
|
|
155
|
-
#
|
|
156
|
-
# @return [String]
|
|
157
|
-
|
|
158
|
-
#
|
|
159
|
-
# Methods
|
|
160
|
-
#
|
|
161
|
-
|
|
162
|
-
# Derives {#fully_qualified_name} from {#parent}'s {#fully_qualified_name} and this platform's {#relative_name}.
|
|
163
|
-
#
|
|
164
|
-
# @return [nil] if {#relative_name} is blank.
|
|
165
|
-
# @return [String] {#relative_name} if {#parent} is `nil`.
|
|
166
|
-
# @return [String] '<{#parent} {#relative_name}> <{#relative_name}>' if {#parent} is not `nil`.
|
|
167
|
-
def derived_fully_qualified_name
|
|
168
|
-
if relative_name.present?
|
|
169
|
-
if parent
|
|
170
|
-
"#{parent.fully_qualified_name} #{relative_name}"
|
|
171
|
-
else
|
|
172
|
-
relative_name
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# @note Not defined in `ClassMethods` because consumers should always refer back to {Metasploit::Model::Platform}
|
|
178
|
-
# when seeding.
|
|
179
|
-
#
|
|
180
|
-
# @param options [Hash{Symbol => Object, Hash}]
|
|
181
|
-
# @option options [Object] :parent (nil) The parent object to which to attach the children.
|
|
182
|
-
# @option options [Hash{String => nil,Hash}] :grandchildren_by_child_relative_name
|
|
183
|
-
# ({SEED_RELATIVE_NAME_TREE}) Maps {#relative_name} of children under :parent to their children
|
|
184
|
-
# (grandchildren of parent). Grandchildren can be `nil` or another recursive `Hash` of names and their
|
|
185
|
-
# descendants.
|
|
186
|
-
# @yield [attributes] Block should construct child object using attributes.
|
|
187
|
-
# @yieldparam attributes [Hash{Symbol => Object,String}] Hash containing attributes for child object, include
|
|
188
|
-
# :parent for {#parent} and :relative_name for {#relative_name}.
|
|
189
|
-
# @yieldreturn [Object] child derived from :parent and :relative_name to be used as the parent for
|
|
190
|
-
# grandchildren.
|
|
191
|
-
# @return [void]
|
|
192
|
-
def self.each_seed_attributes(options={}, &block)
|
|
193
|
-
options.assert_valid_keys(:parent, :grandchildren_by_child_relative_name)
|
|
194
|
-
|
|
195
|
-
parent = options[:parent]
|
|
196
|
-
grandchildren_by_child_relative_name = options.fetch(
|
|
197
|
-
:grandchildren_by_child_relative_name,
|
|
198
|
-
SEED_RELATIVE_NAME_TREE
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
grandchildren_by_child_relative_name.each do |child_relative_name, great_grandchildren_by_grandchild_relative_name|
|
|
202
|
-
attributes = {
|
|
203
|
-
parent: parent,
|
|
204
|
-
relative_name: child_relative_name
|
|
205
|
-
}
|
|
206
|
-
child = block.call(attributes)
|
|
207
|
-
|
|
208
|
-
if great_grandchildren_by_grandchild_relative_name
|
|
209
|
-
each_seed_attributes(
|
|
210
|
-
grandchildren_by_child_relative_name: great_grandchildren_by_grandchild_relative_name,
|
|
211
|
-
parent: child,
|
|
212
|
-
&block
|
|
213
|
-
)
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
# List of valid {#fully_qualified_name} derived from {SEED_RELATIVE_NAME_TREE}.
|
|
219
|
-
#
|
|
220
|
-
# @return [Array<String>]
|
|
221
|
-
def self.fully_qualified_name_set
|
|
222
|
-
unless instance_variable_defined? :@fully_qualified_name_set
|
|
223
|
-
@fully_qualified_name_set = Set.new
|
|
224
|
-
|
|
225
|
-
each_seed_attributes do |attributes|
|
|
226
|
-
parent = attributes.fetch(:parent)
|
|
227
|
-
relative_name = attributes.fetch(:relative_name)
|
|
228
|
-
|
|
229
|
-
if parent
|
|
230
|
-
fully_qualified_name = "#{parent} #{relative_name}"
|
|
231
|
-
else
|
|
232
|
-
fully_qualified_name = relative_name
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
@fully_qualified_name_set.add fully_qualified_name
|
|
236
|
-
|
|
237
|
-
# yieldreturn
|
|
238
|
-
fully_qualified_name
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
@fully_qualified_name_set.freeze
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
@fully_qualified_name_set
|
|
245
|
-
end
|
|
246
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require 'pathname'
|
|
2
|
-
|
|
3
|
-
# Adds {#real_pathname} to class, which will convert `#real_path` `String` to a `Pathname`.
|
|
4
|
-
module Metasploit::Model::RealPathname
|
|
5
|
-
# `#real_path` as a `Pathname`.
|
|
6
|
-
#
|
|
7
|
-
# @return [Pathname] unless `#real_path` is `nil`.
|
|
8
|
-
# @return [nil] if `#real_path` is `nil`.
|
|
9
|
-
def real_pathname
|
|
10
|
-
if real_path
|
|
11
|
-
Pathname.new(real_path)
|
|
12
|
-
else
|
|
13
|
-
nil
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Code shared between `Mdm::Reference` and `Metasploit::Framework::Reference`.
|
|
2
|
-
module Metasploit::Model::Reference
|
|
3
|
-
extend ActiveModel::Naming
|
|
4
|
-
extend ActiveSupport::Concern
|
|
5
|
-
|
|
6
|
-
include Metasploit::Model::Translation
|
|
7
|
-
|
|
8
|
-
included do
|
|
9
|
-
include ActiveModel::MassAssignmentSecurity
|
|
10
|
-
include ActiveModel::Validations
|
|
11
|
-
include Metasploit::Model::Derivation
|
|
12
|
-
include Metasploit::Model::Search
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
# Derivations
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
derives :url, :validate => false
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
# Mass Assignment Security
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
attr_accessible :designation
|
|
25
|
-
attr_accessible :url
|
|
26
|
-
|
|
27
|
-
#
|
|
28
|
-
# Search Attributes
|
|
29
|
-
#
|
|
30
|
-
|
|
31
|
-
search_attribute :designation, :type => :string
|
|
32
|
-
search_attribute :url, :type => :string
|
|
33
|
-
|
|
34
|
-
#
|
|
35
|
-
# Validations
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
validates :designation,
|
|
39
|
-
:presence => {
|
|
40
|
-
:if => :authority?
|
|
41
|
-
},
|
|
42
|
-
:nil => {
|
|
43
|
-
:unless => :authority?
|
|
44
|
-
}
|
|
45
|
-
validates :url,
|
|
46
|
-
:presence => {
|
|
47
|
-
:unless => :authority?
|
|
48
|
-
}
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
#
|
|
52
|
-
# Associations
|
|
53
|
-
#
|
|
54
|
-
|
|
55
|
-
# @!attribute [rw] authority
|
|
56
|
-
# The {Metasploit::Model::Authority authority} that assigned {#designation}.
|
|
57
|
-
#
|
|
58
|
-
# @return [Metasploit::Model::Authority, nil]
|
|
59
|
-
|
|
60
|
-
# @!attribute [r] module_instances
|
|
61
|
-
# {Metasploit::Model::Module::Instance Modules} that exploit this reference or describe a proof-of-concept (PoC)
|
|
62
|
-
# code that the module is based on.
|
|
63
|
-
#
|
|
64
|
-
# @return [Array<Metasploit::Model::Module::Instance>]
|
|
65
|
-
|
|
66
|
-
#
|
|
67
|
-
# Attributes
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
# @!attribute [rw] designation
|
|
71
|
-
# A designation (usually a string of numbers and dashes) assigned by {#authority}.
|
|
72
|
-
#
|
|
73
|
-
# @return [String, nil]
|
|
74
|
-
|
|
75
|
-
# @!attribute [rw] url
|
|
76
|
-
# URL to web page with information about referenced exploit.
|
|
77
|
-
#
|
|
78
|
-
# @return [String, nil]
|
|
79
|
-
|
|
80
|
-
#
|
|
81
|
-
# Instance Methods
|
|
82
|
-
#
|
|
83
|
-
|
|
84
|
-
# Returns whether {#authority} is not `nil`.
|
|
85
|
-
#
|
|
86
|
-
# @return [true] unless {#authority} is `nil`.
|
|
87
|
-
# @return [false] if {#authority} is `nil`.
|
|
88
|
-
def authority?
|
|
89
|
-
authority.present?
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Derives {#url} based how {#authority} routes {#designation designations} to a URL.
|
|
93
|
-
#
|
|
94
|
-
# @return [String, nil]
|
|
95
|
-
def derived_url
|
|
96
|
-
derived = nil
|
|
97
|
-
|
|
98
|
-
if authority and designation.present?
|
|
99
|
-
derived = authority.designation_url(designation)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
derived
|
|
103
|
-
end
|
|
104
|
-
end
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Metasploit::Model::Module::Ancestor::Spec::Template do
|
|
4
|
-
subject(:template) do
|
|
5
|
-
described_class.new(
|
|
6
|
-
module_ancestor: module_ancestor
|
|
7
|
-
)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let(:module_ancestor) do
|
|
11
|
-
FactoryGirl.build(:dummy_module_ancestor)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
context 'CONSTANTS' do
|
|
15
|
-
context 'DEFAULT_SEARCH_PATHNAMES' do
|
|
16
|
-
subject(:default_search_pathnames) do
|
|
17
|
-
described_class::DEFAULT_SEARCH_PATHNAMES
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "includes 'module/ancestors'" do
|
|
21
|
-
expect(default_search_pathnames).to include(Pathname.new('module/ancestors'))
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
context 'DEFAULT_SOURCE_RELATIVE_NAME' do
|
|
26
|
-
subject(:default_source_relative_name) do
|
|
27
|
-
described_class::DEFAULT_SOURCE_RELATIVE_NAME
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it { should == 'base' }
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
context 'validations' do
|
|
35
|
-
it { should validate_presence_of :module_ancestor }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
context '#destination_pathname' do
|
|
39
|
-
subject(:destination_pathname) do
|
|
40
|
-
template.destination_pathname
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
context 'with #module_ancestor' do
|
|
44
|
-
it 'defaults to module_ancestor.real_pathname' do
|
|
45
|
-
expect(destination_pathname).to eq(module_ancestor.real_pathname)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
context 'without #module_ancestor' do
|
|
50
|
-
let(:module_ancestor) do
|
|
51
|
-
nil
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it { should be_nil }
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context '#locals' do
|
|
59
|
-
subject(:locals) do
|
|
60
|
-
template.locals
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it { should be_a Hash }
|
|
64
|
-
|
|
65
|
-
context '[:metasploit_module_relative_name]' do
|
|
66
|
-
subject(:metasploit_module_relative_name) do
|
|
67
|
-
locals[:metasploit_module_relative_name]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it 'is #metasploit_module_relative_name' do
|
|
71
|
-
expect(metasploit_module_relative_name).to eq(template.metasploit_module_relative_name)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
context '[:module_ancestor]' do
|
|
76
|
-
subject(:locals_module_ancestor) do
|
|
77
|
-
locals[:module_ancestor]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it 'is #module_ancestor' do
|
|
81
|
-
expect(locals_module_ancestor).to eq(template.module_ancestor)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
context '#metasploit_module_relative_name' do
|
|
87
|
-
subject(:metasploit_module_relative_name) do
|
|
88
|
-
template.metasploit_module_relative_name
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it { should be_a String }
|
|
92
|
-
|
|
93
|
-
it 'uses FactoryGirl.generate' do
|
|
94
|
-
# ensure template is memoized so only metasploit_module_relative_name's usage of FactoryGirl is seen
|
|
95
|
-
template
|
|
96
|
-
|
|
97
|
-
expect(FactoryGirl).to receive(:generate).with(:metasploit_model_module_ancestor_metasploit_module_relative_name).and_call_original
|
|
98
|
-
|
|
99
|
-
metasploit_module_relative_name
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
context '#overwrite' do
|
|
104
|
-
subject(:overwrite) do
|
|
105
|
-
template.overwrite
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it { should be_false }
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
context '#search_pathnames' do
|
|
112
|
-
subject(:search_pathnames) do
|
|
113
|
-
template.search_pathnames
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it 'uses DEFAULT_SEARCH_PATHNAMES' do
|
|
117
|
-
expect(search_pathnames).to match_array(described_class::DEFAULT_SEARCH_PATHNAMES)
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
context '#source_relative_name' do
|
|
122
|
-
subject(:source_relative_name) do
|
|
123
|
-
template.source_relative_name
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it 'uses DEFAULT_SOURCE_RELATIVE_NAME' do
|
|
127
|
-
expect(source_relative_name).to eq(described_class::DEFAULT_SOURCE_RELATIVE_NAME)
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
context 'write' do
|
|
132
|
-
subject(:write) do
|
|
133
|
-
described_class.write(attributes)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
before(:each) do
|
|
137
|
-
# Since overwrite is false, have to delete the template that the factories make.
|
|
138
|
-
module_ancestor.real_pathname.delete
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
context 'with valid' do
|
|
142
|
-
let(:attributes) do
|
|
143
|
-
{
|
|
144
|
-
module_ancestor: module_ancestor
|
|
145
|
-
}
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it { should be_true }
|
|
149
|
-
|
|
150
|
-
it 'writes template' do
|
|
151
|
-
# memoize attributes so any other writes besides the one under-test are already run.
|
|
152
|
-
attributes
|
|
153
|
-
|
|
154
|
-
described_class.any_instance.should_receive(:write)
|
|
155
|
-
|
|
156
|
-
write
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
context 'without valid' do
|
|
161
|
-
let(:attributes) do
|
|
162
|
-
{}
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it { should be_false }
|
|
166
|
-
|
|
167
|
-
it 'does not write template' do
|
|
168
|
-
described_class.any_instance.should_not_receive(:write)
|
|
169
|
-
|
|
170
|
-
write
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
end
|