《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12

本篇笔记学习 SSH 端口转发功能。

本地环境说明:

主机1:Win7,IP(192.168.1.9),Web 服务(80)。

主机2:Kali,IP(192.168.1.10),SSH 服务(22)。

主机3:OWASPBWA,IP(192.168.1.11),SSH 服务(22),Web服务(80)。

由于主机3没有图形化,操作 shell 终端不方便,我用 xshell 工具连接其 SSH 服务,方便操作。

本地端口转发

场景一:本地主机 Win7,远程主机 OWASPBWA,有一个 Web 站点,这两台主机之间无法连通,我想实现从 Win7 访问 OWASPBWA 的 Web 站点。Kali 主机可以同时连通前面两台主机。于是,我们可以建立从 Win7 主机到 Kali 主机的 SSH 连接,用这条连接来实现在 Win7 *问 OWASPBWA 主机上的站点。

在 Win7 上运行:

ssh -L 8888:192.168.1.11:80 [email protected]

即:

ssh -L 8888:OWASPBWA:80 [email protected]

L 参数接受三个值,分别是”本地端口:目标主机:目标主机端口”。这条命令的意思,是指定 SSH 绑定本地端口 8888,访问该端口后,所有数据经 Kali 转发到目标主机 OWASPBWA 的 80 端口。

这样一来,我们只要连接 Win7 的 8888 端口,就等于访问 OWASPBWA 的 Web 站点。

《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12

“本地端口转发”使得 Win7 和 OWASPBWA 之间好像形成了一个数据传输的秘密隧道,因此又被称为”SSH隧道”。

我们用 SSH 在 Win7 和 OWASPBWA 之间,建立了一个加密的连接。要注意的是,这里的加密连接指的是 Win7 和 Kali 之间的连接,Kali 和 OWASPBWA 之间的连接仍旧是不加密的 http 协议。

场景二:Kali 主机上有一个服务,为不加密的连接,这里用 netcat 来模拟,即 netcat -lvp 8888 模拟的数据通信服务,同上,在 Win7 上实现对该服务的加密连接访问。

在 Win7 上运行:

ssh -L 8888:localhost:8888 [email protected]

这里的 localhost 是相对于 Kali 主机的,即 localhost 就是 Kali 主机。这样,我们访问本地 8888 端口,就相当于访问远程主机的 8888 端口,实现了与 Kali 系统上 8888 端口的加密通信。

《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12

远程端口转发

要使用远程端口转发,前提条件是,建立 SSH 连接的两台主机都要有 SSH 服务端。

由于我的 Win7 主机没有安装 SSH 服务端,下面的场景设置,修改为从 kali
通过 OWASPBWA 访问 Win7 主机的 Web 站点。

场景三:本地主机 kali,远程主机 Win7,有一个 Web 站点,这两台主机之间无法连通,目标是想在 kali 主机上可以访问到该站点。主机 OWASPBWA 是一台内网主机,它可以访问 Win7 的站点,也可以连接外网的 kali,但是,Kali 无法访问内网的 OWASPBWA。我们可以建立从 OWASPBWA 到 Kali 的连接,通过这条连接实现 Kali 访问 Win7。

在 OWASPBWA 内网主机上运行:

ssh -R 8888:192.168.1.9:80 192.168.1.10

即:

ssh -R 8888:Win7:80 Kali

R 参数接受三个值,分别是”远程主机端口:目标主机:目标主机端口”。这条命令的意思,让 Kali 监听它自己的 8888 端口,然后将所有数据经由 OWASPBWA,转发到 Win7 的 80 端口。对于 OWASPBWA 来说,Kali 是远程主机,所以这种情况就被称为”远程端口绑定”。
绑定之后,我们在 Kali 就可以连接 Win7 了:

OWASPBWA 主机:

《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12

Kali 主机:

《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12

总结

这两篇笔记学习了 SSH 的基本概念,以及用 SSH 实现远程连接、本地端口转发、远程端口转发的测试。SSH 是一个协议,可以实现主机间的加密通信,端口转发类似代理功能,差异是代理的监听端口一般是绑定在代理服务器上,而用 SSH 端口转发,监听端口在本地,本地端口转发是本地向转发主机发起的正向连接,SSH 命令运行在本地,参数为 L,用在转发主机向外网开放端口的情况;远程端口转发是转发主机向本地发起的反向连接,SSH 命令运行在转发主机上,参数为 R,用在转发主机在内网的情况。

参考