shell - 为什么 "(echo <Payload> && cat) | nc <link> <port>" 创建一个持久连接?

我从玩 ctfs 挑战开始,遇到了一个问题,我需要将漏洞利用发送到二进制文件中,然后与生成的 shell 交互。我找到了一个解决这个问题的方法,看起来像这样:

(echo -ne "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xbe\xba\xfe\xca" && cat) | nc pwnable.kr 9000

含义:没有“cat”子命令,我无法与 shell 交互,但有了它,我现在可以将命令发送到生成的 shell 并将返回的输出获取到我的控制台标准输出。

那里究竟发生了什么?这个命令行让我感到困惑

回答1

如果您只是在命令行中输入 cat,您将能够看到该命令一次仅将 stdin 复制到 stdout 一行。它将继续执行此操作,直到您使用 Ctrl-C 退出或使用 Ctrl-D 发送 EOF。

在此示例中,您在成功打印有效负载后立即运行 cat(连接符 && 告诉 shell 只有在第一个命令的退出代码为零时才运行第二个命令;即,没有错误)。因此,在您按上述方式终止远程终端之前,远程终端不会看到 EOF。当它通过管道传送到 nc 时,您输入的所有内容都会通过 cat 发送到远程服务器,并且它发送回的所有内容都会显示在您的 stdout 上。

所以是的,实际上你最终得到了一个交互式 shell。通过运行 cat | sh,您可以在自己的机器上获得几乎相同的效果。

相似文章

随机推荐

最新文章