ssh隧道

我们将要研究的第一个协议是SSH,因为它已经内置了通过SSH隧道进行端口转发的功能。虽然SSH曾经是与Linux系统相关联的协议,但现在Windows默认安装了OpenSSH客户端,因此您可以期望在许多系统中找到它,而不受其操作系统的限制。

SSH隧道可以以不同的方式用于通过SSH连接转发端口,我们将根据情况使用它。为了解释每种情况,让我们假设一个场景,我们已经控制了PC-1机器(不需要管理员访问权限),并希望将其用作枢纽来访问另一台机器上的端口,而我们无法直接连接到该端口。我们将从PC-1机器开始一个隧道,充当SSH客户端,到攻击者的PC,后者将充当SSH服务器。这样做的原因是您经常会在Windows机器上找到SSH客户端,但大多数情况下不会有可用的SSH服务器。

由于我们将连接回攻击者的机器,因此我们希望在其中创建一个用户而无需访问任何控制台以进行隧道连接,并设置用于创建隧道的密码:

useradd tunneluser -m -d /home/tunneluser -s /bin/true
passwd tunneluser

ssh 远程端口转发

在我们的例子中,假设防火墙策略阻止攻击者的机器直接访问服务器上的端口3389。如果攻击者先前已经入侵了PC-1,并且PC-1可以访问服务器的3389端口,那么可以使用从PC-1进行的远程端口转发来将其枢轴到3389端口。远程端口转发允许您从SSH客户端(在本例中为PC-1)获取可达端口,并将其投影到远程SSH服务器(攻击者的机器)中。

因此,在攻击者的机器上将打开一个端口,可通过SSH隧道连接回服务器上的3389端口。 PC-1将反向代理连接,以便服务器将看到所有流量,就像它是来自PC-1一样。

到这一点可能会出现一个合理的问题,即为什么我们需要端口转发,如果我们已经攻入了 PC-1 并可以直接从那里运行 RDP 会话。答案很简单:在只有控制台访问 PC-1 的情况下,我们将无法使用任何 RDP 客户端,因为我们没有 GUI。通过将端口对攻击者的机器开放,您可以使用 Linux RDP 客户端进行连接。类似的情况也会出现在您想针对无法直接访问的端口运行漏洞利用时,因为您的漏洞利用可能需要特定的脚本语言,这些语言不一定总是在您沿途攻击的机器上可用。

参考上图,要将服务器上的端口 3389 转发回我们的攻击者机器,我们可以在 PC-1 上使用以下命令:

ssh tunneluser@1.1.1.1 -R 3389:3.3.3.3:3389 -N

这将建立从PC-1到1.1.1.1(攻击者PC)的SSH会话,使用tunneluser用户。

由于tunneluser不被允许在攻击者PC上运行shell,我们需要使用-N开关运行ssh命令,以防止客户端请求shell,否则连接将立即退出。 -R开关用于请求远程端口转发,语法要求我们首先指示我们将在SSH服务器上打开的端口(3389),然后是一个冒号,然后是我们将转发的套接字的IP和端口(3.3.3.3:3389)。请注意,端口号不需要匹配,尽管在本例中它们匹配。

命令本身不会输出任何内容,但隧道将依赖于命令运行。每当需要时,我们可以通过按CTRL + C关闭隧道,就像关闭任何其他命令一样。

ssh 本地端口转发

本地端口转发允许我们将 SSH 服务器上的端口“拉”到 SSH 客户端中。在我们的场景中,这可以用于将攻击者机器上的任何服务通过 PC-1 上的端口提供给其他主机。这样,任何无法直接连接到攻击者 PC 的主机都可以通过中继主机访问攻击者的服务。

使用这种类型的端口转发可以让我们从通常无法连接回我们的主机上运行反向 shell,或者让任何我们想要的服务对于没有直接连接到我们的机器的机器可用。

要从攻击者的机器转发端口 80 并使其在 PC-1 上可用,我们可以在 PC-1 上运行以下命令:

ssh tunneluser@1.1.1.1 -L *:80:127.0.0.1:80 -N

命令结构类似于远程端口转发所使用的结构,但使用-L选项进行本地端口转发。此选项要求我们指示PC-1使用的本地套接字来接收连接( *:80 ),并从攻击者的PC角度连接到的远程套接字( 127.0.0.1:80 )。

请注意,在第二个套接字中使用IP地址127.0.0.1,因为从攻击者的PC角度来看,这是持有要转发的端口80的主机。

由于我们正在PC-1上打开一个新端口,因此可能需要添加防火墙规则以允许传入连接(使用dir=in )。需要管理员权限:

netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP localport=80

设置隧道后,任何用户将其浏览器指向http://2.2.2.2:80的PC-1,即可看到攻击者机器发布的网站。

socat端口转发

在SSH不可用的情况下,可以使用socat执行类似的功能。虽然不如SSH灵活,但socat允许您以更简单的方式转发端口。使用socat的一个缺点是我们需要将其传输到枢轴主机(在我们当前的示例中为PC-1),使其比SSH更容易被检测到,但如果没有其他选择,这可能值得一试。

使用socat执行端口转发的基本语法要简单得多。如果我们想在主机上打开端口1234,并将我们收到的任何连接转发到主机1.1.1.1上的端口4321,您将拥有以下命令:

socat TCP4-LISTEN:1234,fork TCP4:1.1.1.1:4321

fork选项允许socat为每个接收到的连接fork一个新进程,使得可以处理多个连接而不关闭。如果不包含它,当第一个连接完成时,socat将关闭。

回到我们的例子,如果我们想要像使用SSH远程端口转发一样使用PC-1作为枢纽来访问服务器上的3389端口,我们可以使用以下命令:

请注意,socat 不能像 SSH 那样将连接直接转发到攻击者的机器,但会在 PC-1 上打开一个端口,然后攻击者的机器可以连接到该端口:

另一方面,如果我们想要从攻击者的机器上公开端口80,以便服务器可以访问它,我们只需要稍微调整命令即可:

socat TCP4-LISTEN:80,fork TCP4:1.1.1.1:80

因此,PC-1将生成端口80并监听要转发到攻击者机器上的端口80的连接:

动态端口转发和 SOCKS

单端口转发对于需要访问特定套接字的任务非常有效,但是有时我们可能需要通过一个跳板主机对一个主机的多个端口甚至多个主机的多个端口运行扫描。在这种情况下,动态端口转发允许我们通过使用SOCKS代理通过主机进行跳板,并建立与任何IP地址/端口的多个连接。由于我们不希望在目标网络中的Windows机器上依赖SSH服务器,因此通常会使用SSH客户端使用以下命令建立反向动态端口转发:

ssh tunneluser@1.1.1.1 -R 9050 -N

在这种情况下,SSH服务器将在端口9050上启动SOCKS代理,并将任何连接请求通过SSH隧道转发,最终由SSH客户端代理。

最有趣的部分是,我们可以通过使用proxychains轻松地通过SOCKS代理使用任何工具。为此,我们首先需要确保proxychains已正确配置为将任何连接指向SSH用于SOCKS代理服务器的相同端口。 proxychains配置文件可以在AttackBox的/ etc / proxychains.conf中找到。如果我们向下滚动配置文件的末尾,我们应该看到一行指示socks代理使用的端口:

[ProxyList]
socks4 127.0.0.1 9050

默认端口为9050,但只要与我们建立SSH隧道时使用的端口匹配,任何端口都可以使用。

如果我们现在想通过代理执行任何命令,我们可以使用proxychains:

proxychains curl http://pxeboot.za.tryhackme.com

请注意,像nmap这样的一些软件在某些情况下可能无法很好地与SOCKS配合使用,并可能显示更改后的结果,因此您的里程可能会有所不同。

ssh,socat端口转发的更多相关文章

  1. SSH的端口转发:本地转发Local Forward和远程转发Remote Forward

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

  2. 【ssh】端口转发

    来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 ...

  3. ssh动态端口转发

    ssh本地和远程端口转发都需要固定的应用服务器IP和端口,但是很多情况下,应用的端口繁多逐个转发效率不高,而且一些应用使用不固定的端口,经常跳着使用端口,一些网站还不支持IP直接访问,这导致ssh本地 ...

  4. SSH 的端口转发

    第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我 ...

  5. SSH的端口转发

    这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...

  6. 【端口转发】k8s port-forward端口转发 和 ssh -NfL端口转发

    kubectl port-forward端口转发 将远程pod端口转发到本地端口 kubectl port-forward monitoring-grafana-695c545f46-rhtwc -- ...

  7. SSH远程端口转发实战详解

    问题 前段时间在外地没有在实验室,随身携带了一个笔记本电脑.但是笔记本性能不够,想用SSH远程连接实验室的电脑.问如何连接?现有以下设备 设备 IP 备注 系统 实验室电脑C1 192.168.0.2 ...

  8. ssh远程端口转发&&windows系统提权之信息收集&&网安工具分享(部分)

    一.ssh远程端口转发 背景:当我们在渗透过程中,获取到内网的一台仅有内网IP的服务器后,我们可以通过ssh隧道,将内网某个主机的端口进行远程转发 1.网络拓扑图 假设获取的服务器为web服务器,we ...

  9. ssh远程端口转发

    当ssh的连接方向和应用连接的方向不一致时,这就称为ssh远程转发. 主机3是一台web server 应用请求是主机2到主机1 ssh请求是主机1到主机2 主机2开启ssh服务 service ss ...

  10. SSH 远程端口转发

    既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发. 还是接着看上面那个例子,ho ...

随机推荐

  1. 中高等DP总结(更新中

    1.CF613D Kingdom and its Cities 题意:给定一棵树,每个询问给出一些关键点,要求删掉最少的点使这些点两两不联通,无解输出-1. 思路:先判无解:只要有一个关键点的父亲也是 ...

  2. $\mathcal{Mathicの代码风格}$

    概述 \(#include\) 语句必须置于整个程序的开头. 不应 using namespace foo; 若有必要可以 using foo::bar; 单行字符数必须不超过\(80\). 预编译 ...

  3. 机器学习基础07DAY

    分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归.我们一般只讨论用于分类的决策树.决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的 ...

  4. Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果,返回一个 error。

    问题: 你被要求编写一个叫做 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL.如果两个 URL 在 10 秒内都未返回结果,那么应该返回一个 error ...

  5. 高可用(keepalived)部署方案

    前言:为了减少三维数据中心可视化管理系统的停工时间,保持其服务的高度可用性.同时部署多套同样的三维可视化系统,让三维数据中心可视化系统同时部署并运行到多个服务器上.同时提供一个虚拟IP,然后外面通过这 ...

  6. day06-SpringCloud Ribbon

    SpringCloud Ribbon 1.Ribbon介绍 1.1Ribbon是什么? 官网地址:Netflix/ribbon: Ribbon(github.com) SpringCloud Ribb ...

  7. YII2.0使用ActiveForm表单

    Controller控制器层代码 <?php namespace frontend\controllers; use frontend\models\UserForm; class UserCo ...

  8. JVM的内存分配及各种常量池的区别(静态常量池、运行时常量池、字符串常量池)

    JVM内存分配 先了解下JVM中的内存分配,此处以hotspot vm为例(官方jdk采用的vm) 程序计数器 栈 1. 虚拟机栈 2. 本地方法栈 Java堆 堆内存是各个线程共享的区域 方法区 它 ...

  9. c++基本数据结构

    基本数据结构: 一.线性表 1.顺序结构 线性表可以用普通的一维数组存储. 你可以让线性表可以完成以下操作(代码实现很简单,这里不再赘述): 返回元素个数. 判断线性表是否为空. 得到位置为p的元素. ...

  10. RDIFramework.NET开发框架WinForm版新增编码管理

    1.概述 编码管理是企业管理和信息化建设过程中一个至关重要的环节.各信息化系统是通过编码来标识业务对象的,统一的编码方案可以作为各系统的通话语言,也可以为信息化系统的集成提供便利.建设数据编码的基本原 ...