5.攻防世界 fileinclude

进入题目页面如下

提示flag在flag.php

ctrl+u,查看源码

给出了一段PHP代码,进行代码审计

php 复制代码
<?php
// 检查是否开启了错误显示功能
if( !ini_get('display_errors') ) {
    // 如果没有开启,则将错误显示功能设置为开启状态
    ini_set('display_errors', 'On');
}

// 设置错误报告级别为显示所有类型的错误
error_reporting(E_ALL);

// 从客户端的 Cookie 中获取名为 'language' 的值,并赋值给变量 $lan
$lan = $_COOKIE['language'];

// 检查 $lan 是否为空
if(!$lan) {
    // 如果为空,设置一个名为 'language' 的 Cookie,值为 'english'
    @setcookie("language","english");
    // 包含名为 'english.php' 的文件
    @include("english.php");
} else {
    // 如果不为空,将 $lan 的值加上 '.php' 后缀后,包含对应的文件
    @include($lan.".php");
}

// 读取当前文件 'index.php' 的内容,并将其赋值给变量 $x
$x = file_get_contents('index.php');

// 输出变量 $x 的内容,即显示当前文件的源代码
echo $x;
文件包含漏洞

代码中使用 include 函数包含文件,而 $lan 变量的值直接取自用户的 Cookie。可以通过修改 Cookie 中的 language 值,来包含任意文件,从而导致文件包含漏洞。

代码没有对 $lan 变量的值进行任何验证和过滤,可以构造特殊的文件名来绕过正常的文件包含逻辑,执行恶意代码或获取敏感信息。

修改 Cookie 中的 language 值为 flag。当请求该页面时,服务器会尝试包含 flag.php 文件,从而将 flag 的内容输出到页面上

Cookie: language=php://filter/read=convert.base64-encode/resource=flag

利用 PHP 伪协议来绕过常规的文件包含限制并获取敏感文件

使用 php://filter 伪协议对文件内容进行 Base64 编码后输出,避免因文件内容格式问题(如二进制文件)导致显示异常,同时绕过部分简单的过滤机制。

read=convert.base64-encode

php://filter 伪协议的一个过滤器,指定了读取文件内容时要进行的操作。convert.base64-encode 表示将文件内容进行 Base64 编码,文件内容就会以 Base64 字符串的形式输出,方便在网页上显示和后续解码。

resourcephp://filter 伪协议中用于指定要操作的文件资源的参数

用burp suite抓包,修改cookie

得到base64编码的flag可以利用下面这个在线工具解码

Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 - The X 在线工具

最终得到flag

cyberpeace{94027b50fe68bcb6ff13855e5cb60024}

相关推荐
23zhgjx-hyh8 分钟前
配置多区域OSPF,配置OSPF手动汇总,配置OSPF特殊区域
网络
23zhgjx-hyh12 分钟前
OSPF报文分析
网络·智能路由器
23zhgjx-zgx1 小时前
OSPF:虚链路
网络·tcp/ip·华为·智能路由器·ensp
咩咩觉主2 小时前
Unity网络开发基础 (2) 网络协议基础
网络·unity·c#
嵌入式悦翔园4 小时前
嵌入式设备的功能安全和信息安全?
网络·安全·php
天空卫士4 小时前
AI巨浪中的安全之舵:天空卫士助力人工智能落地远航
大数据·人工智能·安全·网络安全·数据安全
安 当 加 密4 小时前
中小企业Windows双因素认证的“轻量化”安全解决方案
安全
喝养乐多长不高5 小时前
HTTPS加密原理详解
网络·网络协议·http·https·证书·非对称加密·对称加密
D-river5 小时前
【Academy】HTTP 请求走私 ------ HTTP request smuggling
网络·网络协议·安全·web安全·http·网络安全
hws6 小时前
如何自动备份网站,提供三种免费方法
安全