目录
前言
【不喜欢自己写的笔记沾上水印,笔记写好,导出成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
- 修改ssh的端口为53,来适配办公环境
- 允许以root身份登录ssh(不开启也行,反正最新的kali linux默认使用kali作为登录用户了)
- 开启ssh登录时的密码认证
- 保存配置文件并退出
- 重启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
(本地端口转发)参数,结果是:
- 拿到了SSH主机的shell(会被发现有人SSH登录了)
- 与SSH主机之间加密传输数据
一些问题:拿到了SSH主机的shell,如果我要继续连接别的主机,还得继续开一个新的窗口?
现在来慢慢说这个问题:
退出了shell之后会怎样
输入exit
退出shell,连接就会中断
之前建立的端口连接,会进入超时等待,等待一段时间之后,如果还没有人连接自己,就不再等待
静默连接(-N -L)
下面的实验说明:
加了-N参数相比于只有-L,有以下特点:
- 不会登录SSH主机
- 仍然会占用终端窗口
使用-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