Angenommen, ich habe es geschafft, mitten in der Kommunikation zwischen einem Client und einem Server zu sein (sagen wir, dass ich einen Hotspot öffne und den Client nur über den Server mit dem Server verbinden) meine Maschine).Ändern von Paketen im laufenden Betrieb mit scapy als MITM
Wie kann ich Pakete ändern, die mein Client sendet und empfängt, ohne meine eigene Kommunikation mit anderen Diensten zu unterbrechen? Es muss eine Möglichkeit geben, alle Pakete zu routen, die der Client sowohl sendet als auch empfängt (bevor er sie an ihn weiterleitet) über mein Skript.
Ich denke, dass die richtige Richtung, um dies zu erreichen ist mit iptables
, aber nicht sicher, genau, welche Argumente passen würde, um dies zu arbeiten. Ich habe bereits das folgende einfache Skript:
hotspotd start #a script that runs dnsmasq as both a DNS and DHCP server, configures and starts a hotspot
iptables -P FORWARD ACCEPT
iptables --append FORWARD --in-interface wlan0 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
#wlan0 is the interface on which the hotspot is.
#eth0 is the interface that is connected to the internet
Nun, dies funktioniert perfekt für eine passive MITM - ich alles sehen kann, dass der Client sendet und empfängt. Aber jetzt möchte ich es verstärken und jede Nachricht umleiten, die er durch mich sendet und empfängt.
Mein schließliche Zweck ist auf ein Niveau zu bekommen, wo ich das folgende Skript ausführen kann:
from scapy.all import *
from scapy_http.http import *
def callback(pkt):
#Process the packet here, see source and destination addresses, ports, data
send(pkt)
sniff(filter='port 666', prn=callback) #Assuming all relevant packets are redirected to port 666
Wie kann ich accomplish Umleiten jedes Paket sendet der Client und-über-zu-erhalten?
Scheint zu arbeiten. Aber wie erkenne ich, welche Pakete vom Gerät kommen und welche von meinem Rechner? –
Sie können entweder iptables oder Ihre App dafür verwenden. 1. Unter Verwendung von IP-Tabellen können Sie Pakete nach ihrer Quelle filtern und nur die relevanten in die nfqueue senden (oder sie an zwei separate NFQUEUES senden, abhängig von der Quelle). 2. Da Ihre Anwendung das gesamte Paket von NFQUEUE empfängt, können Sie einfach die IP-Adresse jedes empfangenen Pakets überprüfen. – Malt
aber ist es nicht in einer späteren Phase bestimmt? Ich meine, Pakete stammen von einer lokalen Adresse, die ich vermute, sind okay und leicht zu bestimmen, aber was ist mit Paketen **, die an die IP-Adresse des Geräts gerichtet sind? Sie kommen zu meiner externen IP, wird so ein Kunststück funktionieren? –