263 字
1 分钟
ctfshow 前置基础 pwn19
题目截图:



这题的关键点很直接:程序把 stdout 给关掉了,所以想靠正常回显拿结果是行不通的。

中间顺手补了一下 if (fork()) 的用法:

那怎么办?既然它把标准输出关了,那就自己再造一个 stdout。
我之前参考过一篇把 pwn18 和 pwn19 放在一起讲的文章,但那篇在这个点上的结论有误,容易把思路带偏:
CTFshow PWN 前置基础(pwn18-pwn19)
最后用的命令是:
exec cat /ctfshow_flag 1>&0
这里的 1>&0 是重定向写法,把文件描述符 1(标准输出)绑定到文件描述符 0(标准输入)指向的同一个位置。因为远程连接的 socket 还连着标准输入,所以把标准输出也绑过去之后,就等于重新拿回了回显通道。
最后结果:

最终答案:
ctfshow{8c8551ae-3c9f-4a37-857b-2c1a11e2a501}
ctfshow 前置基础 pwn19
https://alf-ovo.cn/posts/ctfshow-prerequisite-pwn19/