SSH应用层隧道原理

admin 2022年4月9日17:08:06评论118 views字数 3963阅读13分12秒阅读模式

一、SSH 协议简介SSH(Secure Shell protocol)协议是应用层协议,OpenSSH 是 SSH (Secure SHell)协议
的免费开源实现,SSH 协议族可以用来进行远程控制,或在计算机之间传送文件。而
实现此功能的传统方式,如 telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh 都是极为不
安全的,并且会使用明文传送密码。OpenSSH 提供了服务端后台程序和客户端工具,
用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。
二、SSH 工作原理私钥 KEYpri加密公钥 KEYpub解密
1)server 第一次启动 sshd 服务时候,会生成自己的私钥 KEYser-pri,生成公钥 KEYserpub存放在/etc/ssh/ssh_host_*下
2)client 用户发起 ssh 请求
3)server 将自己的公钥 KEYser-pub发送给 client
4)client 将 server 的公钥 KEYser-pub存放于~/.ssh/known_hosts 下,并开始生成自己
的公私钥 KEYcli-pub 和 KEYcli-pri
5)client 回传自己的公钥 KEYcli-pub到 server,此时 server 端有自己的私钥 KEYser-pri
和 client 的公钥 KEYcli-pub,client 端有自己的私钥 KEYcli-pri和 server 的公钥 KEYserpub,之后可以使用公私钥加密通信了。
6)开始双向加密通信

要点:
/etc/ssh/ssh_host_* 是服务端放置自己的公钥的地方
~/.ssh/known_hosts 是客户端存放服务端公钥的地方
server 端(keyser-pri+keycli-pub)keyser-pri用来发送数据时加密发送,keycli-pub用来接
收 client 数据后解密
client 端(keycli-pri+keyser-pub)keycli-pri用来发送数据时加密发送,keyser-pub用来接收
client 数据后解密
三、SSH 协议组成
1)传输层协议:提供服务器认证,保密性和完整性,和可以压缩提高传输效率。基于
TCP/IP 连接
2)用户认证协议:为服务器提供客户的身份认证
3)连接协议:对接上层的网络安全应用协议

SSH应用层隧道原理

认证方式:
1)支持 username-passwd 认证
2)支持秘钥认证
四、SSH 隧道技术普通的 ssh 命令如下:
ssh [email protected]
创建隧道常用的参数说明:
-C:压缩传输,提高传输速度
-f:将 ssh 转入后台执行,不占用当前的 shell
-N:建立静默连接(不回显 ssh 页面)
-g:允许远程主机连接本地用于端口转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态端口转发(socket 代理)
-p:指定 ssh 端口

Q1、什么是端口转发?

ssh 会加密和解密 ssh 客户端与服务端的网络数据,ssh 还可以将其他的 tcp 端口网络
数据通过 ssh 链接来转发,并且是机密解密的(又称隧道)。而且一般情况下 ssh 协
议是被允许通过防火墙的,所以很容易被攻击者利用。

Q2、ssh 端口转发的优势?

1)加密客户端和服务端之间通讯数据
2)可以突破防火墙的限制
1、本地转发(远程转发到本地-正向代理)

SSH应用层隧道原理

情景一:
A 想访问 B 但是无法穿透防火墙,但是 A 可以对 B 发送 SSH 连接
所以在 A 上执行命令:
ssh -NL 54321[本地端口]:localhost[目标 ip]:12345[目标端口] username[目标用
户名]@B[ip/host] -p 22[目标 ssh 监听的端口]
然后输入 B 的 ssh 密码
含义是:在 A 上访问自己的 54321 端口相当于通过(B 的)localhost 的 12345 端
口。
然后 A 在自己本地访问 54321 端口数据就会通过 ssh 发送给了 B,然后 B 访问了自己
的 12345 端口,这样就可以通过 B 的 12345 访问 B 的网络,本地端口 54321 转发到了
远程主机去访问某个端口

情景二:

SSH应用层隧道原理

vps 可以访问 web server(192.168.2.11),但是不能访问 data server
(1.1.1.5),但是 web server 有两块网卡,可以使用 ssh 将 vps 的 54321 端口本地
转发到远端的 web server,通过 web server 去访问 data server 的 3389 端口(实际
上是走了 web server 的另一块网卡 1.1.1.6 访问了 data server 的 3389,把 web
server 当成跳板机)
在 hacker 上控制 vps 执行命令:

ssh -CfNg -L 54321[本机端口]:1.1.1.5[目标 ip]:3389[目标端口] username[跳板机用户名]@192.168.2.11[跳板机 ip 或 host] -p 22[跳板机 ssh 监听端口] 

SSH应用层隧道原理查看本地 54321 端口是否连接:netstat -tulnp | grep "54321"如果连接建立,此时 vps 访问自己的本地的 54321 端口就相当于借助 web server 的访问了 data server 的 3389 端口
vps 上执行命令:rdesktop 127.0.0.1:54321 即可打开 data server 的 3389 远程桌
面或者 hacker 上执行命令:rdesktop 150.150.150.150:54321 也可以访问到 data
server 的 3389 远程桌面.

注意:
本地端口转发:是在本地监听一个端口,所有访问这个端口的数据都会通过 ssh 隧道
传输到远端机器,由远端机器代理去访问某个端口。
本地端口映射:是把本地的某个端口转发到远端机器的指定端口。



2、远程转发(本地转发到远程-反向代理)

本地端口转发:是将本地的监听一个端口通过 ssh 转发到远端主机(服务器)的某个
端口。(自己本地启端口给远端用)
远程端口转发:是在远端主机上监听一个端口,所有的访问远程主机的这个端口的数
据都会通过 ssh 转发到本地对应的端口(让远端自己启端口给自己用)



SSH应用层隧道原理

情景一:
vps 不能访问内网 3 台机器。Web server 可以访问 vps,data 和域控都是纯内网机
器,要想访问内网的 data server 的 3389,可以使用 ssh 让 web server 主机监听一
个端口,使 web server 把监听到的数据通过 ssh 隧道传输给本地对应的 3399 端口
(web server 跳板机)。
在 hacker 上控制 vps 执行命令:

ssh -CfNg -R 3399[本机端口]:1.1.1.5[目标 ip]:3389[目标端口] username[跳板机用户名]@192.168.2.11[跳板机ip或 host] -p 22[跳板机 ssh 监听端口] 

SSH应用层隧道原理【注意执行了-R 参数】
vps 上执行命令:rdesktop 127.0.0.1:3399 即可打开 data server 的 3389 远程桌面
或者 hacker 上执行命令:rdesktop 150.150.150.150:3399 也可以访问到 data
server 的 3389 远程桌面

3、动态转发(socks5 代理)

SSH应用层隧道原理


情景一:
操作 vps,使用 ssh 动态代理,借助 web server 实现 vps 访问域控制器上的文件。
操作步骤:
1)vps 执行让 web server 开启动态转发命令:
ssh -CfNg -D 8888[本地监听端口] username[用户名]@192.168.2.11[ip 或
host] -p 22[ssh 监听端口]
2)vps 本地给浏览器配置 socks5 proxy 代理:127.0.0.1:8888。
3)然后浏览器访问域控制器 1.1.1.2 即可。

情景二:

SSH应用层隧道原理

hacker 本机不直接访问 web server,而是走 vps 动态代理访问 web server
操作步骤:
1)hacker 上执行让 vps 开启动态转发命令:

ssh -CfNg -D 8888[本地监听端口] root[vps 用户名]@150.150.150.150[ip 或
host] -p 22[ssh 监听端口]

2)hacker 本机设置浏览器 socks5 代理:127.0.0.1:8888
3)然后浏览器访问 web server 即可,此时 web server 被访问显示的 ip 是 vps 的,
hacker 的 ip 不显示
【本机操作见SSH 动态代理】
五、进阶使用
1)进阶 ssh 多级跳板机动态代理

参数 -J 【jump-host】
语法:

ssh -J [user@jump-host:port] [user@remote-host:port]
ssh -J [user1@jump-host1:port],[user2@jump-host2:port]…
[user@remote-host:port]

示例:
**ssh -J user1@host1,user2@host2,uesr3@host3 D-user@D-host**

SSH应用层隧道原理

ssh 代理了一圈(7 台机器)最后从 93 机器登陆了 55,但是在 55 机器上只能看到是93 登录,并不知道最开始 ip 在哪

SSH应用层隧道原理

ssh 开启动态代理从 55 出口出去+代理了一圈跳板机,此时配合本机的浏览器 socks5 代理(127.0.0.1:1080),即可伪装本机的 ip,使用55 的 ip 访问

2)scp 多级跳板机传输文件

scp -o 'ProxyJump jump-host1,jump-host2' file.txt user@host:/my/dir
scp -o 'ProxyJump [email protected]' 123.txt [email protected]:/tmp/

SSH应用层隧道原理

3)动态代理(socks 代理)配合 goby

本地让 vps 启动动态代理
ssh -CfNg -D 8361 [email protected] -p 5772
设置 goby 的代理 127.0.0.1:8361

SSH应用层隧道原理

使用 sshuttle 也可以,只不过这样就不需要在 goby 上设置服务器了。







SSH应用层隧道原理


原文始发于微信公众号(网安之道):SSH应用层隧道原理

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月9日17:08:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSH应用层隧道原理http://cn-sec.com/archives/888291.html

发表评论

匿名网友 填写信息