2012-04-05 3 views

ответ

2

«но это не сработает, поскольку исходный пакет уже достиг цели».

Итак, сначала вам нужно установить некоторое решение MiTM, чтобы все коммуникации между обоими концами проходили через ваше устройство и позволяли вам модифицировать пакетные данные.

Некоторые из известных программных пакаков для этой функциональности/атаки являются ettercap и cain/abel.

3

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) 

постоянного

+0

Я знаю, что это немного старше нить, но подобные один - Можно изменить исходящий пакет в более сложный путь? Например, вставить другой вид HTTP-заголовка в полезную нагрузку HTTP без изменения заголовков IP или TCP. Любая ссылка на соответствующие api и т. Д.? – fayyazkl

+0

Абсолютно, однако, в зависимости от того, что вы хотите изменить, могут быть связаны и другие модули. Например, если вы хотите изменить полезную нагрузку во всех пакетах HTTP GET, я бы использовал re для разбора заголовка, а затем отправил измененный пакет соответственно. – dc5553

+1

Я действительно хочу вставить новый http-заголовок. Это означало бы переписывание последнего \ r \ n и добавление нескольких полей. – fayyazkl

2

У меня была такая же проблема,

Я думаю, что проблема в том, что вы включили 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 слушать к этому порту, измените пакет и отправьте пакет в исходный порт.

Это решение трудно реализовать из-за фильтрации, вы должны перенаправить и изменять только те пакеты, которые вы хотите, и исключить син извед агр и т.д ...

Если вы хотите изменить ответы сервера , Более простой способ сделать это - вместо того, чтобы модифицировать пакеты «на лету», действовать как посредник.

  • Arpspoof
  • ipatbles
  • открыть сокет, получают пакет, открыть соединение и отправить его к первоначальному назначению, как если бы вы были клиентом и получить ответ, изменяющий ответ и вернуть его к первому запросу.

    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) 
    

(Извините за грязный код)