为什么“(echo <Payload> && cat) | nc <link> <port>”会创建持久连接?
Why does "(echo <Payload> && cat) | nc <link> <port>" creates a persistent connection?
我开始玩 ctfs 挑战,我遇到了一个问题,我需要将漏洞利用程序发送到二进制文件中,然后与生成的 shell 进行交互。
我找到了解决这个问题的方法,看起来像这样:
(echo -ne "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xbe\xba\xfe\xca" && cat) | nc pwnable.kr 9000
含义:
没有“cat”子命令,我无法与 shell 交互,但有了它,我现在可以将命令发送到生成的 shell 并将返回的输出发送到我的控制台标准输出。
那里究竟发生了什么?这个命令行让我感到困惑
如果您只是在命令行输入 cat
,您将能够看到该命令一次只是将 stdin
复制到 stdout
一行。它将继续执行此操作,直到您使用 Ctrl-C 退出或使用 Ctrl-D.[=19 发送 EOF =]
在此示例中,您在成功打印有效负载后立即 运行ning cat
(连接器 &&
告诉 shell 到 运行仅当第一个命令的退出代码为零时才执行第二个命令;即没有错误)。因此,在您如上所述终止远程终端之前,远程终端不会看到 EOF。当它通过管道传输到 nc
时,您输入的所有内容都会通过 cat
发送到远程服务器,并且它发回的所有内容都会显示在您的 stdout
.
上
所以是的,实际上您最终得到了一个交互式 shell。您可以通过 运行ning cat | sh
.
在您自己的机器上获得几乎相同的效果
我开始玩 ctfs 挑战,我遇到了一个问题,我需要将漏洞利用程序发送到二进制文件中,然后与生成的 shell 进行交互。 我找到了解决这个问题的方法,看起来像这样:
(echo -ne "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xbe\xba\xfe\xca" && cat) | nc pwnable.kr 9000
含义: 没有“cat”子命令,我无法与 shell 交互,但有了它,我现在可以将命令发送到生成的 shell 并将返回的输出发送到我的控制台标准输出。
那里究竟发生了什么?这个命令行让我感到困惑
如果您只是在命令行输入 cat
,您将能够看到该命令一次只是将 stdin
复制到 stdout
一行。它将继续执行此操作,直到您使用 Ctrl-C 退出或使用 Ctrl-D.[=19 发送 EOF =]
在此示例中,您在成功打印有效负载后立即 运行ning cat
(连接器 &&
告诉 shell 到 运行仅当第一个命令的退出代码为零时才执行第二个命令;即没有错误)。因此,在您如上所述终止远程终端之前,远程终端不会看到 EOF。当它通过管道传输到 nc
时,您输入的所有内容都会通过 cat
发送到远程服务器,并且它发回的所有内容都会显示在您的 stdout
.
所以是的,实际上您最终得到了一个交互式 shell。您可以通过 运行ning cat | sh
.