如何使用 netcat 创建 ssh 隧道?

信息安全 防火墙 SSH 隧道
2021-08-30 16:38:59

我想在两台机器之间创建反向连接,但这些是中间的防火墙,阻止所有连接,除了 ssh。我想用netcat创建ssh隧道,你能告诉我怎么做吗?

3个回答

这是怎么回事?这是肉和土豆:

nurf@sessmacheen $ ssh -f -L localport:localaddress:remoteport \ 
    user@remoteaddress sleep 10; nc localaddress localport

这是假设 sshd 正在收听远程盒子,我想我可以从你的帖子中推断出来。

行!所以 ssh 被传递了-f,它只是在建立连接后将它作为背景,并且-L. 我记得-L是“链接”。它创建一个隧道,将本地端口连接到远程主机上的端口(分别是localport:localaddress:remoteport user@remoteaddress部分)。

所以 ssh 伸出手并与远程主机上的 sshd 握手(无论如何,持续 10 秒),它坐在本地,伸出手等待其他东西抓住。所以我们nc localaddress localport瞧!

sleep 10当然,上面的一个班轮实际上除了建立连接然后在远程机器上运行之外没有做任何事情。这是一个更实际的例子,完全来自这篇文章。

## let's pull a back up image  over the wire!                   ##
## first we set up the image for grabbing on the remote machine ##
## by piping it to nc which then starts listening on port 9000  ##

dude@remotebox $ cat backup.ico | nc -l 9000

## and now we tunnel! locally, ssh opens up on 9001, and        ##
## connects to 9000 on the remote machine where nc is waiting   ##
## with cat, ready to go.                                       ##

nurf@sessmacheen $ ssh -f -L 9001:127.0.0.1:9000 dude@remotebox \
    sleep 10; nc 127.0.0.1 9001 | pv -b > backthatthangup.iso;

## this is pretty sweet because after nc gets done with the     ##
## connection, ssh finishes running sleep and closes it so you  ##
## don't have to fool with it.  nice and tidy.                  ##

## pv is a handy little utility that tracks data across a pipe  ##
## and will show you a progress bar and whatever else you want  ##

自然,要以“反向”方式创建这种连接,您只需,您知道,以相反的方式进行操作。后记,如果你愿意的话。让我知道它是如何工作的!

哦,是的,还有:nc不会绑定到 22,因为sshd'''''''-so-privileged self 已经坐在那里了。因此,使用保留端口范围之外的任意端口(即高于端口 1024 的任何端口)。由于 22 是保留端口之一,因此无论如何您都必须是 root 才能绑定到它。

您不需要创建 SSH 隧道来执行此操作 - 您需要做的就是让 NetCat 在端口 22 上进行通信,因为防火墙可能会阻止所有端口。

man nc应该为您提供所需的所有信息。

除了原始帖子之外,您还写道您没有对计算机的 root 访问权限,并且已经有一个守护程序正在侦听端口 22。

如果您在 sudoers 组中,请使用 nothankyou 的解决方案:

sudo ssh -f -L localport:localaddress:remoteport user@remoteaddress sleep 10; nc 本地地址 本地端口

如果您不这样做,但以某种方式( :O )可以访问已经运行 SSH 的机器上的 iptables(或类似),请尝试仅将另一台计算机的 ip 重定向到您将使用 NC 侦听的另一个本地端口:

首先,使用引用的代码进行监听,或者简单地使用 NC:

nc -l -p 1234

第二个将传入流量重定向到端口 1234,以防熟悉的源 IP 地址:

iptables -A INPUT -s <computer A's ip address> -p tcp --dport 22 -j REDIRECT --to-port 1234

在您既没有某种 root 访问权限也没有访问本地防火墙规则的合理情况下,非 root 进程可能会绑定到 Linux 上的“特权”端口 (<1024),请使用以下命令这样做的行:

setcap 'cap_net_bind_service=+ep' /path/to/program

从 StackOverflow检查这个问题以获取更多信息。它可能无法解决您的所有问题,但它似乎是一个很好的提示,直到您能更好地描述您的问题。