我一直在关注 Linux 应用程序的各种漏洞利用练习的演练。我很好地理解这些内容,但是有些人提到使用 cat 来“保持管道打开”,例如这里。
例如:
(python2 exploit.py ; cat) | ./programToExploit
在实践中“保持管道打开”实际上意味着什么,以及如何像上面的命令一样保持管道打开?
答案1
查看之间的区别
echo 'ls' | sh -s
和
( echo 'ls'; cat ) | sh -s
或者,
{ echo 'ls'; cat; } | sh -s
在这里,sh -s
将启动一个 shell 会话,从标准输入 ( ) 读取要执行的命令-s
。
在第一个示例中,shell 将执行ls
并退出(因为没有更多输入)。
在第二个和第三个示例中,shell 将执行ls
并等待,直到没有更多输入。输入流sh -s
首先由命令生成echo
,但随后cat
接管。该cat
进程将从父 shell 会话中读取数据,并通过管道将命令传递到sh -s
.如果您键入ls
或任何其他命令(不会出现键入提示),shell 将执行这些命令。
这将持续下去,直到您通过按空行来表示输入结束来终止该cat
过程。Ctrl+D
我相信这就是你所说的“保持管道畅通”的意思。