渗透测试、驻场运维、红队打点,我们需要进行代理。但是代理只认 HTTP 请求,SSH 是二进制协议,看起来无解。但只要代理支持 CONNECT(HTTPS 代理的标准动作),我们就能让代理帮我们"打个洞"。
proxytunnel是一款把任意 TCP 连接伪装成 HTTPS 请求,塞进 HTTP 代理里运出去。

在Kali 默认安装,无需额外安装。执行下面命令,查看帮助。
proxytunnel -h
小试牛刀
接下来,我们通过几个小例子。简单来看看它的用法!
01 快速开始
当前,我无法直接连接192.168.50.44 这台机器,而是委托 192.168.50.157:8080 这台代理,让它替我在它和目标之间开一条 TCP 隧道,开好后把这条隧道接到我的终端上。命令如下:
proxytunnel -v -p 192.168.5.157:8080 -d 192.168.50.44:22
-p本地(前置)代理-d最终目标-v打开详细日志
也就是说,我们通过192.168.5.157这台设备,作为跳板机,从而访问192.168.50.44这台设备的22端口。
02 带代理认证
很多时候,为了代理安全,我们还可以给其添加密码。
proxytunnel -v -p 192.168.5.157:8080 -P kali:123456 -d 192.168.50.44:22实测成功输出:
-> CONNECT 127.0.0.1:2222 HTTP/1.1
-> Host: 127.0.0.1:2222
-> Proxy-Authorization: Basic a2FsaToxMjM0NTY=
<- HTTP/1.1 200 Connection established
Tunnel established.看到 Proxy-Authorization: Basic xxx 和 200 Connection established,隧道就成了。
03 给 SSH 当 ProxyCommand
proxytunnel 自己只是个"管道",你手动敲它没有意义。它的主战场是 OpenSSH 的 ProxyCommand。编辑 ~/.ssh/config:
Host jump-host
HostName 8.8.8.8
Port 443
User root
ProxyCommand proxytunnel -p 10.0.0.1:8080 -P kali:123456 -d %h:%p
ServerAliveInterval 30
ServerAliveCountMax 3然后:
ssh jump-hostSSH 客户端会自己把 proxytunnel 拉起来当传输层,跟直连体验完全一样。
debug1: Executing proxy command: exec proxytunnel -p 127.0.0.1:8080 -P kali:123456 -d 127.0.0.1:2222
debug1: SSH2_MSG_KEXINIT sent总结
Proxytunnel 没有服务端,也不需要公网机器,它是纯客户端工具。它做的是把一条 TCP 连接塞进 HTTP 代理的 CONNECT 里带出去——代理日志里只会留下一条到 443 的连接记录,看不出里面跑的是 SSH。这就是它在受限网络里好用的原因。
更多精彩文章 欢迎关注我们
本文首发于微信公众号,原文链接:内网称霸:一条命令学会穿墙