CTF--file_get_contents
一、原网页:
二、步骤:
1.源码分析:
<?phpextract($_GET); // 将 $_GET 数组中的所有键值对提取为变量if (!empty($ac)) // 只有当 $ac 不为空时,代码才会继续执行
{ $f = trim(file_get_contents($fn)); //trim():去除文件内容两端的空白字符(如空格、换行符等) /file_get_contents():读取由 $fn 指定的文件内容 if ($ac === $f) // $ac 是否与 $f(文件内容)严格相等(===){echo "<p>This is flag:" ." $flag</p>"; // 如果相等,则输出一个提示信息,其中包含变量 $flag 的值}else{echo "<p>sorry!</p>"; // 如果 $ac 与 $f 不相等,则输出“sorry!”}
}?>
通过get方式传入,$ac和$fn相等才能返回flag
此题的关键点在于file_get_contents()函数,此函数可以通过伪协议进行绕过
2.常见的伪协议:
- php://
php://input: 允许访问请求的原始数据(POST 请求)
php://filter: 允许对文件内容进行流式过滤
- data://
允许将数据嵌入到 URL 中,通常用于内联数据( GET请求)
- zip://
- bzip2://
用于访问压缩文件中的内容
3.选取伪协议,构造新的url:
data://