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

本文详细介绍了一个基于Python和Scapy库的TCP连接中断工具,能够通过进程ID或端口号定位连接,捕获数据包序列号并发送RST包终止连接,同时支持ipset防火墙规则管理。

TCP劫持概念验证

概述

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

核心功能

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

使用方法

1
python tcp_breaker.py [选项] [ipset名称]

选项参数

  • 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

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

技术实现

自定义异常类

1
2
3
4
5
class ConnMultipleMatches(Exception):
    pass

class ConnNotFound(Exception):
    pass

端点获取函数

1
2
def get_endpoints(pid=None, port_local=None, port_remote=None):
    # 实现通过PID或端口获取连接端点的逻辑

TCPBreaker自动化类

1
2
class TCPBreaker(Automaton):
    # 实现数据包过滤、序列号捕获和RST包发送功能

ipset管理功能

1
2
def ipset_update(cmd, name, ip, port):
    # 实现ipset规则的添加和删除操作

注意事项

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

作者信息

由ClumsyLulz(又名SleepTheGod Taylor Christian Newsome)制作

该工具提供了以编程方式控制和终止不需要的TCP连接的方法,适用于网络管理和安全测试场景。

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