题目1:fileinclude
工具:
Burpsuite
Hackbar V2
火狐浏览器的扩展应用
解题关键:
学会文件包含的命令以及学会读懂php脚本
解题过程:
首先对该网站进行抓包,发现潜藏的php脚本
这段代码的作用是:
检查是否 display_errors 配置项被设置为打开,如果没有则将其打开,这样可以在页面上显示所有错误信息。
将错误报告级别设置为 E_ALL,这样会显示所有类型的错误信息。
获取名为 'language' 的 cookie 的值赋给变量 $lan。
如果 'language' 的 cookie 不存在,则设置 'language' 的 cookie 值为 'english',并包含名为 'english.php' 的文件。
如果 'language' 的 cookie 存在,则根据 'language' 的 cookie 值包含相应的文件。
使用 file_get_contents 函数读取 'index.php' 文件的内容,并将其赋给变量 $x。
最后,以文本形式输出从 'index.php' 文件中读取到的内容。
其实意味着这个时候cookie就是我们需要继续进行修改的位置,而language是我们需要进行提交的参数,而我们要做的是获取flag.php的值,首先尝试直接读取php文件(一般无法实现),一般使用php://filter/进行文件访问
php://filter//read=/var/www/html/flag.php
使用hackbar提交cookie,发现文件不存在
更换将文件内容进行base64编码后显示在浏览器上的命令(最后使用flag.php还是flag应情况而确定,需要都尝试)
language=php://filter//read=convert.base64-encode/resource=/var/www/html/flag
得到一串base64编码,将其解码得到flag
题目2:fileclude:
好多file呀!
解题关键:
学会文件包含漏洞的各种命令
解题过程:
进入网页是一串php脚本,接下来我们尝试读懂代码
这段代码是一个简单的PHP脚本。
它首先包含了名为"flag.php"的文件,然后使用highlight_file(__FILE__)来显示当前的PHP脚本文件的代码。
接着,它检查是否有名为"file1"和"file2"的GET参数被设置。如果这两个参数都不为空,它会尝试读取file2文件的内容,如果内容等于"hello ctf",那么它将包含file1文件的内容。如果file1和file2参数不是都不为空,将会输出"NONONO"并终止脚本的执行。
结合题目我们应该意识到我们需要包含flag.php文件接着file2还需要等于"hello ctf",并且file1与file2都不为空才行。那我们可以令file1包含flag.php,并且用到上一题使用的poc使用base64编码获取flag的内容。
file1=php://filter//read=convert.base64-encode/resource=flag.php
file2内容等于"hello ctf",但我们看到代码中的file_get_contents()函数就意味着file2不能直接等于该内容,而需要使用文件包含的方式,针对于此我们可以使用考虑将该内容构造数据流,使用data:// 与包含函数结合时,让用户来控制输入流,用户输入的data://流会被当作php文件执行。
这里我们区分一下data://与php://input:
1.php://input:
- php://input 是一个输入流,用于获取请求体中的原始数据。它通常用于接收 POST 请求中的数据,而不是通过GET参数传递的数据。
- php://input 返回的是请求体中的原始数据,未经任何处理,通常是一个字符串形式的数据。
2.data://:
- data:// 是一个数据流封装器,用于访问数据的输入输出流。它可以用于访问各种类型的数据,比如字符串、文件、变量等。
- data://允许访问各种类型的数据,并且可以指定数据类型和编码格式。
执行的命令是
?file2=data://text/plain,hello ctf
这两个命令都不为空则是将这两个命令同时get
组合起来是
这里有一串base64编码,将其解密得到flag
总结:
我们要学会使用各种文件包含命令,并且在做题过程中不断积累自己的poc。
标签:web,文件,data,base64,fileclude,flag,fileinclude,php,file2 From: https://blog.csdn.net/qq_52481261/article/details/139709667