跳板攻击之: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 本地端口转发利用方式

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

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

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

    http://127.0.0.1:8888/

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 远程端口转发利用方式

  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

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

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

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

  • 本地、远程端口转发都需要固定应用服务器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

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

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

    http://192.168.230.129:8080/

3 防御 SSH 隧道攻击

  1. 配置 SSH 远程管理白名单。
  2. 在 ACL 中限制只有特定的 IP 地址才能连接 SSH。

跳板攻击之:SSH 隧道的更多相关文章

  1. ssh隧道(通过跳板机)连接mysql

    案例: A服务器   B服务器   C服务器mysql 现在mysql服务器C只能通过内网访问,B服务器就能通过内网连接访问到mysql A服务器无法直接连接C服务器mysql,所以要通过跳板机(跳板 ...

  2. SSH隧道应用, 突破网络限制

    文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...

  3. ssh隧道

    最近有需求使用ssh隧道,顺便研究了下,以下记录一下大概说明 ssh隧道顾名思义在可以通过ssh连接的server之间建立加密隧道,常用于突破网络限制 常用三种端口转发模式:本地端口转发,远程端口转发 ...

  4. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  5. SQLyog通过ssh隧道连接MySQL

    1.简介 因为现在很多公司服务的数据库为了安全起见,都不允许直接连接其服务,而只能通过跳板机进行登陆到数据库.而ssh有一项非常有用的功能,即端口转发的隧道功能,让一些不安全的服务,像TCP.POP3 ...

  6. 流量操控之SSH隧道与端口转发

    目  录 第1章            概述... 3 1.1.         实现命令... 3 1.2.         SSH隧道类型... 3 第2章            SSH隧道... ...

  7. ssh隧道使用

    在内网中几乎所有的linux服务器和网络设备都支持ssh协议.一般情况下,ssh协议是允许通过防火墙和边界设备的,所以经常被攻击者利用.同时ssh协议的传输过程是加密的,所以我们很难区分合法的ssh会 ...

  8. SSH: ssh隧道

    简介 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接. ...

  9. 利用SSH隧道加密技术隐蔽C&C通信流量

    在网络攻防博弈中,网络流量特征分析类安全防御措施得到了广泛应用.众多厂商和企业对网络流量进行恶意流量分析检测,从而针对性的采取防御措施,如各级ISP在骨干网络设备上大多采用网络流量分析检测的防御方案. ...

  10. ssh隧道(端口转发)

    本地转发: ssh -Nf -L [bind_address:]port:host:hostport sshServer -Nf 后台运行 -L 本地转发 [bind_address] 绑定本地地址, ...

随机推荐

  1. Kettle:跨库(SQLServer->PostgreSQL)同步多张表数据的详细设计过程

    〇.参考地址 1.多个Excel实现同步 https://www.wangt.cc/2021/05/kettle%E5%A4%9A%E4%B8%AA%E8%A1%A8%E4%B8%80%E8%B5%B ...

  2. 同时容器,k8s和docker区别是什么? 如何简单理解k8s和docker

    1.k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 2.Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行 ...

  3. Python开发Brup插件检测SSRF漏洞和URL跳转

    作者:馒头,博客地址:https://www.cnblogs.com/mantou0/ 出身: 作为一名安全人员,工具的使用是必不可少的,有时候开发一些自己用的小工具在渗透时能事半功倍.在平常的渗透测 ...

  4. MSTN CE和MSTN SDK安装经验及技巧

    MSTN CE和MSTN SDK安装经验及技巧 本文介绍了MSTN CE及MSTN CE SDK安装的流程以及在安装时可能会遇到的问题 一.MSTN CE安装 1.MSTN CE即Microstati ...

  5. 安装aio-pika报错

    报错内容: WARNING: You are using pip version 21.1.2; however, version 21.3.1 is available. You should co ...

  6. java逻辑运算&&与&的区别

    本文主要阐述&&(短路与)和&(逻辑与)的运算异同:a && b 和 a&b : 共同之处是只有a和b同时为真时,结果才为真,否则为假 不同点在于 a ...

  7. vulnhub靶场之HACKABLE: III

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Hackable: III,下载地址:https://download.vulnhub.com/hackable/hackable3.ova,下 ...

  8. 【转载】EXCEL VBA 工作表拆分

    用VBA拆分工作表是一个不错的方法,特别是在处理大量数据的时候,能节省不少时间.   1.高级筛选: 筛选并复制到新工作表的关键代码如下: Range("Database").Ad ...

  9. java中json字符串与实体类对象相互转换

    1.问题描述 有一个需求是这样的,把实体类转为Json字符串存入redis中,然后再把redis中存放的实体类Json字符串插入数据库中.因此需要涉及到json字符串与实体类对象的相互转换. 2.产生 ...

  10. 控制台运行java

    控制台执行java 新建java代码 新建一个记事本文件,将文件名改为HelloWorld.java,注意:后缀是.java. 若没有显示文件后缀,可以在资源管理器打开显示后缀,然后再次修改文件名,一 ...