satvikgosai/sysnc
GitHub: satvikgosai/sysnc
一款基于 Termux 的 bash 脚本,利用 CVE-2024-31317 Zygote 注入漏洞在 Android 上快速建立系统级 netcat Shell。
Stars: 10 | Forks: 1
# sysnc — 系统级 Shell Netcat 命令发送器
一个封装了 netcat 的小型 bash 脚本,旨在简化远程命令执行和交互式 shell 访问。它还可以通过利用 [zygote injection (CVE-2024-31317)][cve] 在 Android 上设置系统级 (UID 1000) shell。主要为在 Android 设备的 Termux 中运行而设计。
## 功能特性
- **交互模式** — 自动设置带有彩色提示符的持久 netcat 连接。
- **命令执行** — 向服务器发送单条命令(或完整 pipeline)并关闭连接。
- **Pipe 支持** — 通过 stdin 流式传输脚本并在远程执行。
- **服务器设置** — 一键通过 zygote 注入设置 Android 系统 shell,支持可选的 `rish`/Shizuku 自动化。
- **可配置** — 主机、端口和 UID 均可通过 flag 或环境变量覆盖。
## 前置条件
- Android 上的 **Termux**([F-Droid 上的 Termux][termux])。
- **netcat-openbsd**(`pkg install netcat-openbsd`)— 安装程序会自动处理此项。
- 对于 `-s/--setup` 流程:
- 配置了 `rish` 的 [Shizuku][shizuku],**或者** 一个可用的 `adb shell` 连接,以便手动粘贴这四条设置命令。
- 安全补丁级别仍包含 CVE-2024-31317 的 Android 设备(大多数 2024 年 6 月之前的版本)。
## 安装说明
### 快速安装(推荐)
```
curl -fsSL https://raw.githubusercontent.com/satvikgosai/sysnc/main/install.sh | bash
```
### 手动安装
1. 克隆仓库:
git clone https://github.com/satvikgosai/sysnc.git
cd sysnc
2. 安装依赖:
pkg update -y
pkg install -y netcat-openbsd
3. 安装脚本:
install -m 755 sysnc "$PREFIX/bin/sysnc"
*(如果您不在 Termux 环境中,请将 `sysnc` 复制到 `$PATH` 中的任意目录,并执行 `chmod +x` 赋予执行权限。)*
### 验证
```
sysnc --version
sysnc --help
```
### 卸载
```
# 通过 installer
curl -fsSL https://raw.githubusercontent.com/satvikgosai/sysnc/main/install.sh | bash -s -- --uninstall
# 或者手动
rm "$PREFIX/bin/sysnc"
```
## 用法
```
sysnc # Interactive mode
sysnc -c "ls -la" # Send a single command
sysnc -s # Setup system-shell netcat server (default UID 1000)
sysnc -s --uid 1000 # Setup with an explicit UID
sysnc -k # Kill the running server
sysnc --host 10.0.0.5 --port 4444 -c "id"
cat script.sh | sysnc # Pipe a script and close
sysnc -h # Help
sysnc -v # Version
```
### 命令行选项
| 选项 | 描述 |
| --- | --- |
| `-c, --command CMD...` | 向服务器发送命令并关闭连接 |
| `-s, --setup` | 通过 Android zygote 注入设置 netcat 服务器 |
| `--uid UID` | 用于设置的 UID(必须 **≥ 1000**,默认为 `1000`) |
| `-k, --kill` | 终止正在运行的 netcat 服务器 |
| `--host HOST` | 服务器主机(默认为 `localhost`) |
| `--port PORT` | 服务器端口(默认为 `1234`) |
| `-v, --version` | 显示版本号 |
| `-h, --help` | 显示帮助信息 |
| *(无参数)* | 交互式连接到服务器 |
## 配置
可以通过两种方式覆盖默认值:
**环境变量**(适用于 shell/profile 配置):
```
export NC_HOST=10.0.0.5
export NC_PORT=4444
export NC_UID=1000
sysnc -c "id"
```
**CLI flag**(优先级高于环境变量):
```
sysnc --host 10.0.0.5 --port 4444 -c "id"
```
| 变量 | Flag | 默认值 |
| --- | --- | --- |
| `NC_HOST` | `--host` | `localhost` |
| `NC_PORT` | `--port` | `1234` |
| `NC_UID` | `--uid` | `1000` |
## Android zygote 注入设置
`-s` 选项利用 [CVE-2024-31317][cve] 以系统 UID 的进程身份启动 netcat 监听器。流程如下:
1. 尽最大努力尝试终止任何之前监听在 `$NC_PORT` 上的服务器。
2. `am force-stop com.android.settings` — 停止“设置”应用。
3. 写入一个精心构造的 `hidden_api_blacklist_exemptions` 值,其中包含一个 zygote-fork argv,用于在配置的端口上派生并启动 `toybox nc -L /system/bin/sh -l`。
4. `am start -a android.settings.SETTINGS` — 重启“设置”应用,该操作会 fork 恶意的 zygote 并继承系统 UID。
5. 暂停两秒钟,让派生过程稳定下来。
6. `settings delete global hidden_api_blacklist_exemptions` — 清理痕迹,使设备不再处于不一致的 hidden-API 状态。
如果 `rish` 不可用,`sysnc -s` 会打印出所有四条命令,以便您手动将它们粘贴到 `adb shell` 中。
## 故障排除
**`Error: Failed to connect to localhost:1234`**
服务器未运行、已被终止,或者绑定到了其他主机/端口。请运行 `sysnc -s` 进行设置,或使用 `--host`/`--port` 进行覆盖。
**`Error: rish (Shizuku) is not installed or not in PATH`**
请安装 [Shizuku][shizuku] 并配置 `rish`,或者将 `sysnc -s` 打印的四条命令粘贴到 `adb shell` 中。
**`Error: UID must be a number >= 1000`**
Android 禁止 zygote-fork 到低于 1000 的 UID。使用 `1000` 可获得系统 shell,或使用 ≥ 10000 的应用 UID 获得沙盒 shell。1001–9999 范围内的 UID 是保留的系统身份(如 radio、bluetooth 等)— 脚本接受这些值,但它们通常不是您想要的。
**交互式 shell 看起来很简陋 / 没有颜色**
远程 shell 需要支持 ANSI 转义序列(`TERM=xterm-256color`)。一些精简版的 `sh` 构建可能无法识别 `PS1` 替换 — 请通过 `sysnc`(交互模式)连接,并在会话开启后运行 `bash`(如果远程可用 `bash` 的话)。
**`nc: invalid option` 或意外的 flag 错误**
sysnc 依赖于 OpenBSD-netcat 语义(`-N`, `-w`)。在 macOS 上,自带的 `nc` 有所不同 — 请从 Homebrew 安装 `netcat` 或使用 Termux。在 Termux 中,请使用 `pkg install netcat-openbsd`。
## 安全性
这是一个进攻性安全(offensive-security)工具。有关披露策略和预期用途,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
[MIT](LICENSE)。
## 免责声明
此工具仅供教育和授权的安全测试目的使用。作者对任何滥用行为不承担责任。用户在对任何非自有设备运行这些命令之前,必须获得明确的许可。
## 参考
- [Exploiting Android Zygote Injection (CVE-2024-31317)][cve]
- [Shizuku][shizuku]
- [zygote-injection-toolkit (Python)](https://github.com/Anonymous941/zygote-injection-toolkit)
标签:Android, Bash, DSL, Go语言工具, Shell控制, Termux, 应用安全