![]() |
|---|
| Mística 标志由 JoelGMSec 设计 |
Mística 是一款工具,能够将数据嵌入应用层协议字段中,旨在建立双向通道以实现任意通信。目前,已实现了对 HTTP、HTTPS、DNS 和 ICMP 协议的封装,预计未来还将引入更多协议。
Mística 采用模块化设计,围绕一种自定义传输协议构建,称为 SOTP:简单覆盖传输协议(Simple Overlay Transport Protocol)。数据经过加密、分块后放入 SOTP 数据包中。SOTP 数据包经过编码后嵌入到应用协议的指定字段中,并发送到另一端。
SOTP 层的目标是提供一种通用的二进制传输协议,开销极小。SOTP 数据包可以轻松隐藏或嵌入到合法的应用协议中。同时,SOTP 确保数据包被另一端接收,使用 RC4 加密数据(未来可能变更),并通过轮询机制确保信息能以透明的方式双向流动。
模块与 SOTP 层交互的目的如下:
封装模块和覆盖模块协同工作,以构建自定义应用程序,例如通过 DNS 进行输入重定向,或通过 HTTP 进行远程端口转发。
Mística 的模块化设计便于开发新模块。此外,用户可以轻松复刻现有模块,以使用自定义字段或编码,或修改覆盖模块的行为。
主要包含两个软件组件:
ms.py):使用作为所需应用层协议(HTTP、HTTPS、DNS、ICMP...)服务器的模块。其设计方式允许在单个 ms.py 实例中同时运行多个服务器、封装模块和覆盖模块,尽管此功能尚未完全实现。mc.py):使用作为所需应用层协议(HTTP、HTTPS、DNS、ICMP...)客户端的模块。同一时间只能使用一个覆盖模块和一个封装模块。您可以在以下播放列表中查看 Mística 的部分演示
该项目的依赖项极少。目前:
dnslib。```
python3.7 -m pip install pip --user
pip3.7 install dnslib --user如果您不想在系统上安装Python,可以使用以下便携版本之一:
- https://www.anaconda.com/distribution/#download-section(适用于Windows、Linux和macOS)
- https://github.com/winpython/winpython/releases/tag/2.1.20190928(仅适用于Windows)
## 当前模块
覆盖模块:
- `io`:从标准输入读取,通过SOTP连接发送。从SOTP连接读取,输出到标准输出。
- `shell`:执行通过SOTP连接接收的命令并返回输出。与io模块兼容。
- `tcpconnect`:连接到TCP端口。从套接字读取,通过SOTP连接发送。从SOTP连接读取,通过套接字发送。
- `tcplisten`:绑定到TCP端口。从套接字读取,通过SOTP连接发送。从SOTP连接读取,通过套接字发送。
包装模块:
- `dns`:使用不同方法在DNS查询/响应中对数据进行编码/解码。
- `http`:使用不同方法在HTTP或HTTPS请求/响应中对数据进行编码/解码。
- `icmp`:在ICMP回显请求/响应的数据部分对数据进行编码/解码。
## 使用方法
`ms.py`:Mística 服务器
以下是帮助信息的显示效果:```txt
usage: ms.py [-h] [-k KEY] [-l LIST] [-m MODULES] [-w WRAPPER_ARGS]
[-o OVERLAY_ARGS] [-s WRAP_SERVER_ARGS]
Mistica server. Anything is a tunnel if you're brave enough. Run without
parameters to launch multi-handler mode.
optional arguments:
-h, --help show this help message and exit
-k KEY, --key KEY RC4 key used to encrypt the comunications
-l LIST, --list LIST Lists modules or parameters. Options are: all,
overlays, wrappers, <overlay name>, <wrapper name>
-m MODULES, --modules MODULES
Module pair in single-handler mode. format:
'overlay:wrapper'
-w WRAPPER_ARGS, --wrapper-args WRAPPER_ARGS
args for the selected overlay module (Single-handler
mode)
-o OVERLAY_ARGS, --overlay-args OVERLAY_ARGS
args for the selected wrapper module (Single-handler
mode)
-s WRAP_SERVER_ARGS, --wrap-server-args WRAP_SERVER_ARGS
args for the selected wrap server (Single-handler
mode)
-v, --verbose Level of verbosity in logger (no -v None, -v Low, -vv
Medium, -vvv High)
Mística 服务器有两个主要模式:
ms.py 时,它允许单个覆盖模块与单个包装模块交互。ms.py 时,用户进入交互式控制台,可以在其中启动多个覆盖模块和包装模块。这些模块将能够在很少限制的情况下相互交互。mc.py: Mística 客户端
以下是帮助信息的显示方式:```txt usage: mc.py [-h] [-k KEY] [-l LIST] [-m MODULES] [-w WRAPPER_ARGS] [-o OVERLAY_ARGS]
Mistica client.
optional arguments: -h, --help show this help message and exit -k KEY, --key KEY RC4 key used to encrypt the comunications -l LIST, --list LIST Lists modules or parameters. Options are: all, overlays, wrappers, , -m MODULES, --modules MODULES Module pair. Format: 'overlay:wrapper' -w WRAPPER_ARGS, --wrapper-args WRAPPER_ARGS args for the selected overlay module -o OVERLAY_ARGS, --overlay-args OVERLAY_ARGS args for the selected wrapper module -v, --verbose Level of verbosity in logger (no -v None, -v Low, -vv Medium, -vvv High)
### 参数
- `-l, --list` 用于列出 `all` 模块,或仅列出一种类型:(`overlays` 或 `wrappers`),或列出某个模块可通过 `-o`、`-w` 或 `-s` 接受的参数。
- `-k, --key` 用于指定加密覆盖通信的密钥。客户端和服务器端必须相同,目前是强制性的。如果未来实现秘密共享方案,这可能会改变。
- `-m, --modules` 用于指定要使用的模块对。必须使用以下格式:**overlay_module** + **:** + **wrap_module**。该参数也是强制性的。
- `-w, --wrapper-args` 允许为封装模块指定特定配置。
- `-o, --overlay-args` 允许为覆盖模块指定特定配置。
- `-s, --wrap-server-args` 仅出现在 `ms.py` 上。它允许为封装服务器指定特定配置。每个封装模块依赖于一个封装服务器,两者的配置均可调整。
## 示例与高级用法
> 记住,你可以通过输入 `-l <module_name>`(例如 `./ms.py -l dns`)查看模块的所有可接受参数。也要记住使用长且复杂的密钥来保护你的通信!
### HTTP
为了说明 HTTP 封装的不同方法,每个示例都将使用 IO 重定向覆盖模块(`io`)。