写一个TCP连接劫持

时间:2011-03-03 14:41:45

标签: python tcp scapy session-hijacking

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

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

现在当从客户端向服务器发送欺骗数据包时,使用客户端的SND.NEXT我看到数据包确实已经到达服务器,但没有到达NetCat(它的目的地),加上当我将它与a进行比较时真正的客户端数据包看起来几乎相同(不同的mac,ttl,window-size等)

除了我所做的以外,还有什么方法可以让数据包看起来像服务器一样合理吗?

1 个答案:

答案 0 :(得分: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()层中。无论哪种方式,上面提供的代码都应该为您提供必要的格式信息。