【不喜欢自己写的笔记沾上水印,笔记写好,导出成MarkDown后,图片又不被CSDN读取,只能一张一张通过图片链接的方式上传图片,真是吐了】
一般来说,我们使用SSH来连接远程机器,但是SSH能做的不止这些,它还可以用来做流量转发。可以把其他TCP端口的通信内容通过SSH进行转发,而SSH又是加密的,可以自动对流量加解密,这意味着我们可以利用SSH隧道突破防火墙的限制,甚至科学上网。
ssh端口转发前提是:拿下了一台linux存在ssh服务,并知道他的用户密码,然后以ssh连接为隧道进行端口转发
需要明白,建立SSH隧道是一件事情,端口侦听在哪是另一件事情。另外,侦听的端口,就是流量的入口。
侦听在客户端,应用层的流量要来自于客户端;侦听在服务器,应用层的流量就要来自于服务器。
还是觉得绕的话,仔细看下面的实验内容,最好自己动手做做,就能较好的理解了
其他:
根据端口绑定的方式不同,SSH隧道可以分为3种类型:
SSH有关端口转发的一些参数:
-C 压缩传输,增加传输的效率
-f 将SSH传输放在后台执行
-N 建立静默连接,就是建立了连接(不执行登录shell)
-g 复用访问时作为网关,支持多主机访问本地侦听端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发
-P 指定SSH的端口
将发送给本地的请求通过ssh隧道转发给目标端口,我们可以实现访问本地端口来访问目标端口的信息
如果是使用ssh的22端口连接的话,不需要手动指定端口,因为我们这里把ssh的端口修改为53了,所以需要手动指定一下。
ssh -L <本地ip>:<本地端口>:<目标ip>:<目标端口> 用户名@<ssh机器IP> -p <ssh机器端口>
//<本地ip>为空则绑定本地所有ip
网络拓扑如下:沿袭了上一章的“流量重定向”,只不过把办公电脑换成了CentOS,其他不变
由于需要使用家庭电脑作为转发人,这里需要简单配置一下它。主要配置以下方面:
编辑SSH配置文件:vim /etc/ssh/sshd_config
ssh -L 7001:192.168.40.131:80 [email protected] -p 53
可以看到,终端界面已经变成了kali的了,这意味着我们SSH登录了家庭电脑
透过端口,也可以看到连接已经建立
限制,只要我访问了本地的7001端口,流量就会流到131的80端口,在访问之前,开启抓包,物理机的wireshark抓取VM1和VM8网卡的流量,kali抓取eth0的流量
当办公电脑CentOS访问本地的7001端口时候,果然看到了服务器win2008的web界面
在ssh参数中,我们是直接使用了-L
(本地端口转发),而没有使用-N(建立静默连接,不执行登录shell)。
现在我们来看一下情况如何:
看到有两个kali,其中:
这说明有人使用SSH以kali用户的身份登录了系统。
下面的内容,总结来说就是:
总共有5条会话连接,第一条和第四条看起来是有价值的。
第一条,办公电脑与防火墙之间的大量DNS数据,竟然都是都是访问一些杂七杂八的网站,这个是Firefox的锅,背地里不干好事。这条连接,看不到跟我们访问192.168.40.131服务器有关的数据。
追踪流看到的内容也全是加密的,嗯,符合预期设想
总共有6条会话,只有其中第5条看起来是有用的(地址A和地址B是做实验用到的机器的ip)
在info信息栏中,已经看到了明文数据了,追踪流的时候,看到的也确实是明文传输。
即,家庭电脑和服务器之间是明文传输的。
有4个会话,只有第3个看起来是有用的,info栏里都是明文的内容,不用说了,就是明文访问服务器的数据
重点来了,这里来聊一下SSH参数的选取。在上面,我们只使用了-L
(本地端口转发)参数,结果是:
一些问题:拿到了SSH主机的shell,如果我要继续连接别的主机,还得继续开一个新的窗口?
现在来慢慢说这个问题:
之前建立的端口连接,会进入超时等待,等待一段时间之后,如果还没有人连接自己,就不再等待
下面的实验说明:
加了-N参数相比于只有-L,有以下特点:
使用-N参数(不执行登录shell),首先看一下家庭电脑上登录情况。
经过上面的断开连接之后,现在只有tty(主机的图形化界面的面板),没有pts/x(远程ssh连接的窗口)
开始连接:
办公电脑:
ssh -N -L 7001:192.168.40.131:80 [email protected] -p 53
还是会占用窗口,输命令没有反应
命令:
ssh -fN -L 7001:192.168.40.131:80 [email protected] -p 53
没有占用终端窗口
加入-C
(压缩传输,增加传输的效率)
ssh -CfN -L 7003:192.168.40.131:80 [email protected] -p 53
由于7001端口已经被占用了,所以这里换一个端口
在kali上面开一个apache服务即可:systemctl restart apache2
命令:ssh -CfN -L 7004:192.168.40.146:80 [email protected] -p 53
我们命令: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
使用“举例1”中提到的拓扑,即,把win2008作为服务器,一会获取它的远程桌面。
由于我的CentOS是没有用来远程桌面的软件,所以需要临时连接网络下载一下软件。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
连接SSH:ssh -CfN -L 7010:192.168.40.131:3389 [email protected] -p 53
远程桌面连接:rdesktop 127.0.0.1:7007
【警告:注意,这里连接的是服务器的3389端口,不是80端口了!!!】
在应用程序列表里发现了这个东东,缺点就是,显示效果没有rdesktop显示的好
或者,克隆一个kali来临时代替一下Cent吧(不用麻烦安装RDP了)
假设你自己可以通过家庭电脑来访问服务器,那你能不能让你办公电脑局域网里的其他电脑也访问服务器呢?
是可以的,使用SSH的-g
参数,把你自己作为网关即可。
这里,假设办公电脑CentOS所在局域网中有一台win7,那么win7怎么远程桌面连接服务器呢?
CMD窗口中可以看到,win7是没有ssh的,通过连接CentOS的7020端口,可以远程连接
这个案例什么意思呢?就是CentOS通过kali建立了SSH隧道,使得CentOS可以访问服务器,那么,如何让与CentOS在同一个局域网的win7反弹shell到服务器呢?
下面的操作,我是这么理解的,由于是SSH本地端口转发,所以win7使用nc访问CentoS的端口时,会经过SSH隧道路过家庭电脑kali,然后转发到服务器的端口上,而这个端口又正在被服务器监听,于是shell建立在了win7和服务器之间(一个反向控制的shell)。
首先,使用跟案例4同样的手法,建立一条ssh隧道,办公电脑监听在7080端口
一定要加-g
参数:ssh -CfNg -L 7777:192.168.40.131:3333 [email protected] -p 53
使用nc,来反弹shell,反弹到办公电脑的监听端口7777上,这个shell会被转发到服务器的3389端口