Как можно изменить пакетные данные с помощью scapy?Как изменить пакетные данные с помощью scapy?
Я попытался использовать sniff()
, а затем send()
отредактированный пакет, но он не будет работать, поскольку исходный пакет уже достиг цели.
Как можно изменить пакетные данные с помощью scapy?Как изменить пакетные данные с помощью scapy?
Я попытался использовать sniff()
, а затем send()
отредактированный пакет, но он не будет работать, поскольку исходный пакет уже достиг цели.
«но это не сработает, поскольку исходный пакет уже достиг цели».
Итак, сначала вам нужно установить некоторое решение MiTM, чтобы все коммуникации между обоими концами проходили через ваше устройство и позволяли вам модифицировать пакетные данные.
Некоторые из известных программных пакаков для этой функциональности/атаки являются ettercap и cain/abel.
iTayb,
Кажется, вы заинтересованы в проксировании какой-то службы, используя scapy? Если да, то какой?
Первый порядок ведения бизнеса - это то, как пакеты проходят через коробку, работающую на скосе. Сделайте это, установив шлюз на удаленном компьютере в соответствии с косой коробкой. Если это для какого-то пентеста, вам нужно будет подмакировать некоторые MAC-адреса. Вы можете сделать это с помощью scapy с использованием метода arpcachepoison или с помощью сторонней программы, такой как ettercap.
Как только это будет завершено, ваш метод использования sniff() и send() должен работать немного лучше, просто убедитесь, что вы изменили пакет, прежде чем попасть в отправляющую часть;) Вот небольшой пример того, как вы могли сделайте это ... здесь я просто изменяю адрес назначения заголовка IP, но вы можете изменить все, что хотите.
from scapy import *
def chgSend(x):
x[IP].dst = '192.168.1.1'
send(x)
while 1:
sniff(prn=chgSend)
постоянного
У меня была такая же проблема,
Я думаю, что проблема в том, что вы включили ip_forward так что оригинальный пакет пересылается к первоначальному назначению до модифицированного пакета посылается scapy ,
Theorically, решение создать правило в IPTables пересылки пакетов, что вы хотите изменить в другой порт (Это более или менее то, что Ettercap делает internaly),
i.e = iptables -t nat -A PREROUTING -p tcp --destination-port "YourInterestingPort" -j REDIRECT --to-port 1234
А потом в scapy слушать к этому порту, измените пакет и отправьте пакет в исходный порт.
Это решение трудно реализовать из-за фильтрации, вы должны перенаправить и изменять только те пакеты, которые вы хотите, и исключить син извед агр и т.д ...
Если вы хотите изменить ответы сервера , Более простой способ сделать это - вместо того, чтобы модифицировать пакеты «на лету», действовать как посредник.
открыть сокет, получают пакет, открыть соединение и отправить его к первоначальному назначению, как если бы вы были клиентом и получить ответ, изменяющий ответ и вернуть его к первому запросу.
while True: c, addr = s_mb.accept() # Установить соединение с клиентом. запроса = c.recv (BUFFER_SIZE)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.send(PACKET)
response = s.recv(1024)
if response = "THIS IS THE RESPONSE THAT I WANT TO MODIFY":
if(real_simulation):
fakeresponse = "MODIFIED RESPONSE"
#print "The packet has beeb modified"
else:
fakeresponse = response
s.close()
c.send(fakeresponse)
(Извините за грязный код)
Я знаю, что это немного старше нить, но подобные один - Можно изменить исходящий пакет в более сложный путь? Например, вставить другой вид HTTP-заголовка в полезную нагрузку HTTP без изменения заголовков IP или TCP. Любая ссылка на соответствующие api и т. Д.? – fayyazkl
Абсолютно, однако, в зависимости от того, что вы хотите изменить, могут быть связаны и другие модули. Например, если вы хотите изменить полезную нагрузку во всех пакетах HTTP GET, я бы использовал re для разбора заголовка, а затем отправил измененный пакет соответственно. – dc5553
Я действительно хочу вставить новый http-заголовок. Это означало бы переписывание последнего \ r \ n и добавление нескольких полей. – fayyazkl