0

我使用 python 的 scapy 编写了一个脚本来劫持 TCP 连接。

在测试对几个虚拟机(服务器 - xp_sp3,客户端 - xp_sp1)之间连接的攻击时,我找到了客户端端口,然后是服务器的 SND.NEXT 并使用它的客户端 SND.NEXT (我已经将它们与wireshark进行了比较他们是合法的)。

现在,当使用客户端的 SND.NEXT 从客户端向服务器发送欺骗数据包时,我看到数据包确实到达了服务器,但没有到达 NetCat(它的目的地),而且当我将它与真实的客户端数据包进行比较时它看起来几乎相同(不同的 mac、ttl、窗口大小等)

除了我所做的之外,我还应该做些什么来使数据包对服务器看起来合法?

4

1 回答 1

1

首先,使用 Wireshark 验证您的欺骗数据包是否具有正确的 TCP 校验和。如果您的欺骗数据包具有无效的 TCP 校验和,它们将被接收者丢弃。要在 Wireshark 中打开此功能:编辑 > 首选项 > 协议 > TCP > 如果可能,验证 TCP 校验和

除了序列号,还要确认您正确地处理了TCP 时间戳值。如果序列号是正确的,但 TCP 时间戳选项是旧的,那么接收方仍然会丢弃数据包。

这是一个增加 TCP 时间戳的函数,它可能会为您解决问题。

def inc_timestamp(packet, TSval_inc, TSecr_inc):
    if packet.haslayer(TCP):
        for i, option in enumerate(packet[TCP].options): # Timestamp option format: tuple(name, tuple(time1, time2))    
            if str(option[0]) == "Timestamp":            # Ex. ('Timestamp', (7797613, 414050))]            
                packet[TCP].options[i] = option[0], (option[1][0]+TSval_inc,option[1][1]+TSecr_inc)

如果您在 Scapy 中从头开始创建这些数据包,则可能必须添加 TCP 时间戳选项字段,因为默认情况下它不包含在 Scapy TCP() 层中。无论哪种方式,上面提供的代码都应该为您提供必要的格式信息来执行此操作。

于 2012-05-18T14:17:35.500 回答