本文作者:Spark(Ms08067内网安全小组成员)
Spark微信(欢迎骚扰交流):
定义:端口复用是指不同的应用程序使用相同端口进行通讯。
场景:内网渗透中,搭建隧道时,服务器仅允许指定的端口对外开放。利用端口复用可以将3389或22等端口转发到如80端口上,以便外部连接。
示意图:
功能:
-
端口复用可以更好地隐蔽攻击行为,提高生存几率。
端口复用有时也用作通道后门。
特点:
-
端口复用在系统已开放的端口上进行通讯,只对输入的信息进行字符匹配,不对网络数据进行任何拦截、复制类操作,所以对网络数据的传输性能几乎没有影响。
一、Linux端口复用
1.概述
使用iptables实现端口复用,使用socat进行连接。
使用该方法开启的端口复用为有限的端口复用,复用后端口正常业务会受影响,仅用于后门留存,或者临时使用,不建议长期使用。
2.原理
(1) iptables
iptables是linux下的防火墙管理工具。
-
真正实现防火墙功能的是netfilter,它是linux内核中实现包过滤的核心。
免费。
可实现封包过滤、封包重定向和网路地址转换(NAT)等功能。
(2) 数据通过防火墙流程
(3) 链
链是一些按顺序排列的规则的列表。
-
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
(4) 表
表由一组预先定义的链组成。
-
filter表——用于存放所有与防火墙相关操作的默认表。通常用于过滤数据包。
nat表——用于网络地址转换
mangle表——用于处理数据包
raw表——用于配置数据包,raw 中的数据包不会被系统跟踪。
(5) 链和表的关系及顺序
-
PREROUTING: raw -> mangle -> nat
INPUT: mangle -> filter
FORWARD: mangle -> filter
OUTPUT: raw -> mangle -> nat -> filter
POSTROUTING: mangle -> nat
(6) 表和链的关系
实际使用中是从表作为操作入口:
-
raw 表:PREROUTING,OUTPUT