week3 T2


T2 wustctf2020_closed

2023-01-15WP
BUUCTF pwn
考点:close函数

0x01

做了hgame的第二题后,去补充了一下关于close函数的知识,再从BUUCTF中找了一题练了练
先file知道时64-bit

0x02

这一题结构很简单,再IDA中直接能找到在main函数中的vulnerable函数中return shell函数中有system函数
直接给好了


0x03

但是因为

close(1)
close(2)

将标准输出和标准错误输出关闭了,这样在窗口上看不到输出
这时候就需要我们重新定位标准输出

0x04

补充一些知识

  • 在Linux中的文件,文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。

  • 标准输入输出的指向是默认的,也就是默认打开一个终端后,0,1,2都指向同一个位置也就是当前终端,我们可以修改它们的指向,也即重定位

  • 我们可以将标准输出进行重定向

  • &+文件描述符, 可以指代该文件(进程)

现在可以解决close函数的问题了
在同一个进程里面, 标准输出和标准输入的指向都是相同的终端. 由于标准输入没有被禁用,所以我们可以使用命令

exec 1>&0

让标准输出定位到标准输入的文件,也就相当于重启了标准输出
本质上即exec+重定向命令,只不过操作的是文件描述符
现在cat到的flag就能够输出了

出题人很有意思,连接上环境第一件事是嘲讽一下你

参考 文章


文章作者: lmarch2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lmarch2 !
评论
  目录