2012-04-05 75 views

回答

2

“但它不会工作,因为原始数据包已经到达目的地。”

因此,首先您需要设置一些MiTM解决方案,以便两端之间的所有通信都通过您的设备,并让您修改分组数据。

这个功能/攻击的一些已知软件插件是ettercap和cain/abel。

3

iTayb,

看来你有兴趣进行代理使用Scapy的某种服务的?如果是这样的话?

业务的第一顺序是一些如何让数据包通过运行scapy的箱子。通过将远程机器上的网关设置为与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) 

DC

+0

我知道这是稍微大一点的线程,但类似的一个 - 你可以将输出数据包更复杂的方式?如在http有效负载中插入另一种http头,而不修改IP或TCP头。任何参考相关API等? – fayyazkl 2012-10-22 06:42:45

+0

但是,当然,取决于您想要更改的内容可能涉及其他模块。例如,如果你想改变所有HTTP GET请求数据包的有效载荷,我将使用re解析头,然后相应地发送修改后的数据包。 – dc5553 2012-10-22 14:10:04

+1

我实际上想要插入一个新的http头。这意味着覆盖最后的\ r \ n并添加更多的字段。 – fayyazkl 2012-10-22 17:36:13

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的听到该端口,修改数据包并将数据包发送到原始端口。

该解决方案难以实施,因为过滤的,你必须重定向和修改只所需的数据包,并排除SYN ACK ARP等..

如果要修改服务器的响应,一个更简单的方法就是不用动态地修改数据包,而是像中介一样行事。

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

(对不起,我脏代码)