当前位置: 首页 > news >正文

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
在这里插入图片描述
/proc目录中是一些与进程有关的目录,再下一级目录/proc/具体pid中是其进程本身相关的文件。下面简要介绍/proc/100目录下的常见文件夹和文件,其中有些文件是每个进程都会具有的:
在这里插入图片描述

  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
    在这里插入图片描述

  5. fd(*)
    fd目录里面包含当前进程打开的每一个文件的描述符,这些文件描述符是指向实际文件的一个符号链接,即每个通过这个进程打开的文件都会显示在这里。所以我们可以通过fd目录的文件知道该进程打开的文件路径和文件内容
    在这里插入图片描述
    查看指定进程打开的某个文件的内容,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
    在这里插入图片描述
    在这里插入图片描述

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

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

    这里应该是ls命令的地址

  • 获取当前环境变量:cat /proc/self/environ
    在这里插入图片描述

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

相关文章:

  • Starting the Docker Engine...一直转圈
  • 中国人民大学金融加拿大女王大学硕士项目——你愿意花一年时间完成蜕变吗
  • SAP系统标准表之间的关联关系对应
  • 职场遇到瓶颈如何破解?不妨看看中国人民大学金融加拿大女王大学硕士项目
  • 微信商家0.2费率如何申请
  • 服务器量化训练操作说明
  • 虾皮广告怎么做:如何在虾皮平台上进行广告投放
  • 【玩转TableAgent数据智能分析】借助全球高校数据多维度分析案例,体验TableAgent如何助力用户轻松洞察数据,赋能企业高效数智化转型
  • 【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化
  • 数据分析基础之《numpy(4)—ndarry运算》
  • 第四十一章 XML 映射参数摘要
  • opencv静态链接error LNK2019
  • Peter算法小课堂—贪心与二分
  • 22 3GPP在SHF频段基于中继的5G高速列车场景中的标准化
  • 数智金融技术峰会|数新网络受邀分享《金融信创湖仓一体数据平台架构实践》,敬请期待
  • CentOS7简单部署NFS
  • CSS实用技巧干货
  • es的写入过程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript 基础知识 - 入门篇(一)
  • Java精华积累:初学者都应该搞懂的问题
  • js操作时间(持续更新)
  • PHP变量
  • Python爬虫--- 1.3 BS4库的解析器
  • React-生命周期杂记
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 程序员最讨厌的9句话,你可有补充?
  • 缓存与缓冲
  • 力扣(LeetCode)357
  • 使用Gradle第一次构建Java程序
  • 怎么把视频里的音乐提取出来
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​批处理文件中的errorlevel用法
  • (07)Hive——窗口函数详解
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (day6) 319. 灯泡开关
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)linux文件内容查看
  • (五)Python 垃圾回收机制
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)大型网站架构演变和知识体系
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net 7 上传文件踩坑
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 的程序集加载上下文
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET实现之(自动更新)
  • /etc/shadow字段详解
  • @staticmethod和@classmethod的作用与区别