跳板攻击之: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. 【Java SE进阶】Day06 线程、同步

    一.线程 1.多线程原理 流程图 内存图解说明 创建线程的方式 继承Thread类 实现 Runnable接口 2.继承Thead类 3.实现Runnable接口 实现接口,重写run方法 最终均需要 ...

  2. Rust学习之旅(读书笔记):枚举 (Enum)

    Rust学习之旅(读书笔记):枚举 (Enum) C 语言的枚举类型很弱,不如后来的语言,也不如之前的语言.在 C 语言里面枚举量就是一个名字,更方便的定义常量.今天读了<The Rust Pr ...

  3. 基于.NetCore开发博客项目 StarBlog - (23) 文章列表接口分页、过滤、搜索、排序

    前言 上一篇留的坑,火速补上. 在之前的第6篇中,已经有初步介绍,本文做一些补充,已经搞定这部分的同学可以快速跳过,基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列 ...

  4. 二阶段目标检测网络-Cascade RCNN 详解

    摘要 1,介绍 1.1,Faster RCNN 回顾 1.2,mismatch 问题 2,实验分析 2.1,改变IoU阈值对Detector性能的影响 2.2,提高IoU阈值的影响 2.3,和Iter ...

  5. Redis学习整理

    目录 1.Redis基本概念 2.Redis的5种基本类型 3.Jedis整合redis操作 4.Springboot整合redis 5.Redis主从复制 5.1.概念 5.2.原理 6.开启主从复 ...

  6. java注解基础知识整理

    目录 1.注解的定义 1.1.定义一个注解 1.2.注解的使用 2.JDK内置注解 2.1.java.lang包下的注释类型 2.2.元注解 2.3.Deprecated注解 3.在注解中定义属性 3 ...

  7. cmd/批处理常用命令

    启动新窗口执行命令 ::执行完毕以后,新开的窗口不会自动关闭 start cmd /k echo 123 ::执行完毕以后,新开的窗口会自动关闭 start cmd /C "echo 123 ...

  8. python之路32 网络并发线程方法 线程池 协程

    多进程实现TCP服务端并发 服务端: import socket from multiprocessing import Process def get_server(): server = sock ...

  9. [cocos2d-x]捕鱼达人炮台射击角度的旋转实现

    话不多说,先上图,下面是实现代码(在后面会具体讲解实现过程): //第一步:将炮台的坐标转换为世界坐标下的坐标点 CCPoint location = this->getParent()-> ...

  10. 微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法

    官方实例:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Obje ...