我在理解以下情况下发生的事情时遇到了问题。我对 UNIX 管道和 UNIX 一点也不熟悉,但阅读过文档但仍然无法理解这种行为。
./shellcode
是一个成功打开 shell 的可执行文件:
seclab$ ./shellcode
$ exit
seclab$
现在想象一下我需要将数据传递给./shellcode
via stdin
,因为这会从控制台读取一些字符串,然后打印“hello”加上那个字符串。我通过以下方式(使用管道)进行操作并且读写工作:
seclab$ printf "world" | ./shellcode
seclab$ hello world
seclab$
但是,一个新的 shell 没有打开(或者至少我看不到它并与之交互),如果我运行exit
我就退出了系统,所以我不在一个新的 shell 中。
有人可以就如何解决这个问题提供一些建议吗?我需要使用 printf 因为我需要将二进制数据输入到第二个进程,我可以这样做:printf "\x01\x02..."