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连接的方法,适用于网络管理和安全测试场景。