【问题标题】:How to reattach stdin to console window after pipe?如何在管道后将标准输入重新附加到控制台窗口?
【发布时间】:2019-03-12 18:50:04
【问题描述】:

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

我该如何解决这个问题?在xxd 的标准输出被消耗(或进程结束)后,如何将narnia0 标准输入重新附加到终端的标准输出?

这是外壳代码:

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

编辑

这是一个简单的例子:

例子.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

这是期望的行为,但在那之后我如何将标准输入重新附加到我的终端?

【问题讨论】:

    标签: bash shell terminal console sh


    【解决方案1】:

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

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

    或者,请留在echo

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

    编辑:添加cat 以将输入/输出添加到后续shell

    【讨论】:

    • 同样的问题,我在上面添加了一个例子
    • 我添加了一个子shell + cat 给你输入/输出
    • 通常没有必要:程序要么是交互式的,要么是管道式的,但不能两者兼而有之。但是,如果您希望脚本将某些内容注入/修改到程序的管道输入中,您可以捕获 bash 脚本中的所有输入,然后将其流式传输到程序,或者巧妙地使用 sed 和 awk 来操作管道输入。
    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多