首页 > 其他分享 >ssh,socat端口转发

ssh,socat端口转发

时间:2023-05-09 12:23:39浏览次数:45  
标签:socat 端口 PC SSH 转发 攻击者 80 ssh

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 [email protected] -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 [email protected] -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 [email protected] -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配合使用,并可能显示更改后的结果,因此您的里程可能会有所不同。

标签:socat,端口,PC,SSH,转发,攻击者,80,ssh
From: https://www.cnblogs.com/-Lucky-/p/17384526.html

相关文章

  • Linux 系统中,找到运行在某个特定端口的应用程序目录
    首先,你需要找到运行在特定端口上的进程的PID。这可以通过使用lsof命令完成:lsof-i:<port>其中,<port>是你要查找的端口号。在返回的结果中,你可以找到PID(进程ID)。然后,你可以使用pwdx命令来获取这个进程的当前工作目录:pwdx<pid>其中,<pid>是你在上一步找到的进程......
  • 服务器卡死,ssh连接不上-finalshell导致
    问题:客户反馈服务器ssh连接不上设备信息:AsianuxServerrelease7.3.1512(Lotus)定位:通过虚拟机控制台重启服务器,发现能登录虚拟机,查看服务器各种状态都正常。客户使用一段时间后又卡死,ssh连接不上,登录发现进程数有一万多个,导致内存不足,服务器卡断查看进程发现很多bash指令一直......
  • Python自制端口扫描器
    自制Python端口扫描器一、工具介绍这个Python端口扫描器实现了一个基于PyQt5的端口扫描器界面,主要包含以下部分:1.使用`setdefaulttimeout()`方法设置默认的超时时间为0.001秒。2.使用`socket`模块创建一个套接字,并尝试与指定的端口进行连接。3.如果连接成功,则在文本......
  • ZLMediaKit报错,程序启动失败,请修改配置文件中端口号后重试!
    报错信息如下:2023-05-0910:33:22.819W[MediaServer][13423-MediaServer]sockutil.cpp:421bind_sock6|Bindsocketfailed:addressalreadyinuse2023-05-0910:33:22.819W[MediaServer][13423-MediaServer]main.cpp:366start_main|端口占用或无权限:Listenon:......
  • Git--no matching host key type found. Their offer: ssh-rsa
     解决方法:在用户目录下的.ssh文件夹下新建一个config文件Host*HostKeyAlgorithms+ssh-rsaPubKeyAcceptedKeyTypes +ssh-rsa......
  • 记录github ssh 下载代码失败解决过程
    windows机器下载airflow代码失败:[email protected]:apache/airflow.gitCloninginto'airflow'...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@......
  • 深度操作系统 deepin 20.8 定制的 SSH 安全模块问题
    近期由于工作需求,尝试使用国产化操作系统,由于对Debian系统的偏爱,选择了深度操作系统,使用的版本是Deepin20.8,安装使用基本顺利,没什么大问题。但由于这个环境是面向公网的,总是免不了大量的攻击类SSH登录尝试,发现深度好像定制修改了安全防护这块,当SSH密码登录错误达到指定次......
  • Window修改:MySQL端口 5.7 亲测
    1、版本MySQL:5.7.192、操作2.1、查看:原始端口【登录后】查看端口:showglobalvariableslike'port';2.2、修改.ini文件port:33082.3、重启服务2.4、查看:新端口1、CMD输入登录命令mysql-hlocalhost-P3308-uroot-p2、显示当前端口showglobal......
  • 使用插件无法正常运行,显示端口80被占用
          从错误信息可以看出:UserController有一个save方法,访问路径为http://localhost/saveBookController也有一个save方法,访问路径为http://localhost/save当访问http://localhost/saved的时候,到底是访问UserController还是BookController?@Con......
  • Ubuntu 设置 SSH 通过密钥登录
    1.制作秘钥对首先登录到服务器后,在命令行输入命令:出现提示一路回车到底即可,会生成2个文件,id_rsa(私钥)和id_rsa.pub(公钥)ssh-keygen2.在服务器上安装公钥在命令行输入一下命令确保公钥能够成功安装:cd~/.sshcatid_rsa.pub>>authorized_keys如此便完成了公钥的安装......