目录:

  • /proc目录
    • 1.cmdline
    • 2.wd
    • 3.exe
    • 4.environ
    • 5.fd ,比较重要~~
    • 6.self
      • 1.获取当前启动进程的完成命令:
      • 2.获取目标当前进程的运行目录与目录里的文件:
      • 3.获得当前进程的可执行文件的完整路径:
      • 4.获取当前环境变量
      • 5.获取当前进程打开的文件内容
  • 例题:
    • No.1 [网鼎杯 2020 白虎组]PicDown
    • No.2 [V&N2020 公开赛]CHECKIN

我们都知道可以通过/proc/$pid/来获取指定进程的信息,例如内存映射、CPU绑定信息等等。如果某个进程想要获取本进程的系统信息,就可以通过进程的pid来访问/proc/$pid/目录。但是这个方法还需要获取进程pid,在fork、daemon等情况下pid还可能发生变化。为了更方便的获取本进程的信息,linux提供了/proc/self/目录,这个目录比较独特,不同的进程访问该目录时获得的信息是不同的,内容等价于/proc/本进程pid/。进程可以通过访问/proc/self/目录来获取自己的系统信息,而不用每次都获取pid。

学习自:WHOAMI。。能起上这个名字,就不一般,,,

/proc目录

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

还有的是一些以数字命名的目录,他们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的PID号为目录名,他们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link


右边的蓝色字就是进程号PID

下面我们简单介绍一下 /proc 目录中的常见文件夹与文件。

上面列出的是 /proc 目录中一些进程相关的目录,每个目录中是其进程本身相关信息的文件。下面是系统上运行的一个PID为1035 的进程的相关文件,其中有些文件是每个进程都会具有的:

1.cmdline

cmdline 文件存储着启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息。可以通过查看cmdline目录获取启动指定进程的完整命令:

cat /proc/1035/cmdline

可知PID为1035的进程的启动命令为 /usr/sbin/cups-browsed。。。我也不知道我知道这个之后有什么用处啊啊。。。

2.wd

cwd 文件是一个指向当前进程运行目录的符号链接。可以通过查看cwd文件获取目标指定进程环境运行目录

ls -al /proc/1090/cwd


可见PID为1090的进程的运行目录为/var/lib/postgresql/9.5/main
然后我们可以直接使用ls目录查看该进行运行目录下的文件:

ls /proc/1090/cwd

如上图所示,与直接查看/var/lib/postgresql/9.5/main目录的效果是一样的。

3.exe

exe 是一个指向启动当前进程的可执行文件(完整路径)的符号链接。通过exe文件我们可以获得指定进程可执行文件完整路径

ls -al /proc/1090/exe

4.environ

environ文件存储着当前进程的环境变量列表,彼此间用空字符(NULL)隔开,变量用大写字母表示,其值用小写字母表示。可以通过查看environ目录来获取指定进程环境变量信息:

cat /proc/2889/environ

5.fd ,比较重要~~

fd是一个目录,里面包含着当前进程打开的每一个文件的描述符(file descriptor)差不多就是路径啦,这些文件描述符是指向实际文件的一个符号连接,即每个通过这个进程打开的文件都会显示在这里。所以我们可以通过fd目录的文件获取进程,从而打开每个文件的路径以及文件内容。

ls -al /proc/1070/fd


查看指定进程打开的某个文件的内容。那个数字就是那个数字嘛,,

ls -al /proc/1070/fd/4

这个fd比较重要,因为在Linux系统中,如果一个程序用 open() 打开了一个文件,但是最终没有关闭它,即使从外部(如:os.remove(SECRET_FILE))删除这个文件之后,在/proc这个进程的 pid目录下的fd文件描述符 目录下 还是会有这个文件的文件描述符,通过这个文件描述符我们即可以得到被删除的文件的内容

6.self

上面的这些操作列出的都是目标环境指定进程的信息,但是我们在做题的时候往往需要的当前进程的信息,这时候就用到了/proc 目录中的self子目录了。

/proc/self表示当前进程目录。前面说了通过/proc/$pid/来获取指定进程的信息。如果某个进程想要获取当前进程的系统信息,就可以通过进程的pid来访问/proc/$pid/目录。但是这个方法还需要获取进程pid

在fork、daemon等情况下pid还可能发生变化。

为了更方便的获取本进程的信息,Linux提供了/proc/self/目录,这个目录比较独特,不同的进程访问该目录时获得的信息时不同的,内容等价于/proc/本进程pid/。进程可以通过访问/proc/self/目录来获取自己的系统信息,而不用每次都获取pid。

有了self目录就方便多了,下面演示一下self的常见使用。

1.获取当前启动进程的完成命令:

cat /proc/self/cmdline

2.获取目标当前进程的运行目录与目录里的文件:

ls -al /proc/self/cwd
ls /proc/self/cwd


这样就和我直接在当前情况下ls一样了啊

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

3.获得当前进程的可执行文件的完整路径:

ls -al /proc/self/exe

4.获取当前环境变量

/proc/self/environ

5.获取当前进程打开的文件内容

cat /proc/self/fd/{id}

下文在题目中演示,

**注意:**在真正做题的时候,我们是不能通过命令的方式执行通过cat命令读取cmdline的。因为如果 cat读取/proc/self/cmdline/的话,得到的是 cat进程的信息。所以我们要通过题目的当前进程使用读取文件(比如,文件包含漏洞,,SSTI,,file:\\\本地读取,,../../../目录穿越,,SSRF)的方式读取/proc/self/cmdline

例题:

No.1 [网鼎杯 2020 白虎组]PicDown

BUUCTF: [网鼎杯 2020 白虎组]PicDown — proc文件的利用, — python反弹shell ---- python代码审计

No.2 [V&N2020 公开赛]CHECKIN

BUUCTF:[V&N2020 公开赛]CHECKIN – proc文件的利用 — python反弹shell ---- python代码审计

-----已搬运-------Linux的/proc/self/学习 ++ CTF例题相关推荐

  1. linux的/proc文件_Linux中“ / proc”文件系统指南

    linux的/proc文件 /proc, in short for "process", is a virtual file-system, that is created eve ...

  2. Linux中/proc目录下文件详解 /proc/devices文件 /proc/modules文件

    http://blog.chinaunix.net/uid-10449864-id-2956854.html 原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu,内存等相关的信息, ...

  3. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  4. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  5. linux 中/proc 详解

    proc 文件系统   在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西 ...

  6. linux 内核模块 proc,Linux 内核模块 proc文件系统.pdf

    Linux内核模块 proc文件系统 Linux内核模块 §  内核模块是内核的扩展,它供了在内核运 行过程中动态加载的特性. §  模块被加载进系统后,就在内核态下运行了, 成了内核的一部分,可以读 ...

  7. Linux操作系统基础知识学习

    Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目, ...

  8. 鸟哥的linux私房菜-基础学习篇 读书笔记

    从事linux工作一年多,算是能够熟练运用linux服务器,但仍觉得自己对Linux的原理,理论缺乏空洞,潜下心来认真阅读尘封的鸟哥经典,知识点很全,收获颇多,实践与知识结合,知行合一,对linux开 ...

  9. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  10. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)

    鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一) 第零章 计算机概论 0.1 电脑:辅助人脑的好工具 0.1.1 计算机硬件五大组成部分 0.1.2 一切设计的起点: C ...

最新文章

  1. mysql 复合索引 in,MySQL复合索引比主键索引还快,为什么?
  2. 学生电脑哪个牌子好_贺州腻子粉哪个牌子好
  3. foreach 实现 MyBatis 遍历集合与批量操作数据
  4. 出让执行权:Task.Yield, Dispatcher.Yield
  5. bitcount方法详解_Java Long类的bitCount()方法和示例
  6. jenkins教程菜鸟_Jenkins教程:修改Jenkins端口号
  7. html编码写出滚动字幕,HTML滚动字幕代码及参数详解_html/css_WEB-ITnose
  8. 喜报:毒霸成功通过VB100认证
  9. Qt5 程序封包exe
  10. JavaScript 计算标准体重的公式
  11. (5)将一个数组中的值按逆序重新存放。例如原来顺序为8,6,5,4,1。要求改为1,4,5,6,8
  12. 铁路轨道设备概述1:铁路轨道基础设备
  13. 读什么,才能让你的心沉静下来
  14. WIN10, USB转TTL驱动安装( CH340 和 PL- 2303 )
  15. 最新小米易支付系统源码
  16. CSDN问答——测评
  17. jav阶段性总结(-5)
  18. 使用Java语言搭建一个简易的局域网直播(live)系统
  19. 网易服务器配置验证失败,验证失败 连接到icloud时出错怎么解决?
  20. TIA博途如何完全卸载西门子 STEP 7 (TIA Portal) 软件?

热门文章

  1. 常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
  2. 在vue项目中插入视频
  3. 计算ndvi值需要的数据_利用TM计算NDVI问题
  4. tiny-emitter 源码解析
  5. PC_溢出概念+判断方法+示例
  6. 电脑插耳机有声音,扬声器没声音的解决方案(win10)
  7. Java教程:Java分割字符串(spilt())
  8. 我的专业我的梦作文计算机,我的创新我的梦优秀作文
  9. Php维语翻译,维语翻译_维吾尔翻译_维语翻译在线
  10. 《统计学基于R》第一章 数据与R