解析
还是第一步进行查壳,发现是无壳的64位的可执行文件,之后进入ida中查看main函数。
int __cdecl main(int argc, const char **argv, const char **envp)
{
init();
vulnerable();
return 0;
}
第一个函数里面就是最开始运行的那个界面。
int init()
{
alarm(0x20u);
setvbuf(stdout, 0LL, 2, 0LL);
setvbuf(stdin, 0LL, 2, 0LL);
return puts(
" __ ___ ______ ___ \n"
" / |/ /__ /_ __/__< /_ __\n"
" / /|_/ / _ `// / / __/ /\\ \\ /\n"
"/_/ /_/\\_,_//_/ /_/ /_//_\\_\\ \n");
}
之后是第二个函数。
int vulnerable()
{
puts("HaHaHa!\nWhat else can you do???");
close(1);
close(2);
return shell();
}
之后查看了close()这个函数的作用是什么,发现是1是正常输出,2是错误输出,之后返回的是shell,那么我们直接进行重定向进行输出即可参考文章链接: linux重定向,运行起来之后输入exec 1>&0即可
脚本
先用pwntools进行远程,之后手动输入exec 1>&0
获得的flag是flag{b755c682-c167-4e3c-9524-3b16f16becf6}
第一步:
from pwn import *
context(os = 'linux',arch = 'arm64',log_level = 'debug')
p = remote('node4.buuoj.cn',29258)
p.interactive()
第二步:
第三步: