攻防世界:fileclude学习历程

一.代码审计

flag就在flag.php中,get两个变量存在file1和file2中。

file_get_contents() 把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。

file_get_contents()的参数也为文件名,直接file2=hello%20ctf时file2为字符串,需要用data://协议使它当做文件。

二.伪协议介绍

1.file://协议:用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

file:// [文件的绝对路径和文件名]

2.php://协议:访问各个输入/输出流(I/O streams);

php://filter用于读取源码

php://input用于执行php代码

php://filter/convert.base64-encode/resource=文件路径 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

3.zip://协议:可以访问压缩包里面的文件。

4.data://协议:可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

三.构造payload

首先file2,我们需要将hello ctf变为文件名,所以用data://协议,用法为:data://text/plain,base64

text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。

接着file1用php://协议,根据前文的php://filter/convert.base64-encode/resource=文件路径 ,

可以得出file1=php://filter/convert.base64-encode/resource=flag.php

最后得出:payload=

?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf

 最后解码,即可得到flag:cyberpeace{8a3302966724e851a3b230a205932260}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值