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

目录

  • 前言
  • 本地端口转发
  • 举例1:服务器与SSH远程主机是分开的
    • 命令
    • 网络拓扑
    • 环境配置
    • 开始连接(-L连接)
    • 登录用户
    • 流量分析
      • 办公网(VM1网卡):
      • 外网(NAT-VM8网卡)
      • 家庭电脑抓包(eth0网卡)
  • SSH参数的选取【重点】❗❗❗
    • 退出了shell之后会怎样
    • 静默连接(-N -L)
    • 后台静默连接(-f -N -L)
    • 最终版(-C -f -N -L)
  • 举例2:SSH远程主机是服务器
    • 网络拓扑
    • 开始连接
    • 命令变形
  • 举例3:连接远程桌面
    • 部署rdesktop
    • 开始连接
    • 重新连接
  • 案例4:把自己共享给所有人
    • 办公电脑连接
    • 其他电脑连接
  • 案例5:基于SSH使用nc拿shell
    • 服务器准备
    • 隧道建立
    • 局域网电脑准备
    • 服务器拿shell

前言

【不喜欢自己写的笔记沾上水印,笔记写好,导出成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隧道——本地端口转发_第1张图片

环境配置

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

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

细说SSH隧道——本地端口转发_第2张图片

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

细说SSH隧道——本地端口转发_第3张图片

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

systemctl restart sshd
细说SSH隧道——本地端口转发_第4张图片

开始连接(-L连接)

ssh -L 7001:192.168.40.131:80 [email protected] -p 53
可以看到,终端界面已经变成了kali的了,这意味着我们SSH登录了家庭电脑
细说SSH隧道——本地端口转发_第5张图片
透过端口,也可以看到连接已经建立
细说SSH隧道——本地端口转发_第6张图片

限制,只要我访问了本地的7001端口,流量就会流到131的80端口,在访问之前,开启抓包,物理机的wireshark抓取VM1和VM8网卡的流量,kali抓取eth0的流量
当办公电脑CentOS访问本地的7001端口时候,果然看到了服务器win2008的web界面
细说SSH隧道——本地端口转发_第7张图片

登录用户

在ssh参数中,我们是直接使用了-L(本地端口转发),而没有使用-N(建立静默连接,不执行登录shell)。
现在我们来看一下情况如何:
细说SSH隧道——本地端口转发_第8张图片

看到有两个kali,其中:

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

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

流量分析

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

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

办公网(VM1网卡):

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

第一条,办公电脑与防火墙之间的大量DNS数据,竟然都是都是访问一些杂七杂八的网站,这个是Firefox的锅,背地里不干好事。这条连接,看不到跟我们访问192.168.40.131服务器有关的数据。
细说SSH隧道——本地端口转发_第9张图片

第四条,看起来像是有用一些
细说SSH隧道——本地端口转发_第10张图片

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

外网(NAT-VM8网卡)

总共有6条会话,只有其中第5条看起来是有用的(地址A和地址B是做实验用到的机器的ip)
细说SSH隧道——本地端口转发_第11张图片

在info信息栏中,已经看到了明文数据了,追踪流的时候,看到的也确实是明文传输。
即,家庭电脑和服务器之间是明文传输的。
细说SSH隧道——本地端口转发_第12张图片

家庭电脑抓包(eth0网卡)

有4个会话,只有第3个看起来是有用的,info栏里都是明文的内容,不用说了,就是明文访问服务器的数据
细说SSH隧道——本地端口转发_第13张图片
细说SSH隧道——本地端口转发_第14张图片

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

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

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

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

现在来慢慢说这个问题:

退出了shell之后会怎样

输入exit退出shell,连接就会中断
细说SSH隧道——本地端口转发_第15张图片

之前建立的端口连接,会进入超时等待,等待一段时间之后,如果还没有人连接自己,就不再等待
细说SSH隧道——本地端口转发_第16张图片

静默连接(-N -L)

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

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

使用-N参数(不执行登录shell),首先看一下家庭电脑上登录情况。
经过上面的断开连接之后,现在只有tty(主机的图形化界面的面板),没有pts/x(远程ssh连接的窗口)
细说SSH隧道——本地端口转发_第17张图片

开始连接:
办公电脑:
ssh -N -L 7001:192.168.40.131:80 [email protected] -p 53
还是会占用窗口,输命令没有反应
细说SSH隧道——本地端口转发_第18张图片

可以通过访问本地的7001端口,来访问到服务器
细说SSH隧道——本地端口转发_第19张图片

端口再一次连接起来
细说SSH隧道——本地端口转发_第20张图片

家庭电脑:
没有人使用SSH登录
细说SSH隧道——本地端口转发_第21张图片

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

命令:
ssh -fN -L 7001:192.168.40.131:80 [email protected] -p 53
没有占用终端窗口
细说SSH隧道——本地端口转发_第22张图片

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

加入-C(压缩传输,增加传输的效率)
ssh -CfN -L 7003:192.168.40.131:80 [email protected] -p 53
由于7001端口已经被占用了,所以这里换一个端口
细说SSH隧道——本地端口转发_第23张图片

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

网络拓扑

在kali上面开一个apache服务即可:systemctl restart apache2
细说SSH隧道——本地端口转发_第24张图片

开始连接

命令:ssh -CfN -L 7004:192.168.40.146:80 [email protected] -p 53
细说SSH隧道——本地端口转发_第25张图片

通过浏览器访问一下看看
细说SSH隧道——本地端口转发_第26张图片

命令变形

我们命令:ssh -CfN -L 7004:192.168.40.146:80 [email protected] -p 53连接成功,但是,由于服务器和SSH主机是同一个,这里访问服务器的就是在访问SSH主机,于是命令变形如下:
ssh -CfN -L 7004:localhost:80 [email protected] -p 53
细说SSH隧道——本地端口转发_第27张图片

举例3:连接远程桌面

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

部署rdesktop

(1)解除mono的网络限制
细说SSH隧道——本地端口转发_第28张图片

(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

细说SSH隧道——本地端口转发_第29张图片

细说SSH隧道——本地端口转发_第30张图片

(3)恢复网络限制
细说SSH隧道——本地端口转发_第31张图片

开始连接

连接SSH:ssh -CfN -L 7010:192.168.40.131:3389 [email protected] -p 53
远程桌面连接:rdesktop 127.0.0.1:7007
【警告:注意,这里连接的是服务器的3389端口,不是80端口了!!!】
细说SSH隧道——本地端口转发_第32张图片

在应用程序列表里发现了这个东东,缺点就是,显示效果没有rdesktop显示的好
细说SSH隧道——本地端口转发_第33张图片

细说SSH隧道——本地端口转发_第34张图片

细说SSH隧道——本地端口转发_第35张图片

细说SSH隧道——本地端口转发_第36张图片

重新连接

或者,克隆一个kali来临时代替一下Cent吧(不用麻烦安装RDP了)
细说SSH隧道——本地端口转发_第37张图片
细说SSH隧道——本地端口转发_第38张图片

由于服务器上是没有kali用户的,所以选择“其他用户”
细说SSH隧道——本地端口转发_第39张图片

细说SSH隧道——本地端口转发_第40张图片

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

假设你自己可以通过家庭电脑来访问服务器,那你能不能让你办公电脑局域网里的其他电脑也访问服务器呢?
是可以的,使用SSH的-g参数,把你自己作为网关即可。
细说SSH隧道——本地端口转发_第41张图片

办公电脑连接

这里,加入了-g参数
细说SSH隧道——本地端口转发_第42张图片

其他电脑连接

这里,假设办公电脑CentOS所在局域网中有一台win7,那么win7怎么远程桌面连接服务器呢?
CMD窗口中可以看到,win7是没有ssh的,通过连接CentOS的7020端口,可以远程连接
细说SSH隧道——本地端口转发_第43张图片

细说SSH隧道——本地端口转发_第44张图片

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

这个案例什么意思呢?就是CentOS通过kali建立了SSH隧道,使得CentOS可以访问服务器,那么,如何让与CentOS在同一个局域网的win7反弹shell到服务器呢?
细说SSH隧道——本地端口转发_第45张图片

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

服务器准备

服务器监听本地的3333端口
细说SSH隧道——本地端口转发_第46张图片

隧道建立

首先,使用跟案例4同样的手法,建立一条ssh隧道,办公电脑监听在7080端口
一定要加-g参数:ssh -CfNg -L 7777:192.168.40.131:3333 [email protected] -p 53
细说SSH隧道——本地端口转发_第47张图片

局域网电脑准备

使用nc,来反弹shell,反弹到办公电脑的监听端口7777上,这个shell会被转发到服务器的3389端口
细说SSH隧道——本地端口转发_第48张图片

服务器拿shell

细说SSH隧道——本地端口转发_第49张图片

你可能感兴趣的:(渗透测试,端口转发,SSH)