Skip to content

Commit 4432894

Browse files
committed
Abstract the dumper tests
1 parent 2841624 commit 4432894

File tree

1 file changed

+63
-53
lines changed

1 file changed

+63
-53
lines changed

spec/msfvenom_spec.rb

Lines changed: 63 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,50 @@
44
# doesn't end in .rb or .so, so have to load instead of require
55
load File.join(Msf::Config.install_root, 'msfvenom')
66

7-
shared_examples_for "nop dumper" do |block|
7+
shared_examples_for "nop dumper" do
88
it "should list known nops" do
9-
dump = block.call
10-
119
%w!
1210
x86/opty2
1311
armle/simple
1412
!.each do |name|
1513
dump.should include(name)
1614
end
1715
end
16+
end
1817

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
1951
end
2052

2153
describe MsfVenom do
@@ -48,46 +80,20 @@
4880

4981
let(:framework) { @framework }
5082
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 }
6185
end
6286
end
6387

6488
describe "#dump_nops" do
6589
it_behaves_like "nop dumper" do
66-
let(:nops) { venom.dump_nops }
90+
let(:dump) { venom.dump_nops }
6791
end
6892
end
6993

7094
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 }
9197
end
9298
end
9399

@@ -148,25 +154,6 @@
148154

149155
end
150156

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-
170157
[
171158
{ :format => "elf", :arch => "x86" },
172159
{ :format => "raw", :arch => "x86" },
@@ -201,6 +188,29 @@
201188

202189
before { venom.parse_args(args) }
203190

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+
204214
context "with invalid datastore option" do
205215
let(:args) { %w!-f exe -p windows/shell_reverse_tcp LPORT=asdf! }
206216
it "should fail validation" do

0 commit comments

Comments
 (0)