这是一篇补记的文章,防止自己给忘了

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 版)

  1. 本地先启动 pscl(在你自己电脑的终端里,不是在 WindTerm 里)

Bash

./pscl -T 2222:[目标内网IP]:22 -5 1080

看到它提示 Waiting for [pscr] session to appear … 后先放着。

  1. 用 WindTerm 正常连接跳板机

    • 打开 WindTerm

    • 连接你的跳板机(不管是直接连,还是配置了多级跳板)

    • 登录成功后,你会得到一个正常的 shell 提示符,例如:

      text

      [user@jump ~]$
      
  2. 在这个 WindTerm 的 shell 窗口里运行 pscr

    把编译好的 pscr 上传到跳板机(或者提前放好),然后执行:

Bash

./pscr

执行后,本地的 pscl 会检测到握手,两边开始加密通讯。 此时 WindTerm 的窗口里会出现大量乱码(这是正常的,因为数据已经变成 Base64 + 加密流量了)。

  1. 之后就正常使用本地端口

    在你本地电脑上:

    Bash

    ssh -p 2222 user@127.0.0.1
    # 或者用 SOCKS
    proxychains curl http://内网地址