管道后如何将stdin重新连接到控制台窗口?

时间:2018-10-08 06:26:34

标签: bash shell terminal console sh

我正在做一个overthewire的CTF,这一挑战要求发送一些难以复制和粘贴到流程narnia0中的字符。在该过程中,对/bin/sh进行了系统调用,但是由于xxd的标准输出被重定向到narnia0的标准输入,因此我无法使用外壳。

我该如何解决?在narnia0的标准输出被使用(或过程结束)之后,如何将xxd的标准输入重新附加到终端的标准输出?

这是外壳代码:

echo 3030303030303030303030303030303030303030efbeadde | xxd -r -p | ./narnia0

修改

这是一个简单的例子:

Example.c

#include <stdio.h>
#include <stdlib.h>

int main() {
  system("/bin/sh");
  return 0;
}

编译:

gcc -o example ./example.c

说明问题的示例:

echo bla | ./example

结果是:

/bin/sh: line 1: bla: command not found

期望的行为是什么,但是之后如何将stdin重新连接到我的终端?

1 个答案:

答案 0 :(得分:1)

也许从问题中删除xxd会有所帮助?

(printf '\x30...\xef\xbe\xad\xde'; cat) | ./narnia0

或者,只留下echo

(echo -ne '\x30...\xef\xbe\xad\xde'; cat) | ./narnia0

编辑:添加了cat,可将输入/输出添加到后续外壳程序中