/proc 文件系统
Linux 系统上的 /proc 目录是一种文件系统,即 proc 文件系统,它是一种伪文件系统,由内核动态生成内容,主要是用于获取一些系统和进程信息,开发调试内核。
/proc 目录
在 /proc 目录下,有文件系统信息、设备信息、进程信息、内核信息、self 等许多文件夹,其中进程信息通常是/proc/PID 的目录结构,这也是本篇文章重点学习的。除此之外,/proc/mounts 可以看一些挂载信息,对于我们提权会有一些帮助;/proc/net 可以看一些网络相关的,其中 tcp 文件可以去看开放哪些端口,进行信息收集。
/proc/PID
PID
PID 是 Linux 给每一个运行中的进程分配一个唯一数字,当进程启动后,内核会分给该进程一个数字,然后为其创建/proc/PID 目录,里面保存这个进程的信息。下面有一些相关的操作。
echo $$ # 查看当前 shell 的 PID ps aux # 查看所有进程 ls /proc | grep -E '^[0-9]+$' # 列出所有 PID 目录
目录结构
cmdline
cmdline 保存启动该进程时使用的完整命令行参数,用 cat /proc/2043/cmdline | tr '\0' ' ' 查看,僵尸进程文件内容为空。
cwd
cwd 是指向当前进程运行目录的一个符号链接,用ls -al /proc/2043/cwd 或者 readlink /proc/2043/cwd 查看。
exe
exe 是一个指向启动当前进程的可执行文件(完整路径)的符号链接,用ls -al /proc/2043/exe 或者 readlink /proc/2043/exe 查看。
environ
environ 是当前进程的环境变量列表,以NAME=value格式存储,惯例上变量名用大写(但不是强制,如 http_proxy 等小写变量也常见),用cat /proc/2043/environ | tr '\0' '\n' 查看。注意 /proc/PID/environ 和 cmdline 通常只有进程所有者或 root 才能读取,做题时权限不足会读不到。
fd
fd 是一个目录,包含当前进程打开的每一个文件的文件描述符,每个文件描述符又是指向一个实际文件的符号链接,用ls -al /proc/2043/fd 查看,默认情况下
fd 0 → 终端输入 fd 1 → 终端输出 fd 2 → 错误输出
(若进程重定向过标准输入输出,fd 0/1/2 会指向重定向后的文件。)
在一些题目中,可能打开一些文件后没有读取,或者打开后删去,只要进程还没有关闭,我们就可以用这种方式获取。
status
status 存储进程状态信息,用cat /proc/2043/status 查看。
root
root 是当前进程根目录的一个符号链接,在 Unix 和 Linux 系统上,通常采用 chroot 命令使每个进程运行于独立的根目录,该文件可以去看进程根目录,用ls -al /proc/2043/root 或 readlink /proc/2043/root 查看。
/proc/self
self 这个目录总是指向访问它的进程自身的目录,不同进程打开获得的信息是不同的,有时候进程的 PID 会改变,我们就可以用 self 去查看。但是在做题时我们不能通过cat /proc/self/cmdline 去查看,因为这时候得到的是 cat 进程的信息,应该通过题目本身进程去查看,比如用文件包含?filename=/proc/self 的方式。

评论区
评论加载中...