攻防世界 fileclude
代码审计
WRONG WAY! <?php
include("flag.php");
highlight_file(__FILE__);//高亮显示文件的源代码
if(isset($_GET["file1"]) && isset($_GET["file2"]))//检查file1和file2参数是否存在
{
$file1 = $_GET["file1"];
$file2 = $_GET["file2"];
if(!empty($file1) && !empty($file2))
{
if(file_get_contents($file2) === "hello ctf")
{
include($file1);//如果file2文件的内容是"hello ctf",会执行include($file1)
}
}
else
die("NONONO");
}
总结:include($file1)
会包含file1
指定的文件,可能会有flag。所以我们要达到file2=hello ctf的要求,file2被放入了file_get_contents() 函数,所以我们要绕过这个函数。可以使用php://input进行绕过
PHP语言提供了一个特殊的输入流——php://input,它能够让我们获取未经处理的POST请求体数据。使用php://input的优势在于它允许开发者绕过PHP的常规输入过滤机制,直接读取原始的POST数据
所以payload为:
?file1=php://filter/read/convert.base64-encode/resource=flag.php&file2=php://input
同时post传入hello ctf(推荐使用hackbar插件)
参考大佬的方法也可以使用data://协议构造payload
然后拿到出现base64编码,进行在线解码得到fiag