攻防世界fileclude
自学的困难,一个题10个没见过的知识点,唉,太难了...
----------------------------------------------------------------------------------下面是正文。
原题地址:攻防世界
从题目我们就能看出来这是一个文件包含漏洞的题,下面是源码
怎么说呢,第一次看到这个源码和之前一样,我是蒙圈的...在长时间的查找资料后,我开始逐渐理解了一切。
---------------代码分析
从flag.php来看,我们要找的flag就在这个文件夹里面并且网页已经包含了这个文件接着往下我们声明两个变量$_GET[file1]和$_GET[file2],并将获取这两个变量的get数据给到变量$file1和$file2。
下面是if结构,把$file2通过file_get_contents函数将其以字符串的形式提现在服务器端,并是其值等于hello ctf。而file1则包含在include函数中。
因为我们要让file2等于hello ctf所以必须绕过file_get_contents函数,而绕过的方法就是通过我们的php伪协议,这样hello ctf就写入了我们的file2中。并且通过为协议来获取我们想要的flag.php。
php伪协议
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。
php://input 是个可以访问请求的原始数据的只读流,可以读取没有处理过的POST数据。
因为在这个题只用到了这两个,所以就先只简单说一下这两个的意思
通过php://filter的读取只读流的特点,我们就可以访问被file_get_contents函数修改后的原始数据(这里的原始数据指的就是等于hello ctf)这样我们便绕过了die函数。然后通过php://input 获取flag.php的源代码就可以了。
php://filter伪协议的书写格式为:php://filter/read=convert.base64-encode/resource=需要的文件
这里进行base64位编码是因为不进行编码网站就会运行代码,我们就无法得到flag.php文件。
所以我们得到了 ?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input
同时我们需要对file2进行POST传参。我这里不知道为什么直接在POST栏写入hello ctf没有执行,所以我用抓包试了一遍。
修改一下
将file2=hello+ctf修改位hello ctf即可看到
右面就是经过base64位编码后的flag.php里面的源码(因为是窗口模式,所以没有完全显示出来)
用base64位解码后就可以得出flag
来源地址:https://blog.csdn.net/m0_73303597/article/details/127736756
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341