很短看起来很简单的题目,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输出的,但可以修改,文件名字可以用&+文件描述符来代替。
