TCP劫持概念验证:利用Scapy实现连接中断与防火墙管理

本文详细介绍了基于Python和Scapy库的TCP连接中断工具,通过解析/proc/net/tcp获取连接信息,支持按PID或端口号定位连接,可发送RST包强制终止会话,并集成ipset进行防火墙规则管理。

TCP劫持概念验证

工具概述

该Python脚本是一个TCP连接中断工具,利用Scapy库操纵网络数据包。它定义了连接处理的自定义异常,并通过读取Linux系统的/proc/net/tcp文件(列出当前TCP连接)提供基于进程ID(PID)或TCP端口检索端点的功能。

核心功能

  • TCPBreaker类:核心功能类,可过滤和拦截与指定本地和远程TCP端口相关的数据包
  • 序列号捕获:捕获TCP会话的序列号以发送重置(RST)数据包
  • 连接终止:有效终止目标TCP连接
  • ipset集成:支持添加/删除IP对来管理防火墙规则

使用方式

1
python tcp_breaker.py [OPTIONS] [ipset_name]

选项参数

  • ipset_name:(可选)要临时插入本地IP的ipset名称
  • --pid:(可选)要终止连接的进程ID
  • --port:(可选)要关闭的连接的本地TCP端口
  • -d, --remote-port:(可选)将端口参数视为远程端口而非本地端口
  • -c, --capture:(可选)指定捕获方法(“raw"或"nflog”)
  • --debug:(可选)启用详细操作模式用于调试

示例命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 通过PID终止连接
python tcp_breaker.py --pid 1234 --port 8080

# 使用ipset终止连接
python tcp_breaker.py my_ipset --pid 1234

# 通过指定本地和远程端口终止连接
python tcp_breaker.py my_ipset --port 80 -d --remote-port

# 不使用ipset的原始捕获方法
python tcp_breaker.py --pid 5678 --port 443 --capture raw

技术实现

端点获取函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def get_endpoints(pid=None, port_local=None, port_remote=None):
    # 根据PID或端口获取连接端点信息
    pass

def get_endpoints_by_port(port_local=None, port_remote=None):
    # 通过端口号获取端点
    pass

def get_endpoints_by_pid(pid):
    # 通过进程ID获取端点
    pass

ipset管理

1
2
3
def ipset_update(cmd, name, ip, port):
    # 更新ipset规则
    pass

TCPBreaker类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class TCPBreaker(Automaton):
    def __init__(self, port_local, port_remote, timeout=False, **atmt_kwz):
        # 初始化TCP连接中断器
        pass
    
    def pkt_filter(self, pkt):
        # 数据包过滤逻辑
        pass
    
    @ATMT.state(initial=1)
    def st_seek(self):
        # 等待会话数据包状态
        pass
    
    @ATMT.state()
    def st_rst_send(self):
        # 发送RST包终止连接
        pass

注意事项

  • 需要足够的权限运行脚本,因为需要访问/proc/net/tcp
  • 可能需要提升权限来修改ipset规则或终止连接
  • 支持原始套接字(raw)和nflog两种数据包捕获方式

作者信息

由ClumsyLulz(又名SleepTheGod Taylor Christian Newsome)开发

该工具为网络安全研究人员提供了程序化控制和管理TCP连接的能力,特别适用于网络调试和安全测试场景。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计