Linux的/proc/self/学习

文章目录

    • /proc目录
    • /proc/self的使用

在做SSTI模板注入的CTF题中,发现有师傅提到可以用/proc/self这个目录获取flag,所以也来学习一波主要参考.

(我才知道)可以通过/proc/$pid/来获取指定进程的信息,例如内存映射、CPU绑定信息等。详细来说,如果某个进程想获取本进程的系统信息,就可以通过进程的pid编号来访问/proc/$pid/目录,但是这个方法不仅需要获取进程的pid编号,且在fork、daemon等情况下pid还会变化(属实有点太懂,fork是创建进程,daemon是守护进程,合起来就不知道具体啥情况了,哈哈)。为了更加方便的获取本进程的信息,linux提供了/proc/self/目录,在这个目录下,不同的进程访问该目录获取的信息是不同的,内容等价于/proc/$pid/

/proc目录

proc文件系统是一个伪文件系统,它的存在是为了在运行时访问内核内部数据结构、改变内核设置的机制,它只存在于内存中,不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

在该目录下除了/proc/self/目录,还有一些以数字命令的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc目录下,以进程的pid号为目录名,它们是读取进程信息的接口。self目录则是读取进程本身的信息接口,是一个link
Linux的/proc/self/学习_第1张图片
/proc目录中是一些与进程有关的目录,再下一级目录/proc/具体pid中是其进程本身相关的文件。下面简要介绍/proc/100目录下的常见文件夹和文件,其中有些文件是每个进程都会具有的:
Linux的/proc/self/学习_第2张图片

  1. cmdline
    cmdline文件存储启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息,可以通过查看cmdline目录获取启动指定进程的完整命令:cat /proc/1303/cmdline
    在这里插入图片描述

  2. cwd
    cwd文件是一个指向当前进程运行目录的符号链接,可以通过查看cwd文件获取指定进程环境的运行目录。
    在这里插入图片描述
    可见PID为1303的进程的运行目录为/home/kali,然后我们可以查看该运行目录。

  3. exe
    exe是一个指向启动当前进程的可执行文件(完整路径)的符号链接,通过exe文件,我们可以获取指定进程的可执行文件的完整路径。
    在这里插入图片描述

  4. environ
    environ文件存储着当前进程的环境变量列表,彼此见使用空字符(NULL)分隔,变量用大写字母表示,其值用小写字母表示。可以通过environ目录来获取指定进程的环境变量信息:cat /proc/1303/environ
    Linux的/proc/self/学习_第3张图片

  5. fd(*)
    fd目录里面包含当前进程打开的每一个文件的描述符,这些文件描述符是指向实际文件的一个符号链接,即每个通过这个进程打开的文件都会显示在这里。所以我们可以通过fd目录的文件知道该进程打开的文件路径和文件内容
    Linux的/proc/self/学习_第4张图片
    查看指定进程打开的某个文件的内容,cat /proc/1303/fd/3
    在这里插入图片描述
    fd这个文件目录比较重要,在linux系统中,如果一个程序open()打开了一个文件,但是始终没有关闭它,即使从外部(如os.remove(file_path))删除该文件后,访问/proc/self/fd,该目录下仍然存在被删除的文件的文件描述符,通过这个文件描述符我们可以得到被删除的文件的内容。

/proc/self的使用

  • 获取启动当前进程的完成命令:cat /proc/self/cmdline
    在这里插入图片描述

  • 获取目标当前进程的运行目录:ls al /proc/self/cwd;获取目标当前进程的运行目录里的文件:ls /proc/self/cwd
    Linux的/proc/self/学习_第5张图片
    Linux的/proc/self/学习_第6张图片

    当不知道目标网站的Web路径或者 当前路径时,经常用这招。

  • 获得当前进程的可执行文件的完整路径:ls -al /proc/self/exe
    在这里插入图片描述

    这里应该是ls命令的地址

  • 获取当前环境变量:cat /proc/self/environ
    Linux的/proc/self/学习_第7张图片

  • 获取当前进程打开的文件内容:cat /proc/self/fd/{id}

你可能感兴趣的:(渗透测试实践,linux,学习,运维)