很短看起来很简单的题目,main()
如下:
__int64 vulnerable() { puts("HaHaHa!\nWhat else can you do???"); close(1); close(2); return shell(); }
内核启动的时候默认打开这三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出文件stderr,分别得到文件描述符 0, 1, 2
所以,close(1);
和close(2);
代表该题关闭了输出流和报错流。
解题思路是可以将输入输出流倒置,即exec 1>&0
。
输入输出的指向是默认0输入、1输出的,但可以修改,文件名字可以用&+文件描述符
来代替。