这是一篇补记的文章,防止自己给忘了
jumpserver跳板机是常备的需求,那怎么跳过它的审计呢?
有办法,psc , https://github.com/stealth/psc
它的核心思路是: 在现有的 shell 会话之上,再铺一层端到端加密的协议,数据全部用 Base64 编码传输(所以看起来是乱码),从而规避跳板机/堡垒机的会话审计和字符过滤。
数据流向示意
text
本地机器 远程机器
┌─────────────┐ ┌─────────────┐
│ 你的程序 │ │ 目标服务 │
│ (ssh/curl等)│ │ (22/80等) │
└──────┬──────┘ └──────▲──────┘
│ 连接本地端口 │
▼ │
┌─────────────┐ ┌───────┴───────┐
│ pscl │ ◄── Base64+加密 ──► │ pscr │
│ (本地进程) │ (通过shell) │ (远程进程) │
└──────┬──────┘ └───────▲───────┘
│ │
│ 标准输入/输出 │ 标准输入/输出
▼ │
┌─────────────┐ ┌───────┴───────┐
│ 本地pty │ ◄── SSH/UART等 ──► │ 远程shell │
└─────────────┘ └───────────────┘
1. 基本组件
| 程序 | 运行位置 | 作用 |
|---|---|---|
| pscl | 本地(攻击机) | 等待远程会话,设置本地监听端口,处理加密与转发 |
| pscr | 远程(目标/跳板机 shell 里) | 与本地建立加密握手,处理远程侧的连接 |
2. 编译
Bash
git clone https://github.com/stealth/psc
cd psc
编辑 Makefile 顶部,设置你自己的预共享密钥(PSK),例如:
makefile
# 修改这两行
PSK1 = "your-secret-key-1"
PSK2 = "your-secret-key-2"
然后编译:
Bash
make # Linux / macOS
# BSD 用 gmake
生成 pscl 和 pscr。
注意:两边必须用同一份密钥编译出来的二进制,否则握手失败。
3. 基本用法(最常用场景)
本地先启动 pscl,并指定要转发的端口:
Bash
./pscl -T 2222:[192.168.1.100]:22 -T 8080:[10.0.0.5]:80 -U 5353:[8.8.8.8]:53
含义:
- 本地 127.0.0.1:2222 → 远程能访问到的 192.168.1.100:22
- 本地 127.0.0.1:8080 → 远程的 10.0.0.5:80
- 本地 UDP 5353 → 远程 DNS 8.8.8.8:53
正确使用流程(WindTerm 版)
- 本地先启动 pscl(在你自己电脑的终端里,不是在 WindTerm 里)
Bash
./pscl -T 2222:[目标内网IP]:22 -5 1080
看到它提示 Waiting for [pscr] session to appear … 后先放着。
用 WindTerm 正常连接跳板机
打开 WindTerm
连接你的跳板机(不管是直接连,还是配置了多级跳板)
登录成功后,你会得到一个正常的 shell 提示符,例如:
text
[user@jump ~]$
在这个 WindTerm 的 shell 窗口里运行 pscr
把编译好的 pscr 上传到跳板机(或者提前放好),然后执行:
Bash
./pscr
执行后,本地的 pscl 会检测到握手,两边开始加密通讯。 此时 WindTerm 的窗口里会出现大量乱码(这是正常的,因为数据已经变成 Base64 + 加密流量了)。
之后就正常使用本地端口
在你本地电脑上:
Bash
ssh -p 2222 user@127.0.0.1 # 或者用 SOCKS proxychains curl http://内网地址