细说SSH隧道——本地端口转发

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 细说SSH隧道——本地端口转发,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言

【不喜欢自己写的笔记沾上水印,笔记写好,导出成MarkDown后,图片又不被CSDN读取,只能一张一张通过图片链接的方式上传图片,真是吐了🤮】

一般来说,我们使用SSH来连接远程机器,但是SSH能做的不止这些,它还可以用来做流量转发。可以把其他TCP端口的通信内容通过SSH进行转发,而SSH又是加密的,可以自动对流量加解密,这意味着我们可以利用SSH隧道突破防火墙的限制,甚至科学上网。

ssh端口转发前提是:拿下了一台linux存在ssh服务,并知道他的用户密码,然后以ssh连接为隧道进行端口转发

需要明白,建立SSH隧道是一件事情,端口侦听在哪是另一件事情。另外,侦听的端口,就是流量的入口。
侦听在客户端,应用层的流量要来自于客户端;侦听在服务器,应用层的流量就要来自于服务器。
还是觉得绕的话,仔细看下面的实验内容,最好自己动手做做,就能较好的理解了

其他:

  • 端口转发是基于建立起来的SSH隧道,隧道中断则端口转发终端
  • 只能在建立隧道时创建转发,不能为已有的隧道增加增加端口转发

根据端口绑定的方式不同,SSH隧道可以分为3种类型:

  • 本地端口转发:本机侦听端口,访问转发到远程主机指定端口
  • 远程端口转发:远程侦听端口,访问转发到本机主机指定端口
  • 动态隧道模式

SSH有关端口转发的一些参数:

-C 压缩传输,增加传输的效率
-f 将SSH传输放在后台执行
-N 建立静默连接,就是建立了连接(不执行登录shell)
-g 复用访问时作为网关,支持多主机访问本地侦听端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发
-P 指定SSH的端口

本地端口转发

将发送给本地的请求通过ssh隧道转发给目标端口,我们可以实现访问本地端口来访问目标端口的信息

举例1:服务器与SSH远程主机是分开的

命令

如果是使用ssh的22端口连接的话,不需要手动指定端口,因为我们这里把ssh的端口修改为53了,所以需要手动指定一下。

ssh -L <本地ip>:<本地端口>:<目标ip>:<目标端口> 用户名@<ssh机器IP> -p <ssh机器端口>
//<本地ip>为空则绑定本地所有ip

网络拓扑

网络拓扑如下:沿袭了上一章的“流量重定向”,只不过把办公电脑换成了CentOS,其他不变
在这里插入图片描述

环境配置

由于需要使用家庭电脑作为转发人,这里需要简单配置一下它。主要配置以下方面:
编辑SSH配置文件:vim /etc/ssh/sshd_config

  1. 修改ssh的端口为53,来适配办公环境

在这里插入图片描述

  1. 允许以root身份登录ssh(不开启也行,反正最新的kali linux默认使用kali作为登录用户了)
  2. 开启ssh登录时的密码认证

在这里插入图片描述

  1. 保存配置文件并退出
  2. 重启SSH服务

systemctl restart sshd
在这里插入图片描述

开始连接(-L连接)

ssh -L 7001:192.168.40.131:80 kali@192.168.40.146 -p 53
可以看到,终端界面已经变成了kali的了,这意味着我们SSH登录了家庭电脑
在这里插入图片描述
透过端口,也可以看到连接已经建立
在这里插入图片描述

限制,只要我访问了本地的7001端口,流量就会流到131的80端口,在访问之前,开启抓包,物理机的wireshark抓取VM1和VM8网卡的流量,kali抓取eth0的流量
当办公电脑CentOS访问本地的7001端口时候,果然看到了服务器win2008的web界面
在这里插入图片描述

登录用户

在ssh参数中,我们是直接使用了-L(本地端口转发),而没有使用-N(建立静默连接,不执行登录shell)。
现在我们来看一下情况如何:
在这里插入图片描述

看到有两个kali,其中:

  • tty指的是主机的图形化界面的面板
  • pts/x指的是远程ssh连接的窗口

这说明有人使用SSH以kali用户的身份登录了系统。

流量分析

下面的内容,总结来说就是:

  • 办公电脑和家庭电脑之间的连接是加密的
  • 家庭电脑与服务器之间是明文的(可不废话,这是http)

办公网(VM1网卡):

总共有5条会话连接,第一条和第四条看起来是有价值的。

第一条,办公电脑与防火墙之间的大量DNS数据,竟然都是都是访问一些杂七杂八的网站,这个是Firefox的锅,背地里不干好事。这条连接,看不到跟我们访问192.168.40.131服务器有关的数据。
在这里插入图片描述

第四条,看起来像是有用一些
在这里插入图片描述

追踪流看到的内容也全是加密的,嗯,符合预期设想
在这里插入图片描述

外网(NAT-VM8网卡)

总共有6条会话,只有其中第5条看起来是有用的(地址A和地址B是做实验用到的机器的ip)
在这里插入图片描述

在info信息栏中,已经看到了明文数据了,追踪流的时候,看到的也确实是明文传输。
即,家庭电脑和服务器之间是明文传输的。
在这里插入图片描述

家庭电脑抓包(eth0网卡)

有4个会话,只有第3个看起来是有用的,info栏里都是明文的内容,不用说了,就是明文访问服务器的数据
在这里插入图片描述
在这里插入图片描述

SSH参数的选取【重点】❗❗❗

重点来了,这里来聊一下SSH参数的选取。在上面,我们只使用了-L(本地端口转发)参数,结果是:

  1. 拿到了SSH主机的shell(会被发现有人SSH登录了)
  2. 与SSH主机之间加密传输数据

一些问题:拿到了SSH主机的shell,如果我要继续连接别的主机,还得继续开一个新的窗口?

现在来慢慢说这个问题:

退出了shell之后会怎样

输入exit退出shell,连接就会中断
在这里插入图片描述

之前建立的端口连接,会进入超时等待,等待一段时间之后,如果还没有人连接自己,就不再等待
在这里插入图片描述

静默连接(-N -L)

下面的实验说明:
加了-N参数相比于只有-L,有以下特点:

  1. 不会登录SSH主机
  2. 仍然会占用终端窗口

使用-N参数(不执行登录shell),首先看一下家庭电脑上登录情况。
经过上面的断开连接之后,现在只有tty(主机的图形化界面的面板),没有pts/x(远程ssh连接的窗口)
在这里插入图片描述

开始连接:
办公电脑:
ssh -N -L 7001:192.168.40.131:80 kali@192.168.40.146 -p 53
还是会占用窗口,输命令没有反应
在这里插入图片描述

可以通过访问本地的7001端口,来访问到服务器
在这里插入图片描述

端口再一次连接起来
在这里插入图片描述

家庭电脑:
没有人使用SSH登录
在这里插入图片描述

后台静默连接(-f -N -L)

命令:
ssh -fN -L 7001:192.168.40.131:80 kali@192.168.40.146 -p 53
没有占用终端窗口
在这里插入图片描述

最终版(-C -f -N -L)

加入-C(压缩传输,增加传输的效率)
ssh -CfN -L 7003:192.168.40.131:80 kali@192.168.40.146 -p 53
由于7001端口已经被占用了,所以这里换一个端口
在这里插入图片描述

举例2:SSH远程主机是服务器

网络拓扑

在kali上面开一个apache服务即可:systemctl restart apache2
在这里插入图片描述

开始连接

命令:ssh -CfN -L 7004:192.168.40.146:80 kali@192.168.40.146 -p 53
在这里插入图片描述

通过浏览器访问一下看看
在这里插入图片描述

命令变形

我们命令:ssh -CfN -L 7004:192.168.40.146:80 kali@192.168.40.146 -p 53连接成功,但是,由于服务器和SSH主机是同一个,这里访问服务器的就是在访问SSH主机,于是命令变形如下:
ssh -CfN -L 7004:localhost:80 kali@192.168.40.146 -p 53
在这里插入图片描述

举例3:连接远程桌面

使用“举例1”中提到的拓扑,即,把win2008作为服务器,一会获取它的远程桌面。
由于我的CentOS是没有用来远程桌面的软件,所以需要临时连接网络下载一下软件。mono的防火墙设置参见上一个章节“流量重定向

部署rdesktop

(1)解除mono的网络限制
在这里插入图片描述

(2)安装rdesktop

wget http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
rpm -Uvh nux-dextop-release*rpm
yum install rdesktop -y

在这里插入图片描述

在这里插入图片描述

(3)恢复网络限制
在这里插入图片描述

开始连接

连接SSH:ssh -CfN -L 7010:192.168.40.131:3389 kali@192.168.40.146 -p 53
远程桌面连接:rdesktop 127.0.0.1:7007
【警告:注意,这里连接的是服务器的3389端口,不是80端口了!!!】
在这里插入图片描述

在应用程序列表里发现了这个东东,缺点就是,显示效果没有rdesktop显示的好
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重新连接

或者,克隆一个kali来临时代替一下Cent吧(不用麻烦安装RDP了)
在这里插入图片描述
在这里插入图片描述

由于服务器上是没有kali用户的,所以选择“其他用户”
在这里插入图片描述

在这里插入图片描述

案例4:把自己共享给所有人

假设你自己可以通过家庭电脑来访问服务器,那你能不能让你办公电脑局域网里的其他电脑也访问服务器呢?
是可以的,使用SSH的-g参数,把你自己作为网关即可。
在这里插入图片描述

办公电脑连接

这里,加入了-g参数
在这里插入图片描述

其他电脑连接

这里,假设办公电脑CentOS所在局域网中有一台win7,那么win7怎么远程桌面连接服务器呢?
CMD窗口中可以看到,win7是没有ssh的,通过连接CentOS的7020端口,可以远程连接
在这里插入图片描述

在这里插入图片描述

案例5:基于SSH使用nc拿shell

这个案例什么意思呢?就是CentOS通过kali建立了SSH隧道,使得CentOS可以访问服务器,那么,如何让与CentOS在同一个局域网的win7反弹shell到服务器呢?
在这里插入图片描述

下面的操作,我是这么理解的,由于是SSH本地端口转发,所以win7使用nc访问CentoS的端口时,会经过SSH隧道路过家庭电脑kali,然后转发到服务器的端口上,而这个端口又正在被服务器监听,于是shell建立在了win7和服务器之间(一个反向控制的shell)。

服务器准备

服务器监听本地的3333端口
在这里插入图片描述

隧道建立

首先,使用跟案例4同样的手法,建立一条ssh隧道,办公电脑监听在7080端口
一定要加-g参数:ssh -CfNg -L 7777:192.168.40.131:3333 kali@192.168.40.146 -p 53
在这里插入图片描述

局域网电脑准备

使用nc,来反弹shell,反弹到办公电脑的监听端口7777上,这个shell会被转发到服务器的3389端口
在这里插入图片描述

服务器拿shell

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134317.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!