/proc目录
/proc 非常特别,因为它也是一个虚拟文件系统。它有时被称为进程信息伪文件系统。它不包含“真实”文件,而是包含运行时系统信息(例如系统内存、安装的设备、硬件配置等)。因此,它可以被视为内核的控制和信息中心。事实上,相当多的系统实用程序只是调用该目录中的文件。例如,“lsmod”与“cat /proc/modules”相同,而“lspci”是“cat /proc/pci”的同义词。通过更改此目录中的文件,您甚至可以在系统运行时读取/更改内核参数 (sysctl)。
该目录中的文件最显着的特点是,除了 kcore、mtrr 和 self 之外,所有文件的文件大小均为 0。目录列表类似于以下内容:
子文件
/proc 目录中的文件及其说明如下:
文件 | 描述 |
---|---|
/proc/buddyinfo | 每个内存区中的每个 order 有多少块可用,和内存碎片问题有关。 |
/proc/cmdline | 启动时传递给 kernel 的参数信息。 |
/proc/cpuinfo | CPU 信息。 |
/proc/crypto | 内核可用的加密模块及细节。 |
/proc/devices | 已装载的设备(包括字符设备和块设备)。 |
/proc/diskstats | 每个逻辑磁盘设备的信息(包括设备编号) 。 |
/proc/dma | 已注册使用的 ISA DMA 通道列表。 |
/proc/execdomains | Linux 内核当前支持的 execution domains。 |
/proc/fb | 帧缓冲设备列表,包括数量和控制它的驱动。 |
/proc/filesystems | 内核当前支持的文件系统类型。 |
/proc/interrupts | 当前系统使用的中断信息。 |
/proc/iomem | 每个物理设备当前在系统内存中的映射。 |
/proc/ioports | 一个设备的输入输出所使用的注册端口范围。 |
/proc/kcore | 代表系统的物理内存,存储为核心文件格式。 |
/proc/kmsg | 等待内核输出信息,可以通过 /sbin/klogd 或 /bin/dmesg 来处理。 |
/proc/loadavg | 依据过去一段时间内 CPU 和 IO 的状态得出的负载形态,与 uptime 命令有关。 |
/proc/locks | 内核锁住的文件列表。 |
/proc/mdstat | 多硬盘,RAID 配置信息(md=multiple disks)。 |
/proc/meminfo | 内核管理内存的信息。 |
/proc/misc | 在杂项设备(设备号为10)上注册的驱动。 |
/proc/modules | 所有装载到内核的模块列表。 |
/proc/mounts | 系统当前的所有挂载信息。 |
/proc/mtrr | 系统使用的 Memory Type Range Registers(MTRRs)。 |
/proc/partitions | 磁盘分区中的块分配信息。 |
/proc/slabinfo | 系统中所有活动的 slab 缓存信息。 |
/proc/stat | 所有的 CPU 活动信息。 |
/proc/sysrq-trigger | 该文件是只写的。使用 echo 命令来写这个文件的时候,远程 root 用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把 /proc/sys/kernel/sysrq 设置为1,开启 SysRq(Magic System Request Key)功能。 |
/proc/uptime | 系统自开机以来的运行时间。 |
/proc/schedstat | kernel 调度器的统计信息。 |
/proc/swaps | 交换区域的使用情况。 |
/proc/version | 当前 Linux 内核版本、发行版号、gcc 版本号、更新时间等信息。 |
/proc/vmcore | 内核 panic 时的内存映像。 |
/proc/vmstat | 虚拟内存统计信息。 |
/proc/zoneinfo | 显示内存空间的统计信息,对分析虚拟内存行为很有用。 |
子目录
下表是 /proc/<PID>
进程目录常用文件和子目录说明。
目录 | 描述 |
---|---|
/proc/PID/cmdline | 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息。 |
/proc/PID/cwd | 指向当前进程运行目录的一个符号链接。 |
/proc/PID/environ | 进程环境变量列表。 |
/proc/PID/exe | 指向启动当前进程的可执行文件(完整路径)的符号链接,可以通过它来启动当前进程的一个拷贝。 |
/proc/PID/fd | 包含进程相关的所有的文件描述符。 |
/proc/PID/maps | 与进程(可执行文件和库)相关的内存映射信息。 |
/proc/PID/mem | 指代进程持有的内存,不可读。 |
/proc/PID/root | 链接到进程的根目录。 |
/proc/PID/stat | 进程状态信息。 |
/proc/PID/statm | 进程使用的内存状态信息。 |
/proc/PID/status | 进程状态信息,比 stat/statm 更具可读性。 |
/proc/self | 链接到当前正在执行的进程。 |
/proc/self/
指向当前调度的pid,即当前正在运行的进程(在当前逻辑CPU上)。其效果是 /proc/self
始终指向请求程序的 pid。进程将真正看到不同的 /proc/self/
而无法看到彼此的 /proc/self/
但是,当执行 cat /proc/self/status
时,您会看到短暂的 cat
进程的内容
CTF中的运用
题目来源:攻防时间catcat-new
这里有一个目录穿越
能读passwd,尝试读取/flag,但是并不存在
查看环境变量获取启动当前题目进程的完整命令
app.py是flask的特征,后加以利用
详见攻防世界-cat_cat_new(flask_session伪造、/proc/self/文件夹) - 你呀你~ - 博客园 (cnblogs.com)
参考文章
Linux的proc文件系统,proc/&pid与/proc/self的学习---CTF应用/proc/self/cmdline迷途羔羊pro的博客-CSDN博客