[V&N2020 公开赛]CHECKIN(文件被进程打开后被删除,内存中有文件内容)
这道题我在vps上实验了一下,对于linux的理解又加深了。
知识点:文件描述符,
在linux里,当一个进程打开某个文件直到关闭前,该进程会获得文件描述符,而文件描述符里有文件的内容,即便已经将文件删除,只是删除了其相应的目录索引节点,若进程依然存在没被关闭的话,就依然可以通过文件提供给它的文件描述符进行操作。/proc/[pid]/fd
这个目录里包含了进程打开文件的情况,pid就是进程记录的打开文件的序号。
实验:读取内存中的flag内容
使用命令:lsof
- lsof命令可以查看进程打开那些文件 或者 查看文件给那个进程使用。
因为是用神器MobaXterm操作的,所以服务名为sftp-serv。
我在根目录创建了一个flag,然后打开它,用lsof命令查看它的进程:
箭头所指的地方就是该进程的pid也就是进程号,于是我们访问/proc/4027862/fd
可以看到该目录下有6个文件
红色的是已经被删除的,白色的可以打开,成功读取到flag:
这里的flag就是存在内存中的flag,只要进程还在,我们就能读取。
因为这道题目没有权限使用lsof命令,所以用python脚本遍历文件读取flag。