参考自:whoami大佬的
然后自己学习的基础知识在这里:Linux的/proc/self/学习 ++ CTF例题。参考自上面大佬的。自己输出学习一下而已。
一、自己做:
我自己做的时候,没有想找个文件目录穿越,用那些伪协议,来了个便,然后127.0.0.1的ssrf也尝试
这些都是些啥啊!!!
/proc/self/environ
/proc/self/cmdline
二、学到的&&不足:
- 当看到url中有
?file= ...
的时候,当然是想到文件包含balabala之类的
。同时还可能用PHP伪协议,php://filter
啦,或者本地的直接file://
,找个file还可以加空格绕过过滤哦,之前有个题做过的,还有?file=http://127.0.0.1/admin.php
这样的ssrf
也未尝不是不行哦, - 当然啦,还有最最基础的一个:
?file=../../../../etc/passwd
这个啦!!! - 然后学习这些:
proc/self/environ
和这个,proc/self/cmdline
关于/proc/self/
等等相关的知识点,看这个:
三、学习WP
进入题目,一个输入框:
看到url中有个/?url=,本以为是ssrf,但试了试不行,考虑文件包含,我们抓包尝试:
发现确实存在文件包含漏洞。首先尝试直接构造 ?url=../../../../../../../flag
来读取flag失败,看来有过滤
我们要换一种思路,既然存在文件包含,我们不仅可以直接读取文件,也可以通过读取/proc目录中的文件来读取文件。如下,我们读取/proc/self/cmdline
来获取启动当前题目进程的完整命令
也就是看看,这个网页是哪个命令开启的
?url=../../../../../proc/self/cmdline
可知,由python2启动了一个app.py文件,我们读一下这个app.py文件:
得到页面源码:
from flask import Flask, Response
from flask import render_template
from flask import request
import os
import urllib
app = Flask(__name__)
SECRET_FILE = "/tmp/secret.txt"
f = open(SECRET_FILE) #