|
4 | 4 | # doesn't end in .rb or .so, so have to load instead of require
|
5 | 5 | load File.join(Msf::Config.install_root, 'msfvenom')
|
6 | 6 |
|
7 |
| -shared_examples_for "nop dumper" do |block| |
| 7 | +shared_examples_for "nop dumper" do |
8 | 8 | it "should list known nops" do
|
9 |
| - dump = block.call |
10 |
| - |
11 | 9 | %w!
|
12 | 10 | x86/opty2
|
13 | 11 | armle/simple
|
14 | 12 | !.each do |name|
|
15 | 13 | dump.should include(name)
|
16 | 14 | end
|
17 | 15 | end
|
| 16 | +end |
18 | 17 |
|
| 18 | +shared_examples_for "encoder dumper" do |
| 19 | + it "should list known encoders" do |
| 20 | + %w! |
| 21 | + generic/none |
| 22 | + x86/shikata_ga_nai |
| 23 | + x64/xor |
| 24 | + !.each do |name| |
| 25 | + dump.should include(name) |
| 26 | + end |
| 27 | + end |
| 28 | +end |
| 29 | + |
| 30 | +shared_examples_for "payload dumper" do |
| 31 | + it "should list known payloads" do |
| 32 | + # Just a representative sample of some of the important ones. |
| 33 | + %w! |
| 34 | + cmd/unix/reverse |
| 35 | + java/meterpreter/reverse_tcp |
| 36 | + java/meterpreter/reverse_https |
| 37 | + linux/x86/shell/reverse_tcp |
| 38 | + linux/x86/shell_reverse_tcp |
| 39 | + linux/x64/shell/reverse_tcp |
| 40 | + linux/x64/shell_reverse_tcp |
| 41 | + linux/armle/shell/reverse_tcp |
| 42 | + linux/armle/shell_reverse_tcp |
| 43 | + linux/mipsbe/shell_reverse_tcp |
| 44 | + php/meterpreter/reverse_tcp |
| 45 | + windows/meterpreter/reverse_tcp |
| 46 | + windows/meterpreter/reverse_https |
| 47 | + !.each do |name| |
| 48 | + dump.should include(name) |
| 49 | + end |
| 50 | + end |
19 | 51 | end
|
20 | 52 |
|
21 | 53 | describe MsfVenom do
|
|
48 | 80 |
|
49 | 81 | let(:framework) { @framework }
|
50 | 82 | describe "#dump_encoders" do
|
51 |
| - it "should list known encoders" do |
52 |
| - dump = venom.dump_encoders |
53 |
| - |
54 |
| - %w! |
55 |
| - generic/none |
56 |
| - x86/shikata_ga_nai |
57 |
| - x64/xor |
58 |
| - !.each do |name| |
59 |
| - dump.should include(name) |
60 |
| - end |
| 83 | + it_behaves_like "encoder dumper" do |
| 84 | + let(:dump) { venom.dump_encoders } |
61 | 85 | end
|
62 | 86 | end
|
63 | 87 |
|
64 | 88 | describe "#dump_nops" do
|
65 | 89 | it_behaves_like "nop dumper" do
|
66 |
| - let(:nops) { venom.dump_nops } |
| 90 | + let(:dump) { venom.dump_nops } |
67 | 91 | end
|
68 | 92 | end
|
69 | 93 |
|
70 | 94 | describe "#dump_payloads" do
|
71 |
| - it "should list known payloads" do |
72 |
| - dump = venom.dump_payloads |
73 |
| - # Just a representative sample of some of the important ones. |
74 |
| - %w! |
75 |
| - cmd/unix/reverse |
76 |
| - java/meterpreter/reverse_tcp |
77 |
| - java/meterpreter/reverse_https |
78 |
| - linux/x86/shell/reverse_tcp |
79 |
| - linux/x86/shell_reverse_tcp |
80 |
| - linux/x64/shell/reverse_tcp |
81 |
| - linux/x64/shell_reverse_tcp |
82 |
| - linux/armle/shell/reverse_tcp |
83 |
| - linux/armle/shell_reverse_tcp |
84 |
| - linux/mipsbe/shell_reverse_tcp |
85 |
| - php/meterpreter/reverse_tcp |
86 |
| - windows/meterpreter/reverse_tcp |
87 |
| - windows/meterpreter/reverse_https |
88 |
| - !.each do |name| |
89 |
| - dump.should include(name) |
90 |
| - end |
| 95 | + it_behaves_like "payload dumper" do |
| 96 | + let(:dump) { venom.dump_payloads } |
91 | 97 | end
|
92 | 98 | end
|
93 | 99 |
|
|
148 | 154 |
|
149 | 155 | end
|
150 | 156 |
|
151 |
| - context "with --list" do |
152 |
| - context "with invalid module type" do |
153 |
| - let(:args) { %w!--list asdf! } |
154 |
| - it "should raise UsageError" do |
155 |
| - expect { venom.generate_raw_payload }.to raise_error(MsfVenom::UsageError) |
156 |
| - end |
157 |
| - end |
158 |
| - context "with nops" do |
159 |
| - let(:args) { %w!--list nops! } |
160 |
| - it_behaves_like "nop dumper" do |
161 |
| - let(:nops) do |
162 |
| - venom.generate_raw_payload |
163 |
| - @err.string |
164 |
| - end |
165 |
| - end |
166 |
| - end |
167 |
| - |
168 |
| - end |
169 |
| - |
170 | 157 | [
|
171 | 158 | { :format => "elf", :arch => "x86" },
|
172 | 159 | { :format => "raw", :arch => "x86" },
|
|
201 | 188 |
|
202 | 189 | before { venom.parse_args(args) }
|
203 | 190 |
|
| 191 | + context "with --list" do |
| 192 | + |
| 193 | + context "with invalid module type" do |
| 194 | + let(:args) { %w!--list asdf! } |
| 195 | + it "should raise UsageError" do |
| 196 | + expect { venom.generate_raw_payload }.to raise_error(MsfVenom::UsageError) |
| 197 | + end |
| 198 | + end |
| 199 | + |
| 200 | + [ "nop", "encoder", "payload" ].each do |type| |
| 201 | + context "#{type}s" do |
| 202 | + let(:args) { %W!--list #{type}s! } |
| 203 | + it_behaves_like "#{type} dumper" do |
| 204 | + let(:dump) do |
| 205 | + venom.generate |
| 206 | + stderr.string |
| 207 | + end |
| 208 | + end |
| 209 | + end |
| 210 | + end |
| 211 | + |
| 212 | + end |
| 213 | + |
204 | 214 | context "with invalid datastore option" do
|
205 | 215 | let(:args) { %w!-f exe -p windows/shell_reverse_tcp LPORT=asdf! }
|
206 | 216 | it "should fail validation" do
|
|
0 commit comments